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.
qdbusviewer
ist 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-feet
funktioniert ab heute.
d-feet
Antwort 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).
gdbus
ist 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.ListNames
Methode. 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, gdbus
um 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 gdbus
eine schönere Ausgabe zu haben.
dbus-send
oder alle objektpfade unter einem service aufgdbus
?