명령줄 유틸리티 만 사용하여 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에서)가 옵션인 경우 jq
UDisks2 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
객체 경로만 가져오기 위해 출력을 구문 분석하는 데 사용됩니다.