dbusコマンドラインユーティリティのみを使用してdbusサービスのすべてのオブジェクトパスを一覧表示するにはどうすればよいですか?

dbusコマンドラインユーティリティのみを使用してdbusサービスのすべてのオブジェクトパスを一覧表示するにはどうすればよいですか?

コマンドラインユーティリティのみを使用して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から)がオプションの場合は、jqUDiks2 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

オブジェクトパスのみを取得するために出力を解析するために使用されます。

関連情報