Adrianistán

El blog de Adrián Arroyo


Introducción a D-Bus

- Adrián Arroyo Calle

Esta entrada la he realizado originalmente para el blog DesdeLinux

dbus

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.
var dbus=require("dbus-native");

var bus=dbus.sessionBus();
bus.getService("org.freedesktop.Notifications").getInterface("/org/freedesktop/Notifications","org.freedesktop.Notifications",function(err,notify){

notify.Notify("Probando D-Bus",0,"/usr/share/pixmaps/firefox.png","Título","Cuerpo de la notificación",[],[],5,function(err,id){
console.log("Notificación enviada");
});
});

 

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?



  • 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

Comentarios

Añadir comentario

Todos los comentarios están sujetos a moderación