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 피트
  • 파이썬

답변1

GetManagedObjects인터페이스 의 메소드를 사용할 수 있습니다 org.freedesktop.DBus.ObjectManager. 그러나 이는 경로 목록만 인쇄하는 것이 아니라 전체 개체를 덤프하므로 출력 사전에서 경로를 구문 분석해야 합니다.

busctl(systemd에서)가 옵션인 경우 jqUDisks2 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

객체 경로만 가져오기 위해 출력을 구문 분석하는 데 사용됩니다.

관련 정보