Una lista de servicios DBus disponibles


65

¿Existe una lista de servicios DBus disponibles?
Me topé con algunos (como los proporcionados por NetworkManager, Rhythmbox, Skype, HAL).
Me pregunto si puedo encontrar una lista bastante completa de servicios / interfaces proporcionados.

Respuestas:


85

Sesión:

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

También puede usar DFeet si prefiere una herramienta GUI.


1
@ don-crissti, ¿cómo enumerar todas las rutas de objetos en un servicio con dbus-sendo gdbus?
Khurshid Alam

1
@ KhurshidAlam: he agregado una respuesta aquí .
don_crissti

30

qdbusvieweres tu mejor amigo; también le permite enviar mensajes D-bus:

qdbusviewer muestra la pestaña Bus de sesión con tres subpaneles


Parece roto a partir de 2014. Enumera los servicios pero no puede enviar mensajes ..
Pithikos

55
Ni siquiera puedo iniciarlo en Ubuntu 14.04. Falla con:qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
kasperd

3
@Pithikos d-feetfunciona a partir de hoy.
sherrellbc

@sherrellbc Considere agregar d-feetcomo respuesta para hacerlo más visible
mivk

27

La forma de pitón es la forma hermosa.

Servicios del sistema:

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

Servicios de sesión:

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

Votado. Hice una pregunta de seguimiento a su respuesta. unix.stackexchange.com/questions/203410/…
user768421

Tengo una pregunta, en un entorno de escritorio Plasma 5, el servicio org.kde.Spectacle se usa para tomar capturas de pantalla (y está funcionando), pero no figura en el bus del sistema ni en el bus de sesión, ¿por qué es eso?
Miau

Para ayudar a aquellos que pueden estar buscando: al menos python 2.7.13 y 3.6, el paquete necesario para esto es dbus-python , instalable con pip install dbus-python. El paquete python-dbus también está disponible (no pude trabajar en los 2 minutos que probé).
bschlueter

6

gdbuses parte de glib2 y admite terminaciones de Bash. Aquí está cómo usarlo (en Fedora):

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

Esto mostrará todos los destinos posibles. Para obtener una lista de las interfaces disponibles, DBus exporta el org.freedesktop.DBus.ListNamesmétodo. Puedes llamarlo ejecutando:

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

Desafortunadamente, esto conduce a resultados ilegibles. Afortunadamente, el resultado es Python válido, por lo que esto es posible:

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

Normalmente no hago esto, pero es un buen truco para mantener en la manga. Lo uso gdbuspara introspectar y probar conceptos antes de pasar al código. La finalización de bash ahorra mucho tipeo y evita errores tipográficos. Sería bueno tener gdbusuna salida más agradable.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.