package dbus import ( "fmt" "os" "sync" ) const ( SessionBusAddress = "DBUS_SESSION_BUS_ADDRESS" SystemBusAddress = "DBUS_SYSTEM_BUS_ADDRESS" ) var ( addresses [2]string addressOnce sync.Once ) func Address() (session, system string) { addressOnce.Do(func() { // resolve upstream session bus address if addr, ok := os.LookupEnv(SessionBusAddress); !ok { // fall back to default format addresses[0] = fmt.Sprintf("unix:path=/run/user/%d/bus", os.Getuid()) } else { addresses[0] = addr } // resolve upstream system bus address if addr, ok := os.LookupEnv(SystemBusAddress); !ok { // fall back to default hardcoded value addresses[1] = "unix:path=/run/dbus/system_bus_socket" } else { addresses[1] = addr } }) return addresses[0], addresses[1] }