Un elenco di servizi DBus disponibili


65

Esiste un elenco di servizi DBus disponibili?
Mi sono imbattuto in alcuni (come quelli forniti da NetworkManager, Rhythmbox, Skype, HAL).
Mi chiedo se riesco a trovare un elenco piuttosto completo di servizi / interfacce forniti.

Risposte:


85

Sessione:

dbus-send --session           \
  --dest=org.freedesktop.DBus \
  --type=method_call          \
  --print-reply               \
  /org/freedesktop/DBus       \
  org.freedesktop.DBus.ListNames

Sistema:

dbus-send --system            \
  --dest=org.freedesktop.DBus \
  --type=method_call          \
  --print-reply               \
  /org/freedesktop/DBus       \
  org.freedesktop.DBus.ListNames

Puoi anche utilizzare DFeet se preferisci uno strumento GUI.


1
@ don-crissti come elencare tutti i percorsi di oggetti in un servizio con dbus-sendo gdbus?
Khurshid Alam,

1
@KhurshidAlam - Ho aggiunto una risposta qui .
don_crissti,

30

qdbusviewerè il tuo migliore amico; consente anche di inviare messaggi D-bus:

qdbusviewer mostra la scheda Bus di sessione con tre pannelli secondari


Sembra rotto dal 2014. Elenca i servizi ma non può inviare messaggi ..
Pithikos,

5
Non riesco nemmeno ad avviarlo su Ubuntu 14.04. Non riesce con:qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
kasperd,

3
@Pithikos d-feetfunziona da oggi.
Sherrellbc,

@sherrellbc Ti preghiamo di considerare di aggiungere d-feetuna risposta per renderlo più visibile
martedì

27

Il modo pitone è il modo bello.

Servizi di sistema:

import dbus
for service in dbus.SystemBus().list_names():
    print(service)

Servizi di sessione:

import dbus
for service in dbus.SessionBus().list_names():
    print(service)

Upvoted. Ho fatto una domanda di follow-up alla tua risposta. unix.stackexchange.com/questions/203410/…
user768421

Ho una domanda, in un ambiente desktop Plasma 5, il servizio org.kde.Spectacle è usato per fare screenshot (e funziona), ma non è elencato né nel bus di sistema né nel bus di sessione, perché?
Meow,

Per aiutare coloro che potrebbero essere alla ricerca: almeno per Python 2.7.13 e 3.6, il pacchetto necessario per questo è dbus-python , installabile con pip install dbus-python. È anche disponibile il pacchetto python-dbus (non sono riuscito a mettermi al lavoro nei 2 minuti che ho provato).
bschlueter,

6

gdbusfa parte di glib2 e supporta i completamenti di Bash. Ecco come usarlo (su Fedora):

bash-4.4$ source /usr/share/bash-completion/completions/gdbus
bash-4.4$ gdbus call --system --dest <TAB><TAB>

Questo mostrerà tutte le possibili destinazioni. Per ottenere un elenco delle interfacce disponibili DBus esporta il org.freedesktop.DBus.ListNamesmetodo. Puoi chiamarlo eseguendo:

gdbus call --system --dest org.freedesktop.DBus \
           --object-path /org/freedesktop/DBus  \
           --method org.freedesktop.DBus.ListNames

Sfortunatamente questo porta a output illeggibili. Fortunatamente l'output è Python valido, quindi questo è possibile:

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()))'

Di solito non lo faccio, ma è un bel trucco da tenere a portata di mano. Uso i gdbusconcetti di introspezione e dimostrazione prima di passare al codice. Il completamento bash consente di risparmiare molta digitazione ed evitare errori di battitura. Sarebbe bello avere gdbusun output migliore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.