Introducción a D-Bus

bus-hierarchy-conceptual

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

D-Feet


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   neysonv dijo

    interesante. tanto tiempo viendolo, y no sabia ni que era

  2.   Yukiteru dijo

    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.

  3.   Gabriel dijo

    Realmente es un muy buen artículo, gracias

  4.   sinner dijo

    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.

  5.   Note dijo

    > 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.

    1.    AdrianArroyoCalle dijo

      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.