Este documento introduce D-BUS, un mecanismo IPC moderno para Linux. D-BUS implementa un protocolo de comunicación orientado a objetos que permite la comunicación entre procesos, llamadas a métodos remotos y difusión de señales. Los procesos se comunican a través de un bus compartido utilizando direcciones únicas, nombres y objetos con interfaces y métodos. Existen bindings que permiten el uso de D-BUS desde diferentes lenguajes de programación. D-BUS se usa ampliamente en aplicaciones y escritorios Linux.
2. 2
Licencia
●
Creative Commons:
●
Reconocimiento – Compartir por igual (by-sa):
–
Se permite el uso comercial de la obra y de las
posibles obras derivadas, la distribución de las
cuales se debe hacer con una licencia igual a la
que regula la obra original
4. 4
Introducción
Los mecanismos IPC clásicos de UNIX
se han quedado anticuados para las
necesidades actuales de Linux
●
Las aplicaciones necesitan conectividad+facilidades de programación
●
Cada escritorio tiene sus propios mecanismo RPC, que al igual que los IPC, se ven anticuados
●
La comunidad FreeDesktop diseñó D-BUS con el objetivo de tener un mecanismo IPC ligero y
rápido, que además unifique los mecanismos RPC de los escritorios libres.
5. 5
Introducción
D-BUS es un mecanismo IPC moderno
●
Los mecanismos IPC clásicos se basan en el intercambio
de flujos de bits entre distintos procesos
●
D-BUS, por el contrario, implementa un protocolo de
comunicación
–
Orientado a conexión y con estado, pero no transaccional
–
Mensajes discretos formateados
–
Bus compartido de comunicación
6. 6
Introducción
D-BUS se caracteriza por dirigirse a 3
usos fundamentales
●
Comunicación entre procesos de la misma máquina (intercambio de mensajes)
–
Implementa una comunicación IPC sencilla, similar a la clásica de UNIX
●
Llamadas a métodos de objetos de procesos de la misma máquina
–
D-BUS se orienta a objetos; cada proceso es un objeto con su nombre y dirección
correspondientes
–
De manera similar a los mecanismos RPC, un proceso puede descubrir y llamar a
métodos de otros procesos
●
Comunicación del sistema
–
El bus se divide en dos:
●
Bus de espacio de usuario, único para cada sesión
●
Bus del sistema; se usa para la comunicación de aplicaciones con la capa del
kernel
–
Puede realizarse una comunicación directa entre ambos buses (kernel y aplicaciones
del sistema)
8. 8
Fundamentos de D-BUS.
Conceptos. Bus
El funcionamiento de D-BUS se orienta alrededor de
la creación de un bus unificado y compartido por
los procesos que necesitan comunicación
●
Existen 2 modalidades de uso del bus a los que un proceso, denominado
cliente, puede conectarse:
–
Bus punto a punto:
●
Funcionalidad IPC clásica
●
2 procesos se conectan entre sí y se comunican a través del
bus creado por uno de ellos.
●
Se implementa a través de la librería dbus (no hace falta el
daemon)
–
Bus multipunto:
●
Comunicación multiproceso; permite tener arquitecturas entre
procesos del tipo publish-subscribe o cliente-servidor
●
Se implementa a través del dbus daemon + librería dbus
–
9. 9
Fundamentos de D-BUS.
Conceptos. Bus
El funcionamiento de D-BUS se orienta alrededor de
la creación de un bus unificado y compartido por
los procesos que necesitan comunicación
●
Varios buses pueden estar activos en un sistema. En general se tienen siempre dos
buses activos en cada momento:
–
Bus de sistema:
●
Comunicación del sistema con aplicaciones de usuario mediante el Kernel
Event Layer
●
Ej: Notificaciones de hardware
●
Nombre del proceso: dbus-daemon --system
–
Bus de sesión
●
Comunicaciones IPC de propósito general
●
Ej: Notificaciones de aplicaciones
●
Nombre del proceso: dbus-daemon –session
–
10. 10
Fundamentos de D-BUS.
Conceptos. Object Model
D-BUS se comporta como un mecanismo RPC. Por
tanto, la programación se orienta a objetos.
●
En D-BUS un objeto es cualquier punto que forma parte de una
comunicación; un objeto es un “recurso” expuesto por un proceso
–
Un proceso puede usar remotamente objetos de otros procesos
–
Todos los procesos conectados tienen al menos un objeto, que es el propio bus
●
Los objetos se gestionan mediante métodos y señales
●
Los objetos puede transmitir 3 tipos de mensajes:
–
Request: Peticiones a objetos desde un proceso (ligado a métodos)
–
Reply: Respuestas de los objetos a un proceso (ligado a métodos)
–
Broadcast: Difusión a todos los clientes del bus (ligado a señales)
●
La comunicación establecida puede ser por tanto del tipo 1:1 o 1:N
11. 11
Fundamentos de D-BUS.
Conceptos. Object Model
D-BUS se comporta como un mecanismo RPC. Los
objetos pueden llamar a métodos de otros objetos
●
Un objeto puede mandar un request invocando un
método de otro objeto
–
El mensaje debe incluir los parámetros de entrada de la
función
●
La respuesta puede ser de 2 tipos:
–
Exception
●
Devuelve el nombre del error(o errores) y el mensaje
correspondiente
–
Reply
●
Devuelve los parámetros de salida de la función invocada
12. 12
Fundamentos de D-BUS.
Conceptos. Object Model
D-BUS se comporta como un mecanismo RPC. Los
objetos pueden llamar a métodos de otros objetos
●
La llamada puede realizarse de dos formas:
–
Llamada asíncrona:
●
No bloquea al proceso
●
Necesario una función de callback
–
Llamada síncrona
●
Bloquea al proceso
●
Nuevos mensajes se encolan hasta el desbloqueo
●
Marshalling
–
Las implementaciones de alto nivel de D-BUS encapsulan el mecanismo
RPC
–
Un programador invoca llamadas de otros procesos como si estuvieran en el
propio
●
Se obtiene una “copia” de un objeto que existe en otro proceso, y se usa como si
estuviera instanciado en el propio código
13. 13
Fundamentos de D-BUS.
Conceptos. Object Model
D-BUS, además de llamadas a
métodos, permite el envío de señales
●
Las señales en D-BUS son una forma de comunicación símplex de
un objeto a múltiples destinos.
–
No esperan respuesta
–
A diferencia de las llamadas, admiten parámetros pero no se distingue
entre parámetros de entrada o de salida
–
Un proceso debe registrar explícitamente qué señales quiere “escuchar”
●
Los procesos pueden esperar o no la señal. En cualquier caso,
pueden:
–
Ignorar la señal
–
Atender la señal
●
Es interesante registrar únicamente aquellas señales que se van a atender
–
14. 14
Fundamentos de D-BUS.
Conceptos. Object Model
Los métodos y señales de un objeto se denominan miembros. Todos
los miembros expuestos de un objeto se definen en la interfaz
●
Las interfaces cumplen la misma función que en Java.
–
Si un objeto implementa una interfaz significa que el objeto tiene
definidos todos los miembros de la interfaz, incluidos tanto los métodos
expuestos como las señales que puede emitir
–
El objeto admite llamadas a los miembros de su interfaz
●
Se representan mediante los nombres de interfaz
–
Ejemplo: org.freedesktop.DBus.ObjectManager
–
15. 15
Fundamentos de D-BUS.
Conceptos. Direccionamiento
Todo elemento en D-BUS tiene una dirección única
y varios nombres con los que se puede acceder al
mismo
–
Un...Un... IdentificadoIdentificado
porpor
Tiene el aspectoTiene el aspecto Y es elegidoY es elegido
porpor
Bus Address unix:path=/var/run/dbus/system_bus_socket La
configuración
del sistema
Conexión Bus name :34-907 (unique)
com.mycompany.TextEditor (well-known)
D-BUS
(unique) o el
programa
(well-known)
Objeto Path /com/mycompany/TextFileManager El programa
Interfaz Interface name Org.freedesktop.Hal.Manager El programa
Miembro Member name ListNames El programa
16. 16
Fundamentos de D-BUS.
Conceptos. Direccionamiento
●
El bus daemon:
–
Tiene una dirección y nombre únicos
–
La librería dbus encapsula el proceso de conexión; el
proceso cliente se abstrae del bus; solo debe abrir y usar una
conexión al mismo
●
Los procesos cliente manejan conexiones al bus
–
Cada conexión tiene un nombre único que hace las veces de
dirección al bus
●
Los nombres son únicos mientras el bus exista (unique)
●
Existen nombres reservados para los servicios Well-Known
–
17. 17
Fundamentos de D-BUS.
Conceptos. Direccionamiento
●
Se accede a un objeto mediante su dirección
–
La dirección recibe el nombre de path por su parecido al path de
UNIX
●
La llamada a un miembro se realiza mediante el nombre
del mismo
●
Ejemplo:
–
Estándar de notificaciones de D-BUS
–
Se representa mediante el objeto /org/freedesktop/Notifications
–
Implementa la interfaz org.freedesktop.Notifications
–
Para lanzar una notificación, se llama al miembro Notify
–
–
18. 18
Programación de D-BUS
Bindings
La API provee dos maneras de implementar D-BUS
en una aplicación
●
Implementación de bajo nivel
●
Librería escrita en C
●
No es recomendable a la hora de programar una aplicación; como todo bajo
nivel, puede resultar difícil y propenso a errores,
●
Su objetivo es programar nuevas APIs de alto nivel
●
Implementación de alto nivel
●
Se basa en librerías conocidas como bindings
●
Un binding en programación consiste en el mapeo de un objeto hacia una interfaz
y viceversa. En D-BUS se denomina bindings a las librerías wrapper que
permiten el uso de D-BUS mediante lenguajes de programación distintos a C.
●
Cada binding proporciona una API; existen multitud de bindings para numerosos
lenguajes de programación, siendo los más importantes y soportados:
–
GDBus: Wrapper orientado a la programación mediante las bibliotecas GLib
–
Qt4: La bilbioteca Qt incluye desde su versión 4 una librería destinada a D-Bus
–
Java Dbus: Wrapper escrito en Java
–
Python: Wrapper escrito en Python
●
19. 19
Estado actual
Usos
●
Numerosas aplicaciones utilizan la
librería dbus
–
Sistemas de notificaciones de escritorio
●
Cinnamon, Gnome, …
–
Aplicaciones multimedia
●
Control reproductor LastFm, Banshee
–
Sistemas de mensajería
●
Pidgin
20. 20
Estado actual
Futuro: kdbus
●
La idea es que el mensaje se transmita
directamente entre dos procesos, despertando
únicamente al dbus-daemon para la conexión
inicial
–
Nuevo tipo de socket AF_DBUS
–
El cambio únicamente implica reescribir la librería
dbus, lo que permite compatibilidad con las
aplicaciones actuales
●
Mayor rendimiento y velocidad
Actualmente kdbus se encuentra en desarrollo.
El objetivo del proyecto es llevar el mecanismo
dbus al kernel