Чи існує таке поняття, як перелік доступних служб 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
Ви також можете використовувати DFeet, якщо ви віддаєте перевагу інструменту GUI.
qdbusviewer
ваш найкращий друг; це дозволяє також надсилати повідомлення D-шини:
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 (я не зміг зайнятися роботою протягом двох хвилин, які я пробував).
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
для самоаналізу та доведення понять перед переходом до коду. Завершення баш економить багато друку і уникає помилок друку. Було б непогано мати gdbus
показ кращого результату.
dbus-send
абоgdbus
?