diff --git a/_examples/monitor.go b/_examples/monitor.go new file mode 100644 index 00000000..87cf4b68 --- /dev/null +++ b/_examples/monitor.go @@ -0,0 +1,37 @@ +package main + +import ( + "fmt" + "os" + + "github.com/godbus/dbus/v5" +) + +func main() { + conn, err := dbus.SessionBus() + if err != nil { + fmt.Fprintln(os.Stderr, "Failed to connect to session bus:", err) + os.Exit(1) + } + + var rules = []string{ + "type='signal',member='Notify',path='/org/freedesktop/Notifications',interface='org.freedesktop.Notifications'", + "type='method_call',member='Notify',path='/org/freedesktop/Notifications',interface='org.freedesktop.Notifications'", + "type='method_return',member='Notify',path='/org/freedesktop/Notifications',interface='org.freedesktop.Notifications'", + "type='error',member='Notify',path='/org/freedesktop/Notifications',interface='org.freedesktop.Notifications'", + } + var flag uint = 0 + + call := conn.BusObject().Call("org.freedesktop.DBus.Monitoring.BecomeMonitor", 0, rules, flag) + if call.Err != nil { + fmt.Fprintln(os.Stderr, "Failed to become monitor:", call.Err) + os.Exit(1) + } + + c := make(chan *dbus.Message, 10) + conn.Eavesdrop(c) + fmt.Println("Monitoring notifications") + for v := range c { + fmt.Println(v) + } +}