24.9.0 D-Bus

Diese Einführung in das Thema D-Bus subsumiert Teile aus unterschiedlichen Literatur-Quellen, um erste Antworten auf die Fragen „Was ist D-Bus?“ und „Was kann D-Bus leisten?“ zu geben.

D-Bus oder Desktop-Bus ist ein Framework der Inter-Process-Communication (IPC) und Teil des freedesktop-Projektes (https://www.freedesktop.org/wiki/). IPC gestattet es Prozessen, Daten in Form von Nachrichten auszutauschen. Diese Nachrichten werden auf einem Nachrichtenkanal gesendet und empfangen. Diesen Kanal nennt man D-Bus. D-Bus bietet mindestens zwei Busse zur Kommunikation zwischen Prozessen an. Einer ist der globale System-Bus und ein anderer der Session-Bus, zu dem jeder Desktop eines angemeldeten Benutzers innerhalb seiner Desktop-Sitzung automatisch verbunden wird, wenn sich eine seiner Anwendungen am D-Bus-Bus registriert.

Nach dem Einschalten eines Computers mit einem Linux-Betriebssystem werden auch Programme gestartet, die sich zum System-Bus verbinden und sich dort registrieren. Wenn sich ein Benutzer am Desktop angemeldet hat, dann starten weitere Programme und melden sich am Session-Bus an. Gemeinsam ist allen am D-Bus registrierten Programmen, dass sie entweder einen bestimmten Nachrichten-Dienst anbieten oder angebotene Nachrichten-Dienste nutzen. Ein Programm, das sich am System-Bus oder am Session-Bus registrieren kann, soll als dbus-fähig gekennzeichnet werden.

Beispiel:
Wenn Sie in Mint 18.3 in der Taskleiste auf das Netzwerksymbol klicken, dann öffnet sich ein kleines Menü-Fenster, in dem Sie das LAN oder WLAN aus- oder einschalten können. Nach dem Ausschalten sendet der Dienst mit der ID :1.21 – hinter dem der D-Bus-Dienst org.gnome.networkmanager_applet steht – u.a. das Signal 'NewIcon'. Der Dienst org.gnome.freedesktop.Notifikations empfängt es und wertet das Signal aus. Als erste Reaktion ändert sich das Netzwerksymbol in der Taskleiste. Dann schickt der Dienst eine Nachricht mit dem Namen 'Notify' zum D-Bus. Der Inhalt der Nachricht ist eine Mitteilung und wird in einem Fenster auf dem Desktop angezeigt:

I1

Abbildung 24.9.0.1: Nachricht auf dem Desktop

Jetzt werden Sie sich sicher fragen

1. Antwort
Die Antwort ist einfach: Um den Datenverkehr auf dem System-Bus oder auf dem Session-Bus zu beobachten, können Sie wie der Autor neben Andern das Konsolen-Programm 'dbus-monitor' einsetzen.

Mit den folgenden Befehlen können Sie in einer Konsole eine Liste der Anwendungen auslesen, die am System-Bus und am Session-Bus registriert sind. Die Liste enthält die D-Bus-Namen und die ihnen zugeordneten einzigartigen Verbindungs-IDs, denen stets ein Doppelpunkt vorangestellt wird. Eingesetzt wird das Programm qdbus:

$ qdbus --session | grep -v ":"
  org.gnome.SessionManager
  org.gtk.Private.UDisks2VolumeMonitor
  ...
  org.PulseAudio1
  org.freedesktop.DBus
$ qdbus --system | grep ":"
...
:1.44
:1.5
:1.21

Sie können aber auch das Gambas-Programm 'DBusView' einsetzen und erhalten diese Übersicht zu allen aktuell auf dem D-Bus registrierten Programmen:

DBusView

Abbildung 24.9.0.2: Registrierte Programme auf dem D-Bus

2. Antwort
Sie müssen wissen, das jedes am D-Bus registrierte Programm in einer XML-Datei eine Beschreibung des angebotenen Dienstes zur Verfügung stellt. Es gibt mehrere Wege, um sich den Inhalt der XML-Datei anzusehen. Kennen Sie bereits den D-Bus-Namen der Anwendung – zum Beispiel über das Programm 'DBusView' – dann besteht ein Weg im Aufruf der Methode 'Introspect' der Standard-Schnittstelle 'org.freedesktop.DBus.Introspectable'. Diesen Aufruf nennt man Introspection. Da der Introspection eine zentrale Bedeutung bei der Arbeit mit den Diensten auf dem D-Bus zukommt, erfolgt ihre Beschreibung in einem eigenen Kapitel 24.9.0.2. Um sich über alle Programme und deren Dienste auf dem System-Bus oder auf dem Session-Bus zu informieren, ist das Programm 'd-feet' die erste Wahl, dessen Verwendung im Kapitel 24.9.0.2.3 ausführlich beschrieben wird.

3. Antwort
Ja – die Komponente gb.dbus stellt Ihnen mehrere Klassen zur Verfügung, um Dienste auf dem D-Bus zu nutzen oder um mit eigenen d-bus-fähigen Gambas-Programmen Dienste anzubieten oder Signale abzufangen oder zu senden.

In den folgenden Kapiteln werden diese Klassen mit ihren Eigenschaften, Methoden und Ereignissen beschrieben. Ergänzend werden Ihnen zahlreiche Projekte vorgestellt, die Anregungen für eigene d-bus-fähige Programme geben sollen.

Übersicht der Kapitel

Die folgende Link-Liste führt Sie auf interessante Webseiten, die sich jeweils in spezieller Weise dem Thema D-Bus zuwenden:

Download

Artikel

Download