//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 }