Existe-t-il une liste des services DBus disponibles?
Je suis tombé sur quelques-uns (comme ceux fournis par NetworkManager, Rhythmbox, Skype, HAL).
Je me demande si je peux trouver une liste assez complète des services / interfaces fournis.
Existe-t-il une liste des services DBus disponibles?
Je suis tombé sur quelques-uns (comme ceux fournis par NetworkManager, Rhythmbox, Skype, HAL).
Je me demande si je peux trouver une liste assez complète des services / interfaces fournis.
Réponses:
Session:
dbus-send --session \
--dest=org.freedesktop.DBus \
--type=method_call \
--print-reply \
/org/freedesktop/DBus \
org.freedesktop.DBus.ListNames
Système:
dbus-send --system \
--dest=org.freedesktop.DBus \
--type=method_call \
--print-reply \
/org/freedesktop/DBus \
org.freedesktop.DBus.ListNames
Vous pouvez également utiliser DFeet si vous préférez un outil graphique.
qdbusviewer
Est ton meilleur ami; il vous permet également d’envoyer des messages D-bus:
qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
d-feet
fonctionne à partir d'aujourd'hui.
d-feet
comme une réponse pour le rendre plus visible
La façon python est la belle façon.
Services système:
import dbus
for service in dbus.SystemBus().list_names():
print(service)
Services de session:
import dbus
for service in dbus.SessionBus().list_names():
print(service)
pip install dbus-python
. Le paquet python-dbus est également disponible (je n’ai pas pu travailler pendant les 2 minutes que j’ai essayées).
gdbus
fait partie de glib2 et supporte les complétions de Bash. Voici comment l'utiliser (sur Fedora):
bash-4.4$ source /usr/share/bash-completion/completions/gdbus
bash-4.4$ gdbus call --system --dest <TAB><TAB>
Cela montrera toutes les destinations possibles. Pour obtenir une liste des interfaces disponibles, DBus exporte la org.freedesktop.DBus.ListNames
méthode. Vous pouvez l'appeler en exécutant:
gdbus call --system --dest org.freedesktop.DBus \
--object-path /org/freedesktop/DBus \
--method org.freedesktop.DBus.ListNames
Malheureusement, cela conduit à une sortie illisible. Heureusement, la sortie est valide en python, donc c'est possible:
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()))'
Je ne fais généralement pas cela, mais c'est un bon truc à garder en manche. J'utilise l' gdbus
introspection et la démonstration de concepts avant de passer au code. L’achèvement de bash évite beaucoup de frappe et évite les fautes de frappe. Ce serait bien d'avoir gdbus
une meilleure sortie.
dbus-send
ougdbus
?