사용 가능한 DBus 서비스 목록 나는 NetworkManager, Rhythmbox, Skype, HAL에서

사용 가능한 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 메시지도 보낼 수 있습니다 :

세 개의 서브 패널이있는 세션 버스 탭을 표시하는 qdbusviewer


답변

파이썬 방식은 아름다운 방식입니다.

시스템 서비스 :

import dbus
for service in dbus.SystemBus().list_names():
    print(service)

세션 서비스 :

import dbus
for service in dbus.SessionBus().list_names():
    print(service)


답변

gdbusglib2의 일부이며 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()))'

나는 보통 이것을하지 않지만 소매를 유지하는 좋은 트릭입니다. 내가 사용 gdbusintrospecting 코드로 이동하기 전에 개념을 증명합니다. bash 완성은 많은 타이핑을 줄이고 오타를 피합니다. gdbus더 좋은 출력 을 표시하는 것이 좋을 것입니다.


답변