Gibt es eine Liste der verfügbaren DBus-Dienste?
Ich bin auf einige gestoßen (wie die von NetworkManager, Rhythmbox, Skype, HAL).
Ich frage mich, ob ich eine ziemlich vollständige Liste der angebotenen Dienste / Schnittstellen finden kann.
Gibt es eine Liste der verfügbaren DBus-Dienste?
Ich bin auf einige gestoßen (wie die von NetworkManager, Rhythmbox, Skype, HAL).
Ich frage mich, ob ich eine ziemlich vollständige Liste der angebotenen Dienste / Schnittstellen finden kann.
Antworten:
Session:
dbus-send --session \
--dest=org.freedesktop.DBus \
--type=method_call \
--print-reply \
/org/freedesktop/DBus \
org.freedesktop.DBus.ListNames
System:
dbus-send --system \
--dest=org.freedesktop.DBus \
--type=method_call \
--print-reply \
/org/freedesktop/DBus \
org.freedesktop.DBus.ListNames
Sie können DFeet auch verwenden, wenn Sie ein GUI-Tool bevorzugen.
qdbusviewerist dein bester Freund; Sie können damit auch D-Bus-Nachrichten senden:

qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
d-feetfunktioniert ab heute.
d-feetAntwort hinzufügen , um es sichtbarer zu machen
Der Python-Weg ist der schöne Weg.
Systemdienste:
import dbus
for service in dbus.SystemBus().list_names():
print(service)
Sitzungsdienste:
import dbus
for service in dbus.SessionBus().list_names():
print(service)
pip install dbus-python. Das Paket python-dbus ist ebenfalls verfügbar (in den 2 Minuten, die ich versucht habe, konnte ich nicht arbeiten).
gdbusist Teil von glib2 und unterstützt Bash-Vervollständigungen. So verwenden Sie es (unter Fedora):
bash-4.4$ source /usr/share/bash-completion/completions/gdbus
bash-4.4$ gdbus call --system --dest <TAB><TAB>
Daraufhin werden alle möglichen Ziele angezeigt. Um eine Liste der verfügbaren Schnittstellen zu erhalten, exportiert DBus die org.freedesktop.DBus.ListNamesMethode. Sie können es aufrufen, indem Sie Folgendes ausführen:
gdbus call --system --dest org.freedesktop.DBus \
--object-path /org/freedesktop/DBus \
--method org.freedesktop.DBus.ListNames
Dies führt leider zu einer unlesbaren Ausgabe. Glücklicherweise ist die Ausgabe eine gültige Python-Ausgabe. Dies ist also möglich:
gdbus call --system --dest org.freedesktop.DBus \
--object-path /org/freedesktop/DBus \
--method org.freedesktop.DBus.ListNames | \
python -c 'import sys, pprint; pprint.pprint(eval(sys.stdin.read()))'
Normalerweise mache ich das nicht, aber es ist ein guter Trick, den Ärmel festzuhalten. Ich benutze es, gdbusum Konzepte zu überprüfen und zu beweisen, bevor ich zum Code übergehe. Die Bash-Vervollständigung spart viel Tipparbeit und vermeidet Tippfehler. Wäre schön gdbuseine schönere Ausgabe zu haben.
dbus-sendoder alle objektpfade unter einem service aufgdbus?