Si llevas algún tiempo en Linux quizás te hayas llegado a preguntar que es D-Bus. D-Bus es un componente incorporado no hace mucho a las distribuciones de escritorio en Linux que previsiblemente jugará un papel muy importante para la programación en Linux.
¿Qué es D-Bus?
D-Bus es un sistema de comunicación entre aplicaciones de muy diverso origen. Con este sistema podremos llamar incluso a aplicaciones privativas (si estas implementan D-Bus). No juega el mismo papel que una librería pues una librería no es un programa independiente y la librería forma parte de tu ejecutable. La idea de D-Bus está inspirada en los objectos OLE, COM y ActiveX de Windows. Los objetos COM de Windows ofrecen una manera sencilla de llamar a cualquier programa desde otro programa llegando incluso a poder incrustarse visualmente uno dentro de otro sin necesidad de usar el mismo lenguaje de programación. D-Bus no llega tan lejos pero ofrece esa comunicación de la que UNIX carecía.
¿Por qué es importante D-Bus?
D-Bus es importante dada la gran diversidad de lenguajes que pueden funcionar en Linux y la gran diversidad también de librerías. Pongamos un ejemplo práctico. Yo quiero mandar una notificación al sistema notify-osd de Ubuntu desde mi aplicación en Node.js. Primero tendría que ver que librería ofrece esa funcionalidad en el sistema, libnotify en este caso, y después debería hacer unos bindings para poder llamar la librería programada en C desde JavaScript. Además imaginemos que queremos hacer funcionar nuestra aplicación con un escritorio que no usa libnotify para las notificaciones.
Usando D-Bus
Entonces hemos decidido que vamos a usar D-Bus para crear la notificación de nuestra aplicación en JavaScript.
https://gist.github.com/AdrianArroyoCalle/99d2ea6db92e90a54e2c
Hay 2 tipos de buses en D-Bus, un D-Bus único al sistema y un D-Bus para cada sesión de usuario. Luego en D-Bus tenemos servicios que son «los nombres de los proveedores D-Bus», algo así como las aplicaciones D-Bus. Después en una estructura como de carpeta están los objetos que puede tener ese servicio o instancias y finalmente la interfaz es la manera de interactuar con los objetos de ese servicio. En este caso es muy redundante pues el servidor de notificaciones es muy simple.
¿Quién usa D-Bus?
Más programas de los que imaginas usan D-Bus. Algunos servicios de D-Bus solo por nombrar ejemplos son:
- com.Skype.API
- com.canonical.Unity
- org.freedesktop.PolicyKit1
- org.gnome.Nautilus
- org.debian.apt
- com.ubuntu.Upstart
Para averiguar todos los servicios de D-Bus que tienes instalados puedes usar d-feet
interesante. tanto tiempo viendolo, y no sabia ni que era
Lo de d-feet si que no lo conocía, he programado algunas cosas en especial scripts para XChat (Clementine, Audacious) usando DBus y la verdad, haber conocido esa herramienta me hubiese ahorrado la locura de andar leyéndome el manual de MPRIS y las distintas interfaces DBus de Clementine y Audacious.
Realmente es un muy buen artículo, gracias
mira tú mi ignorancia;tantos problemas con dbus en freebsd,gentoo y debian y jamás supe que era….de echo aún no lo sé pero tu post me a dado una idea somera al menos.
> D-Bus es un componente incorporado no hace mucho a las distribuciones de escritorio en Linux.
No hace mucho????? Lo uso desde 2005.
Otra cosa es kdbus que sí es reciente. Es, simplificando, la integración de dbus dentro del kernel.
Sigue siendo poco tiempo más que nada porque D-Bus requiere que el resto de componentes del sistema lo empiecen a usar para poder ser plenamente funcional.