web-dev-qa-db-fra.com

Une liste des services D-Bus disponibles

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.

70
madfriend

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).

94
don_crissti

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)
31
Pithikos

qdbusviewer est votre meilleur ami; il vous permet également d'envoyer des messages D-bus:

qdbusviewer showing the Session Bus tab with three subpanels

31
daisy

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.

7
geckos