Self-hosting¶
Run your own SomeDesk server and build the clients.
Building and running¶
Requirements (Debian/Ubuntu): build-essential pkg-config clang libfontconfig1-dev libxkbcommon-dev
libxkbcommon-x11-dev libxcb1-dev libx11-dev libpipewire-0.3-dev libspa-0.2-dev postgresql
(tests: xvfb xsel, and for the Wayland test gnome-shell xdg-desktop-portal-gnome pipewire
wireplumber).
cargo build --release
# Server (creates its schema and a self-signed certificate on first start)
DATABASE_URL=postgres://user:pass@localhost/somedesk \
target/release/somedesk-server --listen 0.0.0.0:21116 --data-dir ./data
# Client (pins the server certificate on first use)
target/release/somedesk --server your.server.example
--profile NAME runs independent client instances side by side (separate credentials).
Packaging¶
| What | How | Output |
|---|---|---|
| Server container | podman build -f packaging/server/Dockerfile -t somedesk-server . (or docker build) |
image (≈95 MB) |
| Server + PostgreSQL | SOMEDESK_DB_PASSWORD=… podman compose -f packaging/server/compose.yaml up -d |
two containers |
| Server on a host | cargo deb -p somedesk-server (systemd unit, somedesk user, /etc/somedesk/server.env) or packaging/server/somedesk-server.service |
.deb |
| Linux client | cargo deb -p somedesk-app (desktop entry, icons) |
.deb |
| Linux client, any distribution | packaging/linux/build-appimage.sh (bundles its libraries except glibc, graphics and PipeWire; build on an old distribution such as Debian 12) |
.AppImage |
| Arch Linux client | packaging/aur/test.sh (builds the AUR packages somedesk and somedesk-bin in an Arch container) |
.pkg.tar.zst |
| Windows client | packaging/windows/build-zip.sh (cross-built with MinGW; icon embedded) |
.zip with somedesk.exe and runtime DLLs |
| macOS client | packaging/macos/make-app.sh on a Mac (unsigned) |
SomeDesk.app + .zip |
| Android app | packaging/android/build-apk.sh (needs the Android SDK and NDK; see the script) |
.apk for phones and emulators |
The .debs depend on the glibc of the machine that built them: build release packages on the
oldest distribution you want to support. Install cargo-deb with cargo install cargo-deb.