Eine Liste der verfügbaren DBus-Dienste


65

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:


85

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.


1
@ don-crissti wie listet man mit dbus-sendoder alle objektpfade unter einem service auf gdbus?
Khurshid Alam

1
@ KhurshidAlam - Ich habe hier eine Antwort hinzugefügt .
don_crissti

30

qdbusviewerist dein bester Freund; Sie können damit auch D-Bus-Nachrichten senden:

qdbusviewer zeigt die Registerkarte "Sitzungsbus" mit drei Unterfenstern


Scheint seit 2014 kaputt. Es listet die Dienste, kann aber keine Nachrichten senden.
Pithikos

5
Ich kann es nicht einmal auf Ubuntu 14.04 starten. Es schlägt fehl mit:qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
Kasperd

3
@Pithikos d-feetfunktioniert ab heute.
Sherrellbc

@ Herrellbc Bitte als d-feetAntwort hinzufügen , um es sichtbarer zu machen
mivk

27

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)

Upvoted. Ich habe eine Folgefrage zu Ihrer Antwort gestellt. unix.stackexchange.com/questions/203410/…
user768421

Ich habe eine Frage, in einer Plasma 5-Desktopumgebung wird der Dienst org.kde.Spectacle zum Aufnehmen von Screenshots verwendet (und er funktioniert), aber er ist weder im Systembus noch im Sitzungsbus aufgeführt. Warum ist das so?
Miau

Um denjenigen zu helfen, die vielleicht auf der Suche sind: Für mindestens Python 2.7.13 und 3.6 ist dbus-python als Paket erforderlich , das mit installiert werden kann pip install dbus-python. Das Paket python-dbus ist ebenfalls verfügbar (in den 2 Minuten, die ich versucht habe, konnte ich nicht arbeiten).
bschlueter

6

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.