deskconn

package module
v0.1.0-alpha.80d8121 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 2, 2026 License: MIT Imports: 29 Imported by: 0

README

Deskconn

Deskconn is a desktop management suite. It consists of two main tools: a desktop daemon and a command-line client.

Installation

curl -fsSL https://get.deskconn.com | sh

deskconnd

The desktop daemon responsible for registering and exposing desktop APIs to the Deskconn ecosystem. It runs in the background and enables remote management and control of the desktop.

Run
make run-deskconnd

deskconnctl

A command-line tool used to manage desktops. It can attach a desktop to the cloud, execute commands, and perform other administrative tasks.

Build
make build-deskconn
Run

Run the resulting binary to see available commands and help:

./deskconn

Documentation

Index

Constants

View Source
const (
	Realm                             = "io.xconn.deskconn"
	ProcedureDeskconnAttachDesktop    = "io.xconn.deskconn.desktop.attach"
	ProcedureDeskconnDetachDesktop    = "io.xconn.deskconn.desktop.detach"
	ProcedureDeskconnOrganizationList = "io.xconn.deskconn.organization.list"
	ProcedureOrganizationCreate       = "io.xconn.deskconn.organization.create"
	TopicDeskconnDesktopDetachFormat  = "io.xconn.deskconn.desktop.%s.detach"
	MachineIDPath                     = "/etc/machine-id"
)
View Source
const (
	ProcedureListKeys     = "io.xconn.deskconn.desktop.access.key.list"
	TopicKeyAddedFormat   = "io.xconn.deskconn.desktop.%s.key.add"
	TopicKeyRemovedFormat = "io.xconn.deskconn.desktop.%s.key.remove"
)
View Source
const (
	ProcedureScreenBrightnessGet = "io.xconn.deskconn.deskconnd.screen.brightness.get"
	ProcedureScreenBrightnessSet = "io.xconn.deskconn.deskconnd.screen.brightness.set"
	ProcedureScreenLock          = "io.xconn.deskconn.deskconnd.screen.lock"
	ProcedureScreenIsLocked      = "io.xconn.deskconn.deskconnd.screen.islocked"
	ProcedureShell               = "io.xconn.deskconn.deskconnd.shell"
	ProcedureExec                = "io.xconn.deskconn.deskconnd.exec"

	ProcedureMPRISPlayers   = "io.xconn.deskconn.deskconnd.mpris.players"
	ProcedureMPRISPlayPause = "io.xconn.deskconn.deskconnd.mpris.playpause"
	ProcedureMPRISPlay      = "io.xconn.deskconn.deskconnd.mpris.play"
	ProcedureMPRISPause     = "io.xconn.deskconn.deskconnd.mpris.pause"
	ProcedureMPRISNext      = "io.xconn.deskconn.deskconnd.mpris.next"
	ProcedureMPRISPrevious  = "io.xconn.deskconn.deskconnd.mpris.previous"

	ErrInvalidArgument = "wamp.error.invalid_argument"
	ErrOperationFailed = "wamp.error.operation_failed"
)
View Source
const (
	ProcedureWebRTCOffer     = "io.xconn.webrtc.offer"
	TopicAnswererOnCandidate = "io.xconn.webrtc.answerer.on_candidate"
	TopicOffererOnCandidate  = "io.xconn.webrtc.offerer.on_candidate"

	ProcedurePrincipalCreate = "io.xconn.deskconn.account.principal.create"
	ProcedurePrincipalDelete = "io.xconn.deskconn.account.principal.delete"
	ProcedureAccountGet      = "io.xconn.deskconn.account.get"

	ProcedureProxyShell       = "io.xconn.deskconn.deskconnd.proxy.shell"
	ProcedureProxyExec        = "io.xconn.deskconn.deskconnd.proxy.exec"
	ProcedureLogin            = "io.xconn.deskconn.login"
	ProcedureLogout           = "io.xconn.deskconn.logout"
	ProcedureConnectedDevices = "io.xconn.deskconn.connected_devices"

	ProcedureListDesktop = "io.xconn.deskconn.desktop.list"

	LocalRealm = "io.xconn.deskconn.local"
)

Variables

View Source
var BacklightBasePath = "/sys/class/backlight" //nolint: gochecknoglobals

Functions

func AdvertiseService

func AdvertiseService(hostname string, port int, realm, orgID string) (*zeroconf.Server, error)

func Attach

func Attach(session *xconn.Session, desktopName, orgID string) error

func CfgDirectory

func CfgDirectory() (string, error)

func CloudURI

func CloudURI() string

func ConnectCloudRealm

func ConnectCloudRealm(cfgDirectory string) (*xconn.Session, error)

func CredentialsFilePath

func CredentialsFilePath() (string, error)

func Detach

func Detach(session *xconn.Session, authID string) error

func Login

func Login(session *xconn.Session, username string) error

func ProxyProgressiveInvocationHandler

func ProxyProgressiveInvocationHandler(proxyCalls *ProxyCalls, clientSessions *ClientSessions,
	cfgDirectory, procedure string) xconn.InvocationHandler

func ReadCredentials

func ReadCredentials(cfgDirectory string) (string, string, error)

func StartInteractiveCommand

func StartInteractiveCommand(session *xconn.Session, procedureName, realm string, args ...string) error

func WritePrincipalsToFile

func WritePrincipalsToFile(principals []*CryptosignPrincipal) error

Types

type Authenticator

type Authenticator struct {
	sync.Mutex
	// contains filtered or unexported fields
}

func NewAuthenticator

func NewAuthenticator(principals []*CryptosignPrincipal) *Authenticator

func (*Authenticator) Authenticate

func (a *Authenticator) Authenticate(request auth.Request) (auth.Response, error)

func (*Authenticator) Methods

func (a *Authenticator) Methods() []auth.Method

func (*Authenticator) RetrievePrincipal

func (a *Authenticator) RetrievePrincipal(authid string) (*CryptosignPrincipal, bool)

func (*Authenticator) SetPrincipal

func (a *Authenticator) SetPrincipal(authid string, principal *CryptosignPrincipal)

func (*Authenticator) SetPrincipals

func (a *Authenticator) SetPrincipals(principals []*CryptosignPrincipal)

func (*Authenticator) SubscribeEvents

func (a *Authenticator) SubscribeEvents(session *xconn.Session, machineID string) error

type ClientSessions

type ClientSessions struct {
	sync.Mutex
	// contains filtered or unexported fields
}

func NewClientSessions

func NewClientSessions() *ClientSessions

func (*ClientSessions) DeleteDeviceSession

func (c *ClientSessions) DeleteDeviceSession(realm string)

func (*ClientSessions) DeviceSessions

func (c *ClientSessions) DeviceSessions() map[string]*xconn.Session

func (*ClientSessions) EnsureDeviceSession

func (c *ClientSessions) EnsureDeviceSession(ctx context.Context, realm, cfgDirectory string) (*xconn.Session, error)

func (*ClientSessions) LoggedIn

func (c *ClientSessions) LoggedIn() bool

func (*ClientSessions) Login

func (c *ClientSessions) Login()

func (*ClientSessions) Logout

func (c *ClientSessions) Logout()

func (*ClientSessions) SessionByRealm

func (c *ClientSessions) SessionByRealm(authid string) (*xconn.Session, bool)

func (*ClientSessions) StoreDeviceSession

func (c *ClientSessions) StoreDeviceSession(realm string, session *xconn.Session)

type Config

type Config struct {
	Devices []Device `yaml:"devices"`
}

type Credentials

type Credentials struct {
	AuthID         string `json:"authid"`
	PublicKey      string `json:"public_key"`
	PrivateKey     string `json:"private_key"` // #nosec
	OrganizationID string `json:"organization_id"`
}

func EnsureCredentials

func EnsureCredentials() (*Credentials, error)

type CryptosignPrincipal

type CryptosignPrincipal struct {
	AuthID         string   `json:"authid"`
	AuthorizedKeys []string `json:"authorized_keys"`
	AuthRole       string   `json:"authrole"`
}

func ReadPrincipalsFromFile

func ReadPrincipalsFromFile() ([]*CryptosignPrincipal, error)

type Deskconn

type Deskconn struct {
	// contains filtered or unexported fields
}

func NewDeskconn

func NewDeskconn(screen *Screen, mpris *MPRIS) *Deskconn

func (*Deskconn) Register

func (d *Deskconn) Register(session *xconn.Session) error

type Device

type Device struct {
	Authid       string       `json:"authid" yaml:"authid"`
	ID           string       `json:"id" yaml:"id"`
	Name         string       `json:"name" yaml:"name"`
	Organization Organization `json:"organization" yaml:"organization"`
	Realm        string       `json:"realm" yaml:"realm"`
	Alias        string       `yaml:"alias"`
	Connected    bool         `yaml:"-" json:"-"`
}

func DevicesFromCfg

func DevicesFromCfg(cfgDirectory string) ([]Device, error)

func FetchDevicesFromCloud

func FetchDevicesFromCloud(cfgDirectory string) ([]Device, error)

type MPRIS

type MPRIS struct {
	// contains filtered or unexported fields
}

func NewMPRIS

func NewMPRIS(conn *dbus.Conn) *MPRIS

func (*MPRIS) ListPlayers

func (m *MPRIS) ListPlayers() (map[string]string, error)

func (*MPRIS) Next

func (m *MPRIS) Next() error

func (*MPRIS) NextPlayer

func (m *MPRIS) NextPlayer(name string) error

func (*MPRIS) Pause

func (m *MPRIS) Pause() error

func (*MPRIS) PausePlayer

func (m *MPRIS) PausePlayer(name string) error

func (*MPRIS) Play

func (m *MPRIS) Play() error

func (*MPRIS) PlayPause

func (m *MPRIS) PlayPause() error

func (*MPRIS) PlayPausePlayer

func (m *MPRIS) PlayPausePlayer(name string) error

func (*MPRIS) PlayPlayer

func (m *MPRIS) PlayPlayer(name string) error

func (*MPRIS) Previous

func (m *MPRIS) Previous() error

func (*MPRIS) PreviousPlayer

func (m *MPRIS) PreviousPlayer(name string) error

type Organization

type Organization struct {
	ID   string `json:"id" yaml:"id"`
	Name string `json:"name" yaml:"name"`
}

type ProxyCall

type ProxyCall struct {
	ProgressChan chan *xconn.Progress
}

type ProxyCalls

type ProxyCalls struct {
	sync.Mutex
	// contains filtered or unexported fields
}

func NewProxyCalls

func NewProxyCalls() *ProxyCalls

func (*ProxyCalls) Delete

func (p *ProxyCalls) Delete(id uint64)

func (*ProxyCalls) Get

func (p *ProxyCalls) Get(id uint64) (*ProxyCall, bool)

func (*ProxyCalls) Store

func (p *ProxyCalls) Store(id uint64, c *ProxyCall)

type Screen

type Screen struct {
	// contains filtered or unexported fields
}

func NewScreen

func NewScreen(sessionBus, systemBus *dbus.Conn) *Screen

func (*Screen) GetBrightness

func (s *Screen) GetBrightness() (int, error)

func (*Screen) IsLocked

func (s *Screen) IsLocked() (bool, error)

func (*Screen) Lock

func (s *Screen) Lock() error

func (*Screen) SetBrightness

func (s *Screen) SetBrightness(percent int) error

Directories

Path Synopsis
cmd
deskconn command
deskconnd command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL