Uma lista de serviços DBus disponíveis

65

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

amiga
fonte

Respostas:

85

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 o DFeet se preferir uma ferramenta GUI.

don_crissti
fonte
11
@ don-crissti como listar todos os caminhos de objetos em um serviço com dbus-sendou gdbus?
Khurshid Alam
11
@KhurshidAlam - adicionei uma resposta aqui .
22815 Don_crissti
30

qdbusvieweré seu melhor amigo; também permite enviar mensagens de barramento D:

qdbusviewer mostrando a guia Barramento de Sessão com três subpainéis

margarida
fonte
Parece quebrado a partir de 2014. Ele lista os serviços, mas não pode enviar mensagens ..
Pithikos
5
Não consigo nem iniciá-lo no Ubuntu 14.04. Ele falha com: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 hoje.
sherrellbc
@sherrellbc Por favor, considere adicionar d-feetcomo uma resposta para torná-lo mais visível
mivk
27

A maneira python é a maneira 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)
Pithikos
fonte
Votado. Fiz uma pergunta de acompanhamento para sua resposta. unix.stackexchange.com/questions/203410/…
user768421 15/15
Eu tenho uma pergunta, em um ambiente de desktop Plasma 5, o serviço org.kde.Spectacle é usado para tirar uma captura de tela (e está funcionando), mas não está listado no barramento do sistema nem no barramento de sessão, por que isso?
Meow
Para ajudar quem procura: pelo menos python 2.7.13 e 3.6, o pacote necessário para isso é o dbus-python , instalável com pip install dbus-python. O pacote python-dbus também está disponível (não consegui trabalhar nos 2 minutos que tentei).
precisa saber é o seguinte
6

gdbusfaz parte do glib2 e suporta 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 org.freedesktop.DBus.ListNamesmétodo. 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 é python válida, portanto, 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()))'

Normalmente não faço isso, mas é um bom truque para manter a manga. Eu uso gdbuspara inspecionar e provar 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 gdbusexibindo uma saída melhor.

lagartixas
fonte