Existe-t-il une liste de services D-Bus disponibles? J'en 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.
Sur les configurations QT
(commandes courtes et sortie propre et lisible par l'homme), vous pouvez exécuter:
qdbus
listera la liste des services disponibles sur le bus de session et
qdbus --system
liste les services disponibles sur le bus système.
Sur n'importe quelle configuration, vous pouvez utiliser dbus-send
dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
Tout comme qdbus
, si --session
ou aucun bus de messages n'est spécifié, dbus
enverra au bus de messages de la session de connexion. Ainsi, ce qui précède énumérera les services disponibles sur le bus de session.
Utilisation --system
si vous souhaitez utiliser le bus de messages à l'échelle du système:
dbus-send --system --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
Vous pouvez également utiliser DFeet si vous préférez un outil graphique (voir les autres réponses pour plus d'options GUI).
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)
qdbusviewer
est votre meilleur ami; il vous permet également d'envoyer des messages D-bus:
gdbus
fait partie de glib2 et prend en charge les complétions 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 le 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 en python valide, c'est donc 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 pas ça d'habitude, mais c'est une bonne astuce à garder dans la manche. J'utilise gdbus
pour introspecter et prouver des concepts avant de passer au code. La complétion bash économise beaucoup de frappe et évite les fautes de frappe. Ce serait bien d'avoir gdbus
affichant une sortie plus agréable.