D-Bus

Aus Mikiwiki
Version vom 21. November 2010, 22:26 Uhr von Michi (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

D-Bus ist ein IPC-Framework, also ein Software-System für die Interprozesskommunikation, das sich besonders an den Bedürfnissen von Arbeitsumgebungen grafischer Benutzeroberflächen orientiert. Es ist Bestandteil des freedesktop.org-Projekts und wird nahezu bei jeder Linux-Distribution eingesetzt, die über eine grafische Oberfläche verfügt.

Inhaltsverzeichnis

Funktionsweise

Der D-Bus fungiert als Kommunikationssystem, das Arbeitsumgebungen untereinander und mit den darunter liegenden Schichten bis hin zu Kernel und Hardware verbindet. Er steht also im Dienst der Interprozesskommunikation und stellt die Infrastruktur bereit, dank der sich Anwendungsprogramme untereinander und mit Teilen des Betriebssystems unterhalten können. Zwar gibt es schon von Anfang an die bewährten Unix-Interprozesskommunikationsmechanismen, doch beschränken diese sich auf Signale, Pipes, usw. Daneben gibt es viele konkurrierende Ansätze zum D-Bus-Konzept, beispielsweise Corba oder Microsofts DCOM. Sowohl Gnome wie auch KDE experimentierten zu Beginn mit eigenen Corba-Implementierungen. KDE setzt inzwischen auf DCOP, bei Gnome wirken die Corba-Altlasten noch im Komponentensystem Bonobo nach.

Die grundlegende Bibliothek "Libdbus" von D-Bus stellt nur Funktionen für die Kommunikation zweier Anwendungen zur Verfügung. Anwendungsentwickler machen von ihr normalerweise keinen Gebrauch. Für sie gibt es die auf der Glib-Programmierschnittstelle basierende Bibliothek "Libdbus-Glib", die eine objektorientierte C-Programmierschnittstelle bereitstellt. Auf dieser Ebene erweitern sich die Fähigkeiten von D-Bus hin zu einem Bus-System - wie es der Name bereits andeutet.

D-Bus läuft als Daemon dbus-daemon im Hintergrund und wartet auf Verbindungsanfragen von Anwendungsprogrammen, die sich für bestimmte Ereignistypen registrieren, z. B. für das Ein- und Ausstecken von Hardware. Tritt ein solches Ereignis ein, schickt der dbus-daemon eine entsprechende Nachricht über den Bus und die Anwendungen können darauf reagieren. Grundsätzlich gibt es auf D-Bus verwendenden Systemen zwei von je einem Serverprozess realisierte Busse:

  • Der System-Bus startet beim Bootvorgang und ist ständig aktiv, auch wenn kein Benutzer angemeldet ist (dbus-daemon-Befehlszeilenparameter "--system", Konfigurationsdatei "/etc/dbus-1/system.conf"). Er dient hauptsächlich dafür, dass Arbeitsumgebungs-Programme mit den darunter liegenden Schichten sprechen können. So kann ein Anwendungsprogramm sich über den System-Bus für eine Hardwareklasse registrieren.
  • Der Session-Bus startet erst bei der grafischen Anmeldung an eine Arbeitsumgebungs-Sitzung (dbus-daemon-Befehlszeilenparameter "--session", Konfigurationsdatei "/etc/dbus-1/session.conf"). Er ermöglicht es den zu einer Arbeitsumgebungs-Sitzung gehörenden Anwendungsprogrammen, miteinander zu sprechen. Das können auch Dienste sein, die beispielsweise die Arbeitsumgebung zur Verfügung stellt.

Zum Starten von dbus-daemon dient das Programm dbus-launch, das unter anderem die nötigen Umgebungsvariablen setzt. Die meisten Linux-Distributionen starten dbus-daemon damit im Session-Modus zusammen mit der X-Sitzung. Während einer grafischen Benutzersitzung läuft dbus-launch ständig als Daemon, um bei Bedarf weitere Session-Bus-Prozesse zu starten. Nach dem Abmelden des Benutzers beenden sich dbus-launch und der entsprechende Session-Bus.

Zeitpunkt Laufende D-Bus-Prozesse
Nach dem Bootvorgang /usr/bin/dbus-daemon --system
Nach der Benutzeranmeldung an die grafische Oberfläche /usr/bin/dbus-daemon --system
/usr/bin/dbus-launch
/usr/bin/dbus-daemon --fork --session
Nach der Benutzerabmeldung von der grafischen Oberfläche /usr/bin/dbus-daemon --system

Vom Hardware Abstraction Layer aufgrund von Hardware-Interrupts der Bus-Controller ausgelöste Events können Programme im Userspace auf vielfältige Weise auswerten. Unter Gnome kümmert sich darum der Gnome Volume Manager, unter KDE der Kioslave Media. Für die Arbeitsumgebungs-unabhängige Reaktion lässt sich die Software lvman einsetzen, die z. B. auch unter Xfce funktioniert.

Meldet sich ein Anwendungsprogramm nun für eine bestimmte Geräteklasse (z. B. "camera" oder "storage") an, informiert der Hardware Abstraction Layer über D-Bus das Programm, sobald sich der Status eines Geräts in dieser Klass ändert. Beispielsweise startet der Gnome-volume-manager das Importprogramm gthumb, sobald eine Kamera angeschlossen wird. Das Verhalten des Gnome-volume-manager wird vom Programm Gnome-volume-properties festgelegt.

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
country DE.gif Wikipedia ger D-Buswbm Enzyklopädischer Artikel