Estoy jugando con dbus-monitor para tratar de entender cómo funciona dbus en el entorno Ubuntu. Tengo varias preguntas al respecto:
¿Me podría decir cómo leer lo siguiente correctamente? Entiendo la gran idea, pero no los detalles.
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
Entiendo que el primero es una señal, mientras que el segundo es un método. ¿ Destino significa que puede haber un receptor / ranura específica para una señal? ¿Qué es un miembro ? ¿Y los elementos de la lista siguen la señal de los argumentos pasados en la señal? ¿Qué son el remitente y las publicaciones seriadas ?
Noté algo sobre la relación entre el control de volumen y las notificaciones. Por lo que leí de la salida del 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 la notificación se activa por su método. Simplemente no entiendo por qué funciona de esta manera. En mi opinión, tendría más sentido si hubiera una señal emitida "notificación-audio-volumen-medio", mientras que la notificación escucharía esta señal y reaccionaría en consecuencia. Si el envío / recepción fuera público en lugar de privado, ¿no permitiría una mayor flexibilidad y eficiencia? Por ejemplo, si había una señal pública para "notificación-audio-volumen-medio" varias aplicaciones podrían escuchar esta señal (lo que permitiría la existencia de aplicaciones de notificación competidoras) y los desarrolladores solo tendrían que preocuparse por enviar señales, mientras que recoger y manejar una señal sería el negocio de la aplicación notificante (o cualquier otro programa que necesita esas señales).
Soy nuevo en Dbus y quiero aprender más, ya que estoy trabajando con Dbus en Python, principalmente para desarrollar algunos applets. He visto el tutorial dbus-python y enseña cómo escuchar todas las señales (sin especificar la interfaz ni la ruta, etc.) Pero, ¿cómo rastrear los métodos cuando se los llama, como lo hace dbus-monitor?
Si tienes la paciencia para enseñar cómo funciona eso, eres bienvenido.
fuente
org.freedesktop.Notifications
servicio. De esta manera, todas las llamadas de método a este servicio serán manejadas por su código.También estaba buscando una solución para recopilar las notificaciones de escritorio a través de dbus con un script de Python. Esta pregunta fue la más cercana que tuve con googlear, pero escribir un reemplazo para notify-osd parecía una exageración :)
Mirando las fuentes de applet de notificaciones recientes, recibí algunos consejos sobre cómo monitorear los mensajes dbus y aquí está la implementación de Python que se me ocurrió:
Espero que esto ayude a alguien, ya que parece que no hay muchos ejemplos simples de Python relacionados con el monitoreo de los mensajes dbus.
fuente
NameAquired
mensaje)