A split operating system where the runtime lives on your computer, the interface lives on any device, and applications can execute locally or in the cloud.
It lets you control Linux desktops remotely (run shells, transfer files, forward ports and more) from any device on your account. Connections are routed through the Deskconn cloud router and can transparently upgrade to direct WebRTC P2P links for lower latency.
The Deskconn ecosystem consists of five pieces. This repository contains the two that run on the managed desktop:
| Component | Role |
|---|---|
| deskconnd | Desktop daemon. Registers and exposes desktop APIs over WAMP. Runs as a systemd user service. |
| deskconn | Control CLI. Attach desktops, manage files, open shells, forward ports, and more. |
| deskconn-router | Cloud WAMP router. The central hub — every component (CLI, daemon, account service, web app, mobile app) connects through it. |
| deskconn-account-service | Manages user accounts, organizations, and per-device CryptoSign principals. |
| deskconn-web-app / deskconn-mobile-app | Web and mobile interfaces. |
deskconn CLI
│ (Unix socket — ~/.deskconn/deskconn.sock)
▼
deskconnd (local proxy)
│ (WebSocket — wss://api.deskconn.com/ws or WebRTC P2P)
▼
deskconnd (target device)
The local deskconnd maintains a persistent session to the cloud router per target device. The shell command starts
over the routed path and migrates transparently to a direct WebRTC connection in the background once the P2P handshake
completes.
All cloud connections use CryptoSign (Ed25519). deskconn login generates a keypair, registers the public key with the
account service, and stores the private key in ~/.deskconn/id_ed25519.
curl -fsSL https://get.deskconn.com | shThis installs deskconn and deskconnd to ~/.local/bin and registers deskconnd as a systemd user service that
starts automatically.
Sign up at deskconn.com or via the mobile app.
deskconn attach --username <email> --password <password>
# or read the password from stdin
echo "$PASSWORD" | deskconn attach --username <email> --password-stdinThis creates a realm for the desktop under your account and writes credentials to ~/.deskconn/credentials.json. The
daemon picks these up automatically and connects to the cloud router.
deskconn login --username <email> --password <password>Generates an Ed25519 keypair, registers it with the account service, and stores it locally. You only need to do this once per machine; the key is valid for 30 days and is renewed on the next login.
deskconn ls
deskconn ls --refresh # fetch the current list from the cloud
deskconn ls --detailed # show realm, ID, and organisationdeskconn shell <device>
deskconn shell <device> --mode p2p # force WebRTC
deskconn shell <device> --mode routed # force cloud routerdeskconn login [--username] [--password] [--password-stdin]
deskconn logout
deskconn whoami
deskconn attach [--name] [--username] [--password] [--password-stdin]
deskconn detach [--username] [--password] [--password-stdin]
deskconn ls [--refresh] [--detailed]
deskconn ping <device> [--count N]
deskconn shell <device> [--mode p2p|routed]
deskconn exec <device> <command...> [--p2p]
All file commands accept device:path for remote paths and a bare /path for local paths.
deskconn file ls <device:path> [--mode p2p|routed]
deskconn file mv <src> <dst> [--mode p2p|routed]
deskconn file cp <src> <dst> [-r] [--mode p2p|routed]
deskconn file rm <target> [--mode p2p|routed]
deskconn file cat <device:path> [--mode p2p|routed]
# Forward local:remote — traffic on localhost:LOCAL goes to REMOTE on the device
deskconn port forward <device> [-l LOCAL] [-r REMOTE] [--p2p]
# Reverse — the device listens on REMOTE and forwards to localhost:LOCAL
deskconn port reverse <device> [-r REMOTE] [-l LOCAL] [--p2p]
deskconn print --enable [--host-printers] # allow this desktop to receive print jobs
deskconn print --disable
deskconn print --status
deskconn print --ls <device> # list printers on a device
deskconn print <device:printer> <file> # send a print job
deskconn config show
deskconn config set <device> alias <value>
deskconn config unset <device> alias
deskconn config edit
deskconn self version
deskconn self update
make build-deskconnd # builds ./deskconnd
make build-deskconn # builds ./deskconnOverride the cloud endpoint for local development:
export DESKCONN_CLOUD_URI=ws://localhost:8080/wsmake testAll credentials and configuration are stored under ~/.deskconn/:
| File | Contents |
|---|---|
credentials.json |
Device attach credentials (realm, authid, keypair) used by deskconnd |
id_ed25519 |
CLI private key, username, and key expiry |
id_ed25519.pub |
CLI public key, username, and account name |
config.yml |
Device list and aliases |
principals.json |
Local CryptoSign principals (used by the local WAMP router) |
turn_credentials.json |
Cached TURN server credentials for WebRTC |
deskconn.sock |
Unix socket for local CLI–daemon communication |
See LICENSE.