//InitSession method is the first callable. It permits to init a session (Session or System) over the bus and request a name on it. //Parameters : // s -> dbus.SessionType : equal to SESSION or SYSTEM // n -> string : name you want to request over the bus (or "") func (d *Abstraction) InitSession(s SessionType, n string) error { var err error var conn *dbus.Conn if d.Conn != nil { return errors.New("[DBUS ABSTRACTION ERROR - initSession - Session already initialized]") } if s == SESSION { conn, err = dbus.SessionBus() } else { conn, err = dbus.SystemBus() } if err != nil { return err } if n != "" { reply, err := conn.RequestName(n, dbus.NameFlagDoNotQueue) if err != nil { return err } if reply != dbus.RequestNameReplyPrimaryOwner { return errors.New("[DBUS ABSTRACTION ERROR - initSession - name already taken]") } } d.Conn = conn d.Sigmap = make(map[string]chan *AbsSignal) d.Recv = make(chan *dbus.Signal, 1024) go d.signalsHandler() return nil }
func main() { conn, err := dbus.SessionBus() if err != nil { panic(err) } node, err := introspect.Call(conn.Object("org.freedesktop.DBus", "/org/freedesktop/DBus")) if err != nil { panic(err) } data, _ := json.MarshalIndent(node, "", " ") os.Stdout.Write(data) }
func main() { conn, err := dbus.SessionBus() if err != nil { panic(err) } obj := conn.Object("org.freedesktop.Notifications", "/org/freedesktop/Notifications") call := obj.Call("org.freedesktop.Notifications.Notify", 0, "", uint32(0), "", "Test", "This is a test of the DBus bindings for go.", []string{}, map[string]dbus.Variant{}, int32(5000)) if call.Err != nil { panic(call.Err) } }
func main() { conn, err := dbus.SessionBus() if err != nil { panic(err) } reply, err := conn.RequestName("com.github.guelfey.Demo", dbus.NameFlagDoNotQueue) if err != nil { panic(err) } if reply != dbus.RequestNameReplyPrimaryOwner { fmt.Fprintln(os.Stderr, "name already taken") os.Exit(1) } propsSpec := map[string]map[string]*prop.Prop{ "com.github.guelfey.Demo": { "SomeInt": { int32(0), true, prop.EmitTrue, func(c *prop.Change) *dbus.Error { fmt.Println(c.Name, "changed to", c.Value) return nil }, }, }, } f := foo("Bar") conn.Export(f, "/com/github/guelfey/Demo", "com.github.guelfey.Demo") props := prop.New(conn, "/com/github/guelfey/Demo", propsSpec) n := &introspect.Node{ Name: "/com/github/guelfey/Demo", Interfaces: []introspect.Interface{ introspect.IntrospectData, prop.IntrospectData, { Name: "com.github.guelfey.Demo", Methods: introspect.Methods(f), Properties: props.Introspection("com.github.guelfey.Demo"), }, }, } conn.Export(introspect.NewIntrospectable(n), "/com/github/guelfey/Demo", "org.freedesktop.DBus.Introspectable") fmt.Println("Listening on com.github.guelfey.Demo / /com/github/guelfey/Demo ...") c := make(chan *dbus.Signal) conn.Signal(c) for _ = range c { } }
func main() { conn, err := dbus.SessionBus() if err != nil { fmt.Fprintln(os.Stderr, "Failed to connect to session bus:", err) os.Exit(1) } conn.BusObject().Call("org.freedesktop.DBus.AddMatch", 0, "type='signal',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',sender='org.freedesktop.DBus'") c := make(chan *dbus.Signal, 10) conn.Signal(c) for v := range c { fmt.Println(v) } }
func main() { conn, err := dbus.SessionBus() if err != nil { panic(err) } reply, err := conn.RequestName("com.github.guelfey.Demo", dbus.NameFlagDoNotQueue) if err != nil { panic(err) } if reply != dbus.RequestNameReplyPrimaryOwner { fmt.Fprintln(os.Stderr, "name already taken") os.Exit(1) } f := foo("Bar!") conn.Export(f, "/com/github/guelfey/Demo", "com.github.guelfey.Demo") conn.Export(introspect.Introspectable(intro), "/com/github/guelfey/Demo", "org.freedesktop.DBus.Introspectable") fmt.Println("Listening on com.github.guelfey.Demo / /com/github/guelfey/Demo ...") select {} }
func main() { conn, err := dbus.SessionBus() if err != nil { fmt.Fprintln(os.Stderr, "Failed to connect to session bus:", err) os.Exit(1) } for _, v := range []string{"method_call", "method_return", "error", "signal"} { call := conn.BusObject().Call("org.freedesktop.DBus.AddMatch", 0, "eavesdrop='true',type='"+v+"'") if call.Err != nil { fmt.Fprintln(os.Stderr, "Failed to add match:", call.Err) os.Exit(1) } } c := make(chan *dbus.Message, 10) conn.Eavesdrop(c) fmt.Println("Listening for everything") for v := range c { fmt.Println(v) } }