Uma lista de serviços DBus disponíveis

59

Existe uma lista de serviços DBus disponíveis?
Eu tropecei em alguns (como os fornecidos pelo NetworkManager, Rhythmbox, Skype, HAL).
Gostaria de saber se consigo encontrar uma lista bastante completa de serviços / interfaces fornecidos.

    
por madfriend 25.08.2012 / 14:06

4 respostas

80

Sessão:

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

Você também pode usar DFeet se preferir uma ferramenta GUI.

    
por 25.08.2012 / 16:13
28

qdbusviewer é seu melhor amigo; Ele permite que você envie mensagens de ônibus D também:

    
por 25.08.2012 / 17:30
25

A maneira python é a maneira mais bonita.

Serviços do sistema:

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

Serviços de sessão:

import dbus
for service in dbus.SessionBus().list_names():
    print(service)
    
por 06.11.2014 / 16:46
2

gdbus faz parte do glib2 e oferece suporte a conclusões do Bash. Aqui está como usá-lo (no Fedora):

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

Isso mostrará todos os destinos possíveis. Para obter uma lista das interfaces disponíveis, o DBus exporta o método org.freedesktop.DBus.ListNames . Você pode chamá-lo executando:

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

Infelizmente, isso leva a uma saída ilegível. Felizmente a saída é válida python, então isso é possível:

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

Eu não costumo fazer isso, mas é um bom truque para ficar na manga. Eu uso gdbus para introspecção e prova de conceitos antes de passar para o código. A conclusão do bash economiza muita digitação e evita erros de digitação. Seria bom ter gdbus exibindo uma saída melhor.

    
por 15.03.2018 / 03:27

Tags