사용 가능한 DBus 서비스 목록


65

사용 가능한 DBus 서비스 목록과 같은 것이 있습니까?
나는 NetworkManager, Rhythmbox, Skype, HAL에서 제공하는 것과 같은 몇 가지를 우연히 발견했습니다.
제공된 서비스 / 인터페이스의 전체 목록을 찾을 수 있는지 궁금합니다.

답변:


85

세션:

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 을 사용할 수도 있습니다 .


1
@ don-crissti dbus-send또는 로 서비스가있는 서비스의 모든 객체 경로를 나열하는 방법은 gdbus무엇입니까?
Khurshid Alam

1
@KhurshidAlam- 여기 에 답변을 추가했습니다 .
don_crissti

30

qdbusviewer당신의 가장 친한 친구입니다; D-bus 메시지도 보낼 수 있습니다 :

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


그것은 서비스를 나열하지만 메시지를 보낼 수 없습니다.
Pithikos

5
우분투 14.04에서도 시작할 수 없습니다. 그것은 실패 :qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
kasperd

3
@Pithikos d-feet는 오늘 부터 작동합니다.
sherrellbc

@sherrellbc d-feet보다 눈에 띄게하기 위해 답변으로 추가하십시오
mivk

27

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

시스템 서비스 :

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

세션 서비스 :

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

공감. 답변에 후속 질문을했습니다. unix.stackexchange.com/questions/203410/…
user768421

Plasma 5 데스크톱 환경에서 org.kde.Spectacle 서비스 가 스크린 샷을 찍는 데 사용되며 작동하지만 질문이 있지만 시스템 버스 나 세션 버스에 나열되어 있지 않습니다. 왜 그런가요 ?
Meow

찾고있는 사람들을 돕기 위해 : 적어도 2.7.13 및 3.6의 경우이 패키지에 필요한 dbus-python 패키지 가 pip install dbus-python있습니다. python-dbus 패키지도 사용할 수 있습니다 (내가 시도한 2 분 동안 일할 수 없었습니다).
bschlueter

6

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더 좋은 출력 을 표시하는 것이 좋을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.