Перелік доступних служб 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

Ви також можете використовувати DFeet, якщо ви віддаєте перевагу інструменту GUI.


1
@ don-crissti як до списку всіх об'єктних шляхів під службою з dbus-sendабо gdbus?
Хуршид Алам

1
@KhurshidAlam - я додав відповідь тут .
don_crissti

30

qdbusviewerваш найкращий друг; це дозволяє також надсилати повідомлення D-шини:

qdbusviewer, що показує вкладку Шина сеансу з трьома підпанелями


Здається, зламаний станом на 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)

Отримано. Я поставив запитання щодо вашої відповіді. unix.stackexchange.com/questions/203410/…
користувач768421

У мене питання, в середовищі робочого столу Plasma 5 сервіс org.kde.Spectacle використовується для зйомки екрана (і він працює), але він не вказаний ні в системній шині, ні в сеансовій шині, чому це так?
Мяу

Щоб допомогти тим, хто може шукати: для принаймні python 2.7.13 та 3.6, необхідний для цього пакет - dbus-python , з яким можна встановити pip install dbus-python. Також доступний пакет python-dbus (я не зміг зайнятися роботою протягом двох хвилин, які я пробував).
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для самоаналізу та доведення понять перед переходом до коду. Завершення баш економить багато друку і уникає помилок друку. Було б непогано мати gdbusпоказ кращого результату.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.