web-dev-qa-db-ja.com

利用可能なD-Busサービスのリスト

利用可能なD-Busサービスのリストなどはありますか? NetworkManager、Rhythmbox、Skype、HALによって提供されるものなど、いくつかの問題に遭遇しました。

提供されているサービス/インターフェースのかなり完全なリストが見つかるかどうか疑問に思います。

70
madfriend

QTセットアップ(短いコマンドと人間が読める簡潔な出力)では、次のコマンドを実行できます。

qdbus

セッションバスで利用可能なサービスをリストし、

qdbus --system

システムバスで利用可能なサービスのリストが表示されます。


どのセットアップでもdbus-sendを使用できます

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

qdbusと同様に、--sessionまたはメッセージバスが指定されていない場合、dbusはログインセッションメッセージバスに送信します。したがって、上記はセッションバスで利用可能なサービスをリストします。
代わりにシステム全体のメッセージバスを使用する場合は、--systemを使用します。

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

グラフィカルツールが必要な場合は DFeet を使用することもできます(他のGUIオプションについては他の回答を参照してください)。

94
don_crissti

python wayは美しい方法です。

システムサービス:

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

セッションサービス:

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

qdbusviewerはあなたの親友です。 D-busメッセージも送信できます。

qdbusviewer showing the Session Bus tab with three subpanels

31
daisy

gdbus はglib2の一部であり、Bash補完をサポートしています。 (Fedoraで)それを使用する方法は次のとおりです。

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

これにより、すべての可能な宛先が表示されます。利用可能なインターフェースのリストを取得するために、DBusはorg.freedesktop.DBus.ListNamesメソッドをエクスポートします。次のコマンドを実行して呼び出すことができます:

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

残念ながら、これは読み取り不能な出力につながります。幸い、出力は有効なpythonなので、これは可能です。

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

私は通常これをしませんが、袖をつけておくのはいいトリックです。コードに移る前に、gdbusを使用して概念を内省し、証明します。 bash補完により、入力の手間が大幅に削減され、タイプミスを回避できます。より良い出力を表示するgdbusがあるといいでしょう。

7
geckos