Descobrir o dono de um nome de serviço DBus

7

Não consigo encontrar uma maneira de descobrir qual programa implementa o serviço org.freedesktop.Notifications . É possível pedir ao DBus para me dizer qual programa o fornece?

A razão para fazer esta pergunta é banal: eu encontrei um novo daemon de notificações de desktop que eu gostaria de usar, mas ele não inicia e em vez disso reclama com essa mensagem

Name Lost. Is Another notification daemon running?

No entanto, não consigo determinar qual programa está mantendo o nome. Eu já desinstalei todos os outros daemon de notificação, reiniciei o servidor X e até mesmo reinicializei a máquina.

No entanto, quando eu executo este comando:

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

string "org.freedesktop.Notifications" está presente na saída, então algo está mantendo o nome, e não consigo iniciar o daemon desejado.

    
por Mael 20.07.2017 / 20:33

2 respostas

5

O utilitário de depuração d-bus d-feet que está disponível como um pacote em muitos sistemas parece ser capaz de encontre o id do processo e o comando fornecendo um serviço. Por exemplo, eu o executei em uma plataforma Fedora 23 xfce4 X11 systemd e selecionei Session Bus e digitei o nome do serviço org.freedesktop.Notifications . Ele introspectou o serviço, ativou-o e mostrou o comando pid e /usr/lib64/xfce4/notifyd/xfce4-notifyd :

    
por 21.07.2017 / 17:05
5

Você pode obter o chamador PID via org.freedesktop.DBus.GetConnectionUnixProcessID :

gdbus call --session --dest org.freedesktop.DBus --object-path / --method \
org.freedesktop.DBus.GetConnectionUnixProcessID org.freedesktop.Notifications

imprime

(uint32 737,)

, então existe o seu PID . Se você preferir dbus-send (como gdbus é específico do GNOME) então:

dbus-send --session --print-reply --dest=org.freedesktop.DBus / \
org.freedesktop.DBus.GetConnectionUnixProcessID string:org.freedesktop.Notifications
    
por 21.07.2017 / 20:20