Ответы:
сессия:
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, если вы предпочитаете инструмент с графическим интерфейсом.
qdbusviewer
твой лучший друг; он также позволяет отправлять сообщения по шине D-Bus:
qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
d-feet
работает с сегодняшнего дня.
d-feet
в качестве ответа, чтобы сделать его более заметным
Путь питона - прекрасный путь.
Системные сервисы:
import dbus
for service in dbus.SystemBus().list_names():
print(service)
Сессионные услуги:
import dbus
for service in dbus.SessionBus().list_names():
print(service)
pip install dbus-python
. Пакет python-dbus также доступен (я не смог начать работать за 2 минуты, которые я попробовал).
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
более хороший вывод.
dbus-send
илиgdbus
?