it-swarm-eu.dev

Seznam dostupných služeb D-Bus

Existuje něco jako seznam dostupných služeb D-Bus? Narazil jsem na několik, jako například ty, které poskytuje NetworkManager, Rhythmbox, Skype, HAL.

Zajímalo by mě, jestli najdu poměrně úplný seznam poskytovaných služeb/rozhraní.

70
madfriend

V nastaveních QT (krátké příkazy a čistý, lidsky čitelný výstup) můžete spustit:

qdbus

zobrazí seznam služeb dostupných na relační sběrnici a

qdbus --system

zobrazí seznam služeb dostupných na systémové sběrnici.


V jakémkoli nastavení můžete použít dbus-send

dbus-send --print-reply --dest=org.freedesktop.DBus  /org/freedesktop/DBus org.freedesktop.DBus.ListNames

Stejně jako qdbus, pokud --session nebo není zadána žádná sběrnice zpráv, dbus odešle do sběrnice zpráv přihlašovací relace. Takže výše bude uveden seznam služeb dostupných v relační sběrnici.
Použijte --system chcete-li místo toho použít systémovou sběrnici zpráv celého systému:

dbus-send --system --print-reply --dest=org.freedesktop.DBus  /org/freedesktop/DBus org.freedesktop.DBus.ListNames

Můžete také použít DFeet , pokud dáváte přednost grafickému nástroji (další možnosti GUI viz další odpovědi).

94
don_crissti

Cesta python je krásná cesta.

Systémové služby:

import dbus
for service in dbus.SystemBus().list_names():
    print(service)

Relační služby:

import dbus
for service in dbus.SessionBus().list_names():
    print(service)
31
Pithikos

qdbusviewer je váš nejlepší přítel; umožňuje také odesílat zprávy D-bus:

qdbusviewer showing the Session Bus tab with three subpanels

31
daisy

gdbus je součástí glib2 a podporuje Bash dokončení. Zde je návod, jak jej používat (na Fedoře):

bash-4.4$ source /usr/share/bash-completion/completions/gdbus
bash-4.4$ gdbus call --system --dest <TAB><TAB>

Zobrazí se všechny možné cíle. Chcete-li získat seznam dostupných rozhraní, DBus exportuje org.freedesktop.DBus.ListNames metoda. Můžete to nazvat spuštěním:

gdbus call --system --dest org.freedesktop.DBus \
           --object-path /org/freedesktop/DBus  \
           --method org.freedesktop.DBus.ListNames

Bohužel to vede k nečitelnému výstupu. Naštěstí je výstup platný python, takže je to možné:

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()))'

Obvykle to nedělám, ale je to pěkný trik, abych si udržel rukáv. Před zavedením do kódu používám gdbus pro introspekci a testování konceptů. Dokončení bash ušetří spoustu psaní a vyhýbá se překlepům. Bylo by hezké mít gdbus zobrazovat hezčí výstup.

7
geckos