Список доступных сервисов DBus

65

Есть ли такая вещь, как список доступных сервисов DBus?
Я наткнулся на несколько (например, предоставленные NetworkManager, Rhythmbox, Skype, HAL).
Интересно, смогу ли я найти довольно полный список предоставляемых сервисов / интерфейсов.

madfriend
источник

Ответы:

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

Вы также можете использовать DFeet, если вы предпочитаете инструмент с графическим интерфейсом.

don_crissti
источник
1
@ don-crissti, как составить список всех путей к объектам с помощью dbus-sendили gdbus?
Хуршид Алам
1
@KhurshidAlam - я добавил ответ здесь .
don_crissti
30

qdbusviewerтвой лучший друг; он также позволяет отправлять сообщения по шине D-Bus:

qdbusviewer показывает вкладку Session Bus с тремя подпанелями

маргаритка
источник
Кажется сломанным по состоянию на 2014. Он перечисляет услуги, но не может отправлять сообщения ..
Pithikos
5
Я даже не могу запустить его на Ubuntu 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)
Pithikos
источник
Upvoted. Я задал дополнительный вопрос к вашему ответу. unix.stackexchange.com/questions/203410/...
user768421
У меня есть вопрос, в среде рабочего стола Plasma 5 служба org.kde.Spectacle используется для создания снимка экрана (и он работает), но его нет ни в системной шине, ни в сеансовой шине, почему так?
Мяу
Чтобы помочь тем, кто может искать: по крайней мере для Python 2.7.13 и 3.6, для этого необходим пакет dbus-python , который можно установить с помощью pip install dbus-python. Пакет python-dbus также доступен (я не смог начать работать за 2 минуты, которые я попробовал).
bschlueter
6

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

К сожалению, это приводит к нечитаемому выводу. К счастью, на выходе допустим Python, так что это возможно:

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для анализа и проверки концепции, прежде чем перейти к коду. Завершение bash экономит много времени на печатание и позволяет избежать опечаток. Было бы неплохо иметь gdbusболее хороший вывод.

гекконы
источник