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.