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.

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.


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


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)

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.