Estou brincando com o dbus-monitor para tentar entender como o dbus está funcionando no ambiente Ubuntu. Eu tenho várias perguntas a esse respeito:
Poderia me informar como ler o seguinte corretamente? Eu entendo a grande idéia, mas não os detalhes.
signal sender=:1.1948 -> dest=(null destination) serial=1829990 path=/org/ayatana/menu/DA00003; interface=org.ayatana.dbusmenu; member=ItemPropertyUpdated int32 23 string "enabled" variant boolean true method call sender=:1.6 -> dest=org.freedesktop.Notifications serial=1399 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=GetCapabilities
Entendo que o primeiro é um sinal, enquanto o segundo é um método. O destino significa que pode haver um receptor / slot específico para um sinal? O que é um membro ? E os itens da lista seguem o sinal que os argumentos passaram no sinal? O que são remetentes e seriados ?
Notei algo sobre a relação entre controle de volume e notificações. Pelo que li da saída do monitor dbus
method call sender=:1.6 -> dest=org.freedesktop.Notifications serial=1400 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=Notify string "gnome-settings-daemon" uint32 0 string "notification-audio-volume-medium" string " " string "" array [ ] array [ dict entry( string "value" variant int32 38 ) dict entry( string "x-canonical-private-synchronous" variant string "volume" ) ] int32 -1
Parece que a notificação é acionada por seu método. Eu realmente não entendo por que funciona dessa maneira. Na minha opinião, faria mais sentido se houvesse um sinal emitido "notification-audio-volume-medium" enquanto a notificação ouviria esse sinal e reagiria de acordo. Se o envio / recebimento fosse público e não privado, não permitiria mais flexibilidade e eficiência? Por exemplo, se houver um sinal público para "notification-audio-volume-medium" então vários aplicativos poderiam ouvir esse sinal (o que permitiria a existência de aplicativos de notificação concorrentes) e os desenvolvedores precisariam se preocupar com o envio de sinais, enquanto capturar e manipular um sinal seria o negócio do aplicativo de notificação (ou qualquer outro programa que precisa desses sinais).
Sou novato no Dbus e quero aprender mais enquanto trabalho com o Dbus no Python, principalmente para desenvolver alguns applets. Eu já vi o tutorial do dbus-python e ensina como ouvir todos os sinais (não especificando interface nem caminho etc.). Mas como rastrear métodos quando eles são chamados, como o dbus-monitor faz?
Se você tiver paciência para ensinar como isso funciona, seja bem-vindo.
fonte
org.freedesktop.Notifications
serviço. Dessa forma, todas as chamadas de método para este serviço serão tratadas pelo seu código.Eu também estava procurando uma solução para coletar as notificações da área de trabalho através do dbus com um script python. Esta pergunta foi a mais próxima que cheguei ao Google, mas escrever um substituto para o notify-osd parecia um exagero :)
Observando as fontes do applet de notificações recentes , eu tenho algumas dicas de como monitorar as mensagens do dbus e aqui está a implementação do python que eu vim com:
Espero que isso ajude alguém, pois parece que não há muitos exemplos simples de python relacionados ao monitoramento das mensagens do dbus.
fonte
NameAquired
mensagem)