Connect to your Linux desktop from any RDP client (Windows, macOS, Linux, iOS, Android). Built in Rust on IronRDP with native Wayland support via XDG Desktop Portal and PipeWire.
Product Page | Download | Open Source Crates
Pre-built packages are available from GitHub Releases and lamco.ai/download.
| Format | Distro | Install |
|---|---|---|
| Snap | Any Linux | sudo snap install lamco-rdp-server |
| AUR | Arch Linux | yay -S lamco-rdp-server |
| Flatpak | Any Linux | flatpak install --user lamco-rdp-server-*.flatpak |
| RPM | Fedora 42+ | sudo dnf install ./lamco-rdp-server-*.fc42.x86_64.rpm |
| RPM | openSUSE Tumbleweed | sudo zypper install ./lamco-rdp-server-*.suse-tw.x86_64.rpm |
| RPM | RHEL 9 / AlmaLinux 9 | sudo dnf install ./lamco-rdp-server-*.el9.x86_64.rpm |
| DEB | Debian 13 (Trixie) | sudo dpkg -i lamco-rdp-server_*_amd64.deb |
| Source | Any (Rust 1.85+) | cargo build --release --offline |
The source tarball on the Releases page includes vendored dependencies for offline builds.
| Desktop Environment | Video | Input | Clipboard | Deployment |
|---|---|---|---|---|
| GNOME 45+ (Ubuntu 24.04, Fedora 42) | AVC444 | Portal+EIS | Portal | Flatpak or native |
| GNOME 40-44 (RHEL 9, AlmaLinux 9) | AVC444 | Portal+EIS | -- | Flatpak or native |
| KDE Plasma 6.3+ (openSUSE TW, Debian 13) | AVC444 | Portal+EIS | Klipper | Flatpak or native |
| Sway / River (wlroots) | AVC444 | wlr-direct | wl-clipboard | Native only |
| Hyprland (official portal) | AVC444 | wlr-direct | wl-clipboard | Native only |
| Hyprland (hypr-remote community portal) | AVC444 | Portal | Portal | Flatpak or native |
Notes:
For the full compatibility matrix with portal versions, session persistence, and deployment recommendations, see the product page.
# Generate TLS certificates
./scripts/generate-certs.sh
# Start the server
lamco-rdp-server -c config.toml -vv
# Or use the GUI
lamco-rdp-server-gui
Then connect from any RDP client (Windows Remote Desktop, FreeRDP, Remmina, etc.) to port 3389.
Requirements: Rust 1.85+, OpenSSL dev, PipeWire dev, nasm (optional, 3x faster OpenH264)
cargo build --release # software H.264
cargo build --release --features gui # with configuration GUI
cargo build --release --features "gui,vaapi" # with VA-API hardware encoding
cargo build --release --features "gui,wayland,libei" # full-featured for wlroots
| Feature flag | What it enables |
|---|---|
gui |
Graphical configuration tool (iced) |
vaapi |
VA-API hardware encoding (Intel/AMD) |
nvenc |
NVENC hardware encoding (NVIDIA) |
wayland |
Native wlroots protocol support (wlr-direct) |
libei |
Portal + EIS input for Flatpak on wlroots |
pam-auth |
PAM authentication (native only, not in Flatpak) |
lamco-rdp-server/
src/
server/ RDP listener, TLS, session management
rdp/ Channel multiplexing (EGFX, clipboard, audio, input)
egfx/ H.264 encoding pipeline (OpenH264, VA-API, NVENC)
clipboard/ Clipboard orchestration (Portal, Klipper, wl-clipboard)
damage/ SIMD tile-based frame differencing
session/ XDG Desktop Portal strategies and persistence
gui/ Configuration GUI (iced)
bundled-crates/
lamco-clipboard-core/ Clipboard protocol core
lamco-rdp-clipboard/ IronRDP clipboard backend
packaging/ Flatpak manifest, systemd units, polkit, D-Bus config
lamco-rdp-server is built on a set of published Rust crates available on crates.io:
| Crate | Purpose |
|---|---|
| lamco-portal | XDG Desktop Portal integration |
| lamco-pipewire | PipeWire screen capture with DMA-BUF |
| lamco-video | Video frame processing |
| lamco-rdp | Core RDP protocol types |
| lamco-rdp-input | Input event translation (200+ key mappings) |
| lamco-wayland | Wayland protocol bindings |
These crates are MIT/Apache-2.0 licensed. See lamco.ai/open-source for documentation and details.
The server also depends on a fork of IronRDP that adds MS-RDPEGFX Graphics Pipeline Extension and clipboard file transfer support. Contributions to upstream IronRDP are in progress.
First connection fails, second succeeds -- Normal TLS behavior. The RDP client rejects the self-signed certificate on first attempt, then retries after accepting it. The acceptance is cached for subsequent connections.
Clipboard not working (Flatpak) -- Portal clipboard requires RemoteDesktop v2 (GNOME 45+, KDE Plasma 6.3+). On RHEL 9 and other older distributions with RemoteDesktop v1, clipboard is unavailable in Portal mode.
Permission dialog on every start -- GNOME deliberately does not persist RemoteDesktop sessions. This is a compositor policy decision, not a bug. KDE Plasma supports session tokens.
"Unknown (not in Wayland session?)" -- Cosmetic. Flatpak sandboxes hide XDG_CURRENT_DESKTOP. The server queries D-Bus directly for portal capabilities regardless.
Business Source License 1.1 (BSL)
See lamco.ai/products/lamco-rdp-server for pricing details.
Contributions welcome. Please open an issue before starting significant work.