コマンドラインユーティリティのみを使用してdbusサービスのオブジェクトパスを一覧表示するにはどうすればよいですかdbus-send
?
現時点では、次のサービスのみを一覧表示できます。
dbus-send --system --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames
またはインターフェース:
dbus-send --system --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.Introspectable.Introspect
この質問は次のようによく似ています。
dbusサービスですべてのオブジェクトパスを一覧表示するには?
しかし、私がアクセスできないいくつかのユーティリティを使用する必要があります。
閉じた組み込みシステムを使用しており、何もインストールできないため、次のユーティリティは使用できません。
- qdbusビューア
- バス
- Dフィート
- Python
答え1
GetManagedObjects
インターフェイスのメソッドを使用できますorg.freedesktop.DBus.ObjectManager
。ただし、これはパスリストのみを印刷するのではなくオブジェクト全体をダンプするため、出力ディクショナリからパスを解析する必要があります。
busctl
(systemdから)がオプションの場合は、jq
UDiks2 JSONダンプの例を使用できるようにJSON出力があるため、使用することをお勧めします。
# busctl call org.freedesktop.UDisks2 /org/freedesktop/UDisks2 org.freedesktop.DBus.ObjectManager GetManagedObjects --json=short | jq ".data[0] | keys[]"
"/org/freedesktop/UDisks2/Manager"
"/org/freedesktop/UDisks2/block_devices/sda"
"/org/freedesktop/UDisks2/block_devices/sda1"
...
電話するとdbus-send
次のようになります。
# dbus-send --system --dest=org.freedesktop.UDisks2 --type=method_call --print-reply /org/freedesktop/UDisks2 org.freedesktop.DBus.ObjectManager.GetManagedObjects
ただし、出力を手動で解析する必要があります。
編集:org.bluez
コマンドは次のとおりです。
# busctl call org.bluez / org.freedesktop.DBus.ObjectManager GetManagedObjects --json pretty | jq ".data[0] | keys[]"
"/org/bluez"
"/org/bluez/hci0"
"/org/bluez/hci0/dev_00_1B_66_C1_56_01"
そして
# dbus-send --system --dest=org.bluez --type=method_call --print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObject
次のことを試してみてください。
# dbus-send --system --dest=org.bluez --type=method_call --print-reply / org.freedesktop.DBus.ObjectManager.GetManagedObjects | grep -A 1 "dict entry" | grep "object path" | cut -d"\"" -f2
/org/bluez
/org/bluez/hci0
/org/bluez/hci0/dev_00_1B_66_C1_56_01
オブジェクトパスのみを取得するために出力を解析するために使用されます。