사용 가능한 DBus 서비스 목록과 같은 것이 있습니까?
나는 NetworkManager, Rhythmbox, Skype, HAL에서 제공하는 것과 같은 몇 가지를 우연히 발견했습니다.
제공된 서비스 / 인터페이스의 전체 목록을 찾을 수 있는지 궁금합니다.
답변
세션:
dbus-send --session \
--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.ListNames
GUI 도구를 선호하는 경우 DFeet 을 사용할 수도 있습니다 .
답변
qdbusviewer
당신의 가장 친한 친구입니다; D-bus 메시지도 보낼 수 있습니다 :
답변
파이썬 방식은 아름다운 방식입니다.
시스템 서비스 :
import dbus
for service in dbus.SystemBus().list_names():
print(service)
세션 서비스 :
import dbus
for service in dbus.SessionBus().list_names():
print(service)
답변
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
불행하게도 이것은 읽을 수없는 출력으로 이어집니다. 다행히도 출력은 유효한 파이썬이므로 가능합니다.
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
introspecting 코드로 이동하기 전에 개념을 증명합니다. bash 완성은 많은 타이핑을 줄이고 오타를 피합니다. gdbus
더 좋은 출력 을 표시하는 것이 좋을 것입니다.