- DBus
-
D-Bus Entwickler: D-Bus-Team Aktuelle Version: 1.2.12
(7. Januar 2009)Betriebssystem: Unix, Linux, Windows Kategorie: Programmbibliothek, daemon, Framework Lizenz: GPL oder Academic Free License Deutschsprachig: ja freedesktop.org/Software/dbus D-Bus ist ein freies IPC-Framework, also ein Software-System für die Interprozesskommunikation, welches sich insbesondere an den Bedürfnissen von Desktopumgebungen einer graphischen Benutzeroberfläche orientiert.
Es ist Bestandteil des freedesktop.org-Projektes und wird nahezu bei jeder modernen Linux-Distribution eingesetzt, die über eine graphische Oberfläche verfügt. In seiner Gesamtheit stellt D-Bus mit all seinen Komponenten allgemein eine leichtgewichtige Middleware dar, sowie im Speziellen einen Object Request Broker (ORB).
Inhaltsverzeichnis
Grundlagen
Über D-Bus können Programme miteinander kommunizieren. Im rechts gezeigten Beispiel meldet sich ein Datei-Manager-Programm bei einem systemweiten Programm an, welches über die Hardware, die am Computer angeschlossen ist, informiert (in diesem Beispiel der Hardware Abstraction Layer-Dämon, kurz hal-Dämon). Der hal-Dämon informiert nun bei Änderungen an der Hardware das Datei-Manager-Program darüber. Dadurch kann dieses nun z.B. beim Einstecken eines USB-Sticks automatisch diesen mounten und die Inhalte darstellen.
Funktionsweise
Einzelne Programme bekommen über die Softwarebibliothek libdbus die Möglichkeit, sich paarweise gegenseitig zu kontaktieren und Nachrichten auszutauschen. Angesprochen werden jeweils Objekte, deren Benennung an Dateisystempfade erinnert, etwa
/org/kde/kspread/sheets/3/cells/4/5
. Um sicherzustellen, dass verschiedene Programme auseinandergehalten werden können, sind die D-Bus-Objekte in einem Namensraum zusammengefasst. Diese Namensräume enthalten meist den Domainnamen der Entwickler (zum Beispiel/org/kde
für die Programme vonkde.org
).Daneben existiert ein ausführbarer Nachrichtenbusdaemon dbus, mit dem sich mehrere Anwendungen verbinden können. Der Daemon kann Nachrichten von einer Anwendung an eine oder mehrere Anwendungen weiterleiten.
Gedacht ist D-Bus zum einen für die Kommunikation zwischen Desktopanwendungen derselben Sitzung (der sogenannte Session-Bus) und zum anderen für die Kommunikation zwischen der Desktopsitzung und Teilen des Betriebssystems wie dem Kernel, den verschiedenen Systemdaemonen oder Systemprozessen (System-Bus).
Geschichtliches
Bereits vor der Einführung eines standardisierten Nachrichtensystems für Desktop-Anwendungen durch freedesktop.org haben die beiden verbreitetsten Desktop Environments KDE und GNOME jeweils ihre eigenen, zueinander inkompatiblen Implementierungen des gleichen Konzepts entwickelt, und zwar DCOP (Desktop Communication Protocol) für KDE und Corba (Common Object Request Broker Architecture) für GNOME.
D-Bus verfügt über mehr Funktionen und wurde von den Desktop Environments bereits nach der Standardisierung schnell angenommen, sodass die Implementierungen der eigenen Systeme zugunsten des Standards schnell fallengelassen wurden. Das Standardprotokoll wurde damit zu einem maßgeblichen Faktor für den Linux-Desktop, da die Diskrepanzen zwischen den Desktop Environments damit zunehmend fallen.
Komponenten
Die D-Bus-Spezifikation besteht aus drei Teilen, und zwar im Einzelnen dem D-Bus-Daemon, der D-Bus-Bibliothek libdbus sowie dem eigentlichen D-Bus-Protokoll.
D-Bus-Daemon
Der D-Bus-Daemon implementiert einen sogenannten Nachrichtenbus (message bus), der in seiner Funktion einem Object Request Broker gleich kommt. Eine beliebige Anzahl von Clients verbindet sich mit dem daemon, basierend auf dem D-Bus-Protokoll und in der Regel unter Zuhilfenahme von libdbus. Einzelne (L)RPC-Aufrufe werden vom daemon entgegen genommen und an den zuständigen Client vermittelt, der daemon ist somit ein Broker. Die (L)RPC-Aufrufe agieren auf abstrakten Objekten und stellen in Anlehnung an das OOP-Objektmodel demnach Methodenaufrufe dar. Ferner bietet der daemon noch Dienste wie 'Activation' an, sodass er in seiner Funktion wohl als Object Request Broker betrachtet werden darf. Zuletzt stellt der daemon natürlich zeitgleich basierend auf den Einzelverbindungen eine one-to-many-Kommunikation (Broadcast) zur Verfügung
D-Bus-Bibliothek (libdbus)
Die D-Bus-Bibliothek stellt eine Referenzimplementierung des D-Bus-Protokolls bzw. der D-Bus-Spezifikation als Ganzes dar. Sie bietet eine API in der Programmiersprache C, mit der zwei Prozesse eine Verbindung eingehen können, um danach via LRPC/RPC zu kommunizieren. Sie stellt weiterhin das nötige Marshalling zur Verfügung, also das Ausrichten und korrekte Anordnen der Bytes für den Transport. Letztlich bietet die API alle Dienste für eine einfach abstrahierte Punkt-zu-Punkt- (Prozess-zu-Prozess-) Interprozesskommunikation.
Aufbauend auf libdbus haben sich Implementierungen für alle verbreiteten Programmiersprachen und Frameworks entwickelt, bei letzterem insbesondere auf Qt und Glib (Gtk+) zugeschnittene Implementierungen.
D-Bus-Protokoll
Das D-Bus-Protokoll ist ein binäres IPC-Protokoll. Spezifiziert sind sowohl Primitivtypen als auch zulässige Nachrichtentypen sowie die Kodierung für den Transport. Grundlegend basiert das Protokoll auf dem Prinzip des Nachrichtentauschs und spezifiziert darauf basierende entfernte Aufrufe (LRPCs/RPCs).
Weblinks
- D-Bus-Homepage auf freedesktop.org (englisch)
- D-Bus-Tutorial (englisch)
Wikimedia Foundation.