D-Bus

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
D-Bus
Entwickler D-Bus-Team
Aktuelle Version 1.6.8
(28. September 2012)
Aktuelle Vorabversion 1.7.0
Betriebssystem Unix, Linux, Windows
Kategorie Programmbibliothek, daemon, Framework
Lizenz GPL oder Academic Free License
Deutschsprachig ja
freedesktop.org/Software/dbus

D-Bus (Desktop-Bus) ist ein freies IPC-Framework, also ein Software-System für die Interprozesskommunikation, welches sich insbesondere an den Bedürfnissen von Desktopumgebungen einer grafischen 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 (Systemdienst zur Unterstützung der Interprozess-Kommunikation) sowie im Speziellen einen Object Request Broker (ORB) (eine Art Kommunikations-Vermittler für Objekte) dar.

Grundlagen[Bearbeiten]

Ein vereinfachtes Kommunikationsschema: Ein Datei-Browser erhält von einem Hardwareüberwachungsprogramm Mitteilung, dass neue Hardware angeschlossen wurde

Ü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-Daemon, kurz hal-Daemon). Der hal-Daemon informiert den Datei-Manager nun bei Änderungen an der Hardware, sodass dieser z. B. beim Einstecken eines USB-Sticks diesen automatisch einhängen, und die Inhalte anzeigen kann.

Funktionsweise[Bearbeiten]

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 die Domains der Entwickler (zum Beispiel /org/kde für die Programme von kde.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).

Geschichte[Bearbeiten]

Bereits vor der Einführung eines standardisierten Nachrichtensystems für Desktop-Anwendungen durch freedesktop.org haben die beiden beliebtesten Desktop Environments KDE und GNOME jeweils unterschiedliche, zueinander inkompatible Implementierungen des gleichen Konzepts verwendet, 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 nach der Standardisierung von den Desktop-Environment-Projekten schnell angenommen und die Implementierungen der eigenen Systeme zugunsten des Standards fallengelassen. Das Standardprotokoll wurde damit zu einem maßgeblichen Faktor für den Linux-Desktop, da die Diskrepanzen zwischen den Benutzeroberflächen damit zunehmend fallen.

Komponenten[Bearbeiten]

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[Bearbeiten]

Der D-Bus-Daemon implementiert einen sogenannten Nachrichtenbus (message bus), der in seiner Funktion einem Object Request Broker gleichkommt. 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 entgegengenommen 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-Objektmodell demnach Methodenaufrufe dar. Ferner bietet der daemon noch Dienste wie Activation an. Zuletzt stellt der daemon natürlich zeitgleich, basierend auf den Einzelverbindungen, eine eins-zu-viele-Kommunikation (Broadcast) zur Verfügung.

D-Bus-Bibliothek (libdbus)[Bearbeiten]

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[Bearbeiten]

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[Bearbeiten]