PDF de programación - d-bus

Imágen de pdf d-bus

d-busgráfica de visualizaciones

Publicado el 14 de Enero del 2017
776 visualizaciones desde el 14 de Enero del 2017
284,7 KB
31 paginas
Creado hace 17a (24/06/2006)
Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

D-BUS

Carlos Garcia Campos
[email protected]

Vilanova i la Geltrú

24 de junio de 2006

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

Que es D-BUS?

◮ Sistema de paso de mensajes que permite a las aplicaciones

comunicarse entre ellas de una manera simple

◮ Mecanismo IPC (Inter-Process Comunication)

◮ Diseñado para cubrir dos casos de uso bien definidos:

◮ Un bus de sistema: para la comunicación entre el sistema y las

diferentes sesiones de usuario. Por ejemplo, notificaciones de
cambios en el hardware.

◮ Un bus de sesión: para la comunicación entre aplicaciones de

escritorio.

◮ D-BUS ha sido diseñado por y para el escritorio

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

Arquitectura D-BUS

◮ D-BUS está dividido fundamentalmente en 3 capas

◮ La librería libdbus: proporciona un API para que dos

aplicaciones se comuniquen entre si intercambiando mensajes.
Las comunicaciones son siempre 1 a 1.

◮ El bus de mensajes: es un demonio creado sobre libdbus al que

las aplicaciones pueden conectar. Es el encargado de
administrar los mensajes, redirigiéndolos al destinatario o
destinatarios.

◮ Bindings: proporcionan un API de mas alto nivel que libdbus

para distintos lenguajes de programación o frameworks de
desarrollo abstrayendo al programador de los detalles de bajo
nivel. Actualmente existen bindings para GLib/GObject, Qt,
Python, Perl, Mono/C# y Java, aunque no todos ellos están
incluidos de forma oficial en el paquete D-BUS.

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

Objetos

◮ Cuando una aplicación envía mensajes a otra lo hace siempre

a un objeto concreto, no a toda la aplicación

◮ Las aplicaciones D-BUS tendrán siempre al menos un objeto

◮ Son referenciados a través de un path (de forma similar a un

fichero en un sistema de ficheros)

◮ Path en D-BUS equivale a puntero o referencia en POO.

◮ Los objetos son instancias, no tipos

◮ Podemos invocar métodos sobre los objetos

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

Métodos y señales

◮ Son tipos de mensajes que pueden viajar por el bus.

◮ Invocar un método implica enviarle un mensaje de tipo

método al objeto.

◮ Las señales son mensajes que normalmente no tienen

destinatario. El bus redigirá estos mensajes todos los clientes
conectados.

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

Métodos y señales

◮ Por el bus de mensajes solo pueden circular 4 tipos de

mensajes:

◮ Llamadas a métodos
◮ Retorno de métodos
◮ Mensaje de error (excepciones)
◮ Señales

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

Interfaces

◮ Qué métodos pueden ser invocados sobre cada objeto viene

definido por su interfaz.

◮ Un objeto puede implementar varias interfaces

◮ Las interfaces si que representan el tipo de un objeto

◮ Se representan en forma de nombre de dominio inverso.

org.freedesktop.InterfaceName

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

Servicios

◮ Objetos, mensajes e interfaces se encuentran al nivel de la

primera capa de la arquitectura (libdbus)

◮ Los servicios se encuentran al nivel de la segunda capa (el bus

de mensajes)

◮ No son mas que un nombre conocido en un bus de mensajes.
El bus de mensajes no sabe en realidad nada de servicios, sino
de nombres que identifican clientes

◮ Un servicio es un conjunto de interfaces proporcionado por

una aplicación bajo un nombre. Una aplicación puede proveer
uno o mas servicios.

◮ Cuando una aplicación quiere publicar un servicio se conecta

al bus de mensajes proporcionando un nombre de servicio que
será el que usen los clientes para poder usar los objetos del
servicio.

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

Servicios

◮ Un servicio, no existe como tal, es solo una forma de llamar a
una aplicación que ofrece cierta funcionalidad a través de un
nombre

◮ Este nombre se especifica igual que las interfaces, a través del

sistema de nombres de dominio inverso.

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

El servicio calculadora

◮ En función de lo visto hasta ahora, podríamos convertir la

calculadora de GNOME en un servicio D-BUS proporcionando:

◮ Un nombre de servicio: org.gnome.utils.Calculator
◮ Una interfaz (al menos): org.gnome.utils.Calculator
◮ Los métodos de la interfaz: org.gnome.utils.Calculator.Add,

org.gnome.utils.Calculator.Substract, etc.

◮ Un objeto (al menos): /org/gnome/utils/Calculator

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

El bus de mensajes

◮ Es la segunda de la arquitectura construida sobre libdbus
◮ libdbus proporciona una comunicación 1 a 1, lo cual no parece

muy últil si queremos mantener varias aplicaciones
comunicadas entre si o realizar una notificación a todas las
aplicaciones del ecritorio

◮ El bus de mensajes es en realidad un servicio mas, es decir, es

uno de los participantes en la comunicación 1 a 1.

◮ Cada una de las aplicaciones o servicios completan de forma

independiente el segundo participante de la comunicación.
◮ Cuando una aplicación quiere comunicarse con otra, lo que

hace es enviarle sus mensajes al bus de mensajes y éste
reenviará dichos mensajes al destinatario correspondiente

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

El bus de mensajes

◮ Cuando un cliente se conecta al bus de mensajes éste genera

un nombre especial para él llamado nombre de conexión único

◮ Estos nombres especiales empiezan siempre por ’:’ y son

creados dinámicamente de forma que nunca se repiten en una
misma sesión del bus de mensajes (:1.3)

◮ Además del nombre único las aplicaciones pueden pedir al bus

de mensajes un nombre bien conocido o nombre de servicio.
Por ejemplo org.gnome.utils.Calculator

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

Cliente y servidor

◮ La comunicación 1 a 1 ofrecida por libdbus sigue el modelo

tradicional cliente-servidor.

◮ Servidor: permanecerá la espera de conexiones

◮ Cliente: conecte al servidor

◮ Una vez establecida la conexión comienza una comunicación

bidireccional de igual a igual, y libdbus ya no
diferenciará entre cliente y servidor.

◮ Como en toda comunicación cliente-servidor, ambos deben

ponerse de acuerdo en donde escuchará el servidor para que el
cliente pueda conectar. En D-BUS se conoce como dirección
D-BUS y por defecto es un socket unix.

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

Cliente y servidor

◮ El bus de mensajes es quién juega el papel del servidor y todas

las demás aplicaciones que conectan al bus son clientes

◮ Para que las aplicaciones no tengan que ponerse de acuerdo

con el bus de mensajes en cuanto a la dirección D-BUS, el bus
de mensajes exporta en una variable de entorno dicha
dirección.

◮ Libdbus consulta esa variable cuando un cliente trata de

conectar a un servidor

◮ Servicio != Servidor

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

El servicio org.freedesktop.DBus

◮ Las aplicaciones pueden conectar al bus de mensajes para

comunicarse con otras, pero también para interactuar con el
propio bus de mensajes.

◮ Este tipo de interacciones con el bus de mensajes se realiza a
través del servicio org.freedesktop.DBus ofrecido por el propio
bus

◮ El servicio org.freedesktop.DBus ofrece un objeto

/org/freedesktop/DBus que implementa la interfaz
org.freedesktop.DBus

Carlos Garcia Campos [email protected]

D-BUS

Introducción
Arquitectura
Un sistema orientado a objetos
El bus de mensajes
Servicios D-BUS
Bindings
Conclusiones

Ejemplo: ListNames

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import dbus

# Primero conectamos al bus de mensajes de sesión
bus = dbus.SessionBus ()

# Obtenemos el objeto /org/freedesktop/DBus
# proporcionado por el servicio org.freedesktop.DBus
remote_object = bus.get_object (‘‘org.freedesktop.DBus’’,
‘‘/org/freedesktop/DBus’’)

# Puesto que un objeto puede implementar varias
# interfaces, seleccionamos la interfaz a través de la
# cual vamos a interactuar con el objeto, es decir, la
# que ofrece el metodo ListNames en este caso
iface = dbus.Interface (remote_object, ‘‘org.freedesktop.DBus’’)

# Ahora invocamos el metodo ListNames para obtener la lista de
  • Links de descarga
http://lwp-l.com/pdf1652

Comentarios de: d-bus (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad