go func() { connSignal := make(chan *dbus.Signal, 1) b.connection.Signal(connSignal) defer b.connection.RemoveSignal(connSignal) for _, s := range []objectManager.Signal{ (*objectManager.ObjectManager_InterfacesAddedSignal)(nil), (*objectManager.ObjectManager_InterfacesRemovedSignal)(nil), } { objectManager.AddMatchSignal(b.connection, s, dbus.WithMatchSender("org.freedesktop.UDisks2")) } for { select { case s := <-connSignal: lookupSignal, _ := objectManager.LookupSignal(s) switch sig := lookupSignal.(type) { case *objectManager.ObjectManager_InterfacesAddedSignal: fmt.Printf("%s ADD\n", sig.Body.ObjectPath) for iface := range sig.Body.InterfacesAndProperties { fmt.Printf(" %s\n", iface) } fmt.Println() case *objectManager.ObjectManager_InterfacesRemovedSignal: fmt.Printf("%s REM\n", sig.Body.ObjectPath) for _, iface := range sig.Body.Interfaces { fmt.Printf(" %s\n", iface) } fmt.Println() } } } }()