Frequently Asked Questions

Common questions about Lamco RDP Server

General

What is Lamco RDP Server?

Lamco RDP Server is a Wayland-native remote desktop server that implements the Microsoft Remote Desktop Protocol (RDP). It enables remote access to your existing Linux desktop session from any standard RDP client including Windows Remote Desktop Connection, macOS Microsoft Remote Desktop, and FreeRDP. Written entirely in Rust for safety and performance.

Which desktop environments are supported?

Lamco RDP Server works with any Wayland compositor that supports XDG Desktop Portals:

  • GNOME 40 through 49 - Production ready (Ubuntu 24.04, Fedora 40+; GNOME 49 verified on Fedora 43)
  • KDE Plasma 6.3+ - Production ready. Full clipboard, including Windows to Linux file copy, on Plasma 6.6+ (Bug 515465 fixed in Plasma 6.6); 6.3.90 through 6.5.x fall back to text-only via Klipper
  • Sway/River/Hyprland (native) - Production ready with wlr-direct protocols, AVC444 (verified on sway 1.11/1.12, Hyprland 0.55.4)
  • Sway/River/Hyprland (Flatpak) - Video-only. Input blocked pending portal-wlr PR #325
  • Budgie 10.10 + labwc - Expected (wlr-direct ready)
  • Niri - Expected, needs testing (uses GNOME portal backend)
  • COSMIC - Video, keyboard, and clipboard work out of the box; mouse is an opt-in path via /dev/uinput while COSMIC's own input portal matures. See the COSMIC guide
Does it work with X11?

No. Lamco RDP Server is designed exclusively for Wayland. It uses XDG Desktop Portals and PipeWire, which are Wayland-specific technologies. For X11 sessions, consider using xrdp or x11vnc instead.

Check your session type:
echo $XDG_SESSION_TYPE
Output should be: wayland

What RDP clients can connect?

Any standard RDP client works:

Windows: Built-in Remote Desktop Connection (mstsc.exe)
macOS: Microsoft Remote Desktop (App Store)
Linux: Remmina, FreeRDP, KRDC
Mobile: Microsoft Remote Desktop (iOS/Android)
Can lamco-rdp-server run on a headless server?

Lamco RDP Server requires a desktop environment (GNOME, KDE, or wlroots compositor) to be running. It shares your existing desktop session.

If you have a server with GNOME/KDE installed (even in a headless VM), it will work — you just need a user session running (can use auto-login or VNC for initial setup).

For true headless operation without desktop environment: We're developing lamco-VDI, a separate product with embedded Smithay compositor for headless multi-user VDI (estimated 6-9 months to alpha).

Can multiple users connect simultaneously?

No. Lamco RDP Server shares a single user's desktop session. When one user connects via RDP, they see and control that user's desktop. Multiple clients connecting simultaneously would all see the same desktop and share control.

For multi-user concurrent sessions where each user gets their own isolated Linux desktop, use lamco-VDI (in development), which supports 10-50+ concurrent users per server with per-user resource isolation.

Installation

How do I install the Community Edition?

The Community Edition is not on Flathub. It ships two ways:

# Flatpak bundle, attached to the GitHub release
flatpak install lamco-rdp-server.flatpak

# Snap Store
snap install lamco-rdp-server

Download links are on the download page.

What are the system requirements?

Minimum

  • • Wayland compositor with XDG Portal support
  • • PipeWire for screen capture
  • Desktop environment must be running
  • • 2GB RAM
  • • x86_64 processor

Recommended

  • • Hardware H.264 encoder (Intel QuickSync, AMD VCE, NVIDIA NVENC)
  • • 4GB+ RAM
  • • Modern multi-core processor (4+ cores)
  • • Gigabit Ethernet or better

View platform compatibility matrix →

How do I verify PipeWire is running?
systemctl --user status pipewire

If PipeWire is not running, start it with:

systemctl --user start pipewire
Why can't I install native package on Ubuntu 24.04?

Ubuntu 24.04 ships older Rust than the 1.89 MSRV required. Debian 12 ships Rust 1.63.

Solution: Use the Community Edition, or apt.lamco.ai

The Community Edition (Flatpak bundle or Snap) works on Ubuntu 24.04 and Debian 12 with all dependencies included and is free to use. A Debian package built for the current MSRV is also available from apt.lamco.ai (amd64 and arm64).

Native packages are available for: Fedora 40+ (RPM Fusion, x86_64/aarch64), Debian 13 and derivatives (apt.lamco.ai, amd64/arm64), Arch (AUR, x86_64/aarch64), openSUSE Tumbleweed, Leap 16.0, Fedora, and AlmaLinux 10 (OBS, x86_64 and aarch64 on most targets). RHEL 10 (GNOME) is the current enterprise target; native RHEL 9 is no longer supported.

Licensing

Is Lamco RDP Server free?

Lamco RDP Server is licensed under BUSL-1.1 (Licensor: Lamco Development LLC). The Community Edition (Flatpak and Snap) is completely free to use under the Additional Use Grant — including commercial use. For native installations, a single server instance is free.

Free for:

  • ✓ Community Edition (Flatpak, Snap) — all use, unlimited servers
  • ✓ Single server instance (any distribution)
  • ✓ Non-profit organizations
  • ✓ Educational and research use
  • ✓ Evaluation and testing

Multi-server native deployments require a commercial license starting at $4.99/month.

View pricing details →

What is the Community Edition?

The Community Edition is the Flatpak and Snap distribution of Lamco RDP Server. It runs fully sandboxed using XDG Desktop Portals and is free to use under the BUSL-1.1 license — including for commercial purposes.

Why is clipboard limited in the Community Edition?

The Community Edition embraces the Flatpak/Snap sandbox philosophy and uses only standard XDG Desktop Portal APIs. The Portal clipboard API provides Windows-to-Linux clipboard transfer, but the Portal specification does not provide a mechanism for Linux-to-Windows clipboard change notifications within the sandbox boundary. This is a Portal spec limitation, not a bug. For full bidirectional clipboard, use a native installation.

Can I use the Community Edition commercially?

Yes. The Community Edition is designated as free to use under the BUSL-1.1 Additional Use Grant. The only restriction is the Competitive Use clause — you cannot use it to build a competing RDP server product.

What happens on the Change Date?

On 2029-06-01 this version automatically converts to Apache License 2.0, making it fully open source with no restrictions. The Change Date is per-version: each release converts approximately three years after it ships. All commercial licenses become unnecessary, and anyone can use, modify, and distribute the software freely.

How do I purchase a commercial license?

Contact us at office@lamco.io with your organization details and licensing requirements. We offer flexible licensing tiers from monthly to annual subscriptions.

Configuration

Where is the configuration file?

Native installation:

~/.config/lamco-rdp-server/config.toml

Flatpak installation:

~/.var/app/io.lamco.rdp-server/config/lamco-rdp-server/config.toml
How do I change the port?

Edit config.toml:

[server]
port = 3389 # Change to desired port

Or use the GUI: Server tab → Port field

How do I enable TLS?

TLS is enabled by default. A self-signed certificate is automatically generated on first run.

To use custom certificates:

[security]
tls_cert = "/path/to/certificate.pem"
tls_key = "/path/to/private-key.pem"

Or use the GUI: Security tab → Certificate Management

How do I generate a self-signed certificate?
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem \
  -days 365 -nodes -subj "/CN=rdp-server"

Note: Self-signed certificates will show security warnings in RDP clients. For production, use certificates from a trusted CA (Let's Encrypt, etc.).

Video & Graphics

What video codecs are supported?

AVC420 (H.264 4:2:0)

  • • Best compatibility
  • • Lower bandwidth
  • • Good for general use

AVC444 (H.264 4:4:4)

  • • Crystal-clear text
  • • Higher bandwidth
  • • Perfect for coding/design

Platform note: AVC444 is automatically enabled on Ubuntu 24.04, Fedora 40+, and RHEL 10.

How do I improve video quality?

In config.toml:

[video]
codec = "avc444"
quality = 90
max_fps = 60

Or use the GUI: Video tab → Quality slider (1-100)

Trade-off: Higher quality = more bandwidth. Start with 80 and adjust.

Why is the screen black?

Common causes:

  1. Portal permission not granted - Click "Share" when the permission dialog appears
  2. Screen is locked - Unlock the screen first
  3. Compositor not supported - Verify XDG Portal support on your compositor

Check Portal support:
ls /usr/share/xdg-desktop-portal/portals/

How do I enable hardware encoding?

Hardware encoding is automatically detected and used when available.

Important: Hardware acceleration (NVENC/VA-API) requires native package installation. Flatpak uses software encoding due to sandbox restrictions.

To force software encoding:

[video]
encoder = "software"

Audio

Is audio streaming supported?

Yes, since v1.2.0. Desktop audio streams to the RDP client using the RDPSND channel with auto-negotiation of client capabilities. Supported codecs: OPUS, PCM, and ADPCM (MS-ADPCM, IMA-ADPCM).

What audio codecs are supported?
Codec Quality Bandwidth Best For
OPUS Excellent ~64 kbps (configurable) Modern clients (recommended)
PCM Lossless ~1.5 Mbps Highest quality
ADPCM Good ~352 kbps Legacy compatibility (MS-ADPCM, IMA-ADPCM)
How do I configure audio?

In config.toml:

[audio]
enabled = true
codec = "opus" # opus, pcm, adpcm
sample_rate = 48000
channels = 2

Or use the GUI: Audio tab

Why is there no audio?

Common causes:

  1. PipeWire not running
    systemctl --user start pipewire
  2. Audio disabled in config
    audio.enabled = true
  3. Client doesn't support codec
    Try PCM for universal compatibility
  4. Portal didn't grant audio permission
    Restart session and click "Allow" for both screen and audio
How do I reduce audio latency?
[audio]
buffer_ms = 20 # Lower = less latency, may cause stuttering

Trade-off: Lower buffer = lower latency but more susceptible to network jitter. Start with 50ms and reduce if network is stable.

Target latency: <100ms total (capture + encoding + network + client)

Clipboard

How does clipboard work?

Bidirectional clipboard synchronization is automatic. Copy on either side and paste on the other. Supports text, HTML, RTF, images (PNG, JPEG, BMP, GIF), and file transfer with 15+ format conversions.

MS-RDPECLIP compliant with lock/unlock and file contents request/response. Includes loop detection, rate limiting, and size limits.

Integration strategies: on native installs, a persistent clipboard monitor binds ext-data-control-v1 (which KWin and wlroots expose), giving full bidirectional clipboard including Windows to Linux file copy on KDE Plasma 6.6+; the Portal clipboard is the sandboxed Community Edition fallback. Older KDE (6.3.90 through 6.5.x) falls back to Klipper D-Bus cooperation, text-only, for Bug 515465.

Why isn't clipboard working?

Common causes:

  1. Portal version too old (Community Edition / Flatpak) - Requires xdg-desktop-portal 1.14+ with RemoteDesktop v2
    Check: pkg-config --modversion xdg-desktop-portal
    On native installs, clipboard uses ext-data-control-v1 directly and does not depend on the Portal; Windows to Linux file copy works on KDE Plasma 6.6+.
  2. RHEL 9 / AlmaLinux 9 / Rocky 9 - native support is dropped; the Flatpak Community Edition still runs, video-only, in the Portal v1 sandbox
    For full clipboard, use RHEL 10 (GNOME, Portal v5) natively
  3. Disabled in config
    clipboard.enabled = true

View clipboard availability by platform →

New in 1.4.4

What is AF_VSOCK transport / Hyper-V Enhanced Session Mode?

1.4.4 adds an AF_VSOCK transport (tri-state config: auto, enabled, disabled) with Hyper-V DMI auto-detection, enabling Hyper-V Enhanced Session Mode. It is part of a unified multi-transport accept layer that also handles TCP, Unix sockets, and WebSocket through one interface, and can take all of them as systemd socket-activation file descriptors.

Is there a browser or WASM client?

1.4.4 adds WebSocket and RDCleanPath transport for browser and WASM clients, removing the need for a separate ws-rdp-proxy. This ships experimental in 1.4.4 (not yet exercised end to end against the WASM client).

What is Vulkan Video hardware encoding?

Cross-vendor H.264 encoding via VK_KHR_video_encode_h264, working on NVIDIA, Intel, and AMD GPUs with Vulkan Video driver support, alongside the existing VA-API and NVENC backends.

Is there a metrics endpoint?

An optional HTTP metrics server exposes Prometheus /metrics and JSON /health endpoints, enabled by the metrics-server Cargo feature.

What is session health monitoring?

A HealthSensor framework covers PipeWire, Portal, Mutter, EGFX, and the active encoder backend, with closed-loop signaling (damage detection feeds encoding decisions, and compositor-crash detection cascades through the session lifecycle). The GUI Status and Performance tabs surface this alongside live damage-source, FPS, and activity telemetry.

Does GNOME still need a restart after one session?

No. GNOME/Mutter sessions are now per-connection: the server creates a fresh, dialog-free session on each connect and releases it on disconnect, so it serves many sequential RDP sessions without a restart.

Does keyboard input support non-ASCII characters?

Yes. 1.4.4 adds XKB keysym mapping for Unicode keyboard input.

Does COSMIC support mouse input now?

Yes, as an opt-in path. COSMIC has no wlr-virtual-pointer, so the server injects the mouse through /dev/uinput. Video, keyboard, and clipboard all work without it. See the COSMIC guide.

Can I copy files from Linux to Windows now?

Yes, on native installs. Linux to Windows clipboard file copy uses initiate_file_copy with a live RDP sender wired into the FUSE read handler, alongside the existing Windows to Linux direction.

Troubleshooting

How do I enable debug logging?

Environment variable:

RUST_LOG=debug lamco-rdp-server

Or in config.toml:

[logging]
level = "debug"
How do I check system capabilities?
lamco-rdp-server --show-capabilities

This shows all detected services, codecs, and platform capabilities.

Connection refused error?
  1. Verify server is running:
    systemctl --user status lamco-rdp-server
  2. Check port:
    ss -tlnp | grep 3389
  3. Check firewall:
    sudo firewall-cmd --add-port=3389/tcp
Poor performance / lag / stuttering?

Solutions:

  1. Check hardware encoding:
    lamco-rdp-server --show-capabilities | grep -i encoder
  2. Reduce quality: Video tab → Quality slider to 60-70
  3. Lower FPS: 30 FPS uses half the bandwidth of 60 FPS
  4. Use AVC420: Lower bandwidth than AVC444
How do I report a bug?

File an issue at: GitHub Issues

Include:

  • • Version: lamco-rdp-server --version
  • • Distribution and desktop environment
  • • Capabilities output: lamco-rdp-server --show-capabilities
  • • Debug logs: RUST_LOG=debug lamco-rdp-server 2>&1 | head -200
  • • Steps to reproduce

Security

Is the connection encrypted?

Yes. TLS 1.3 encryption is enabled by default for all connections. TLS 1.2 fallback is available but not recommended. All video, audio, clipboard, and input data is encrypted.

Can I restrict access by IP?

There is no built-in IP allowlist setting. For IP restriction, use the host firewall:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3389" protocol="tcp" accept'
sudo firewall-cmd --reload
How do I set up authentication?

Currently supports system authentication via PAM:

[security]
auth_method = "pam" # or "none" for no authentication

Warning: auth_method = "none" should only be used on trusted networks. The server prints a startup exposure warning if auth_method = "none" is combined with a non-loopback listen_addr. On the hardened system service, PAM authenticates by having the unit join the shadow group so pam_unix reads /etc/shadow directly, keeping full seccomp hardening in place.

Is NLA supported?

Yes. Network Level Authentication (NLA) is implemented and available. Enable it in your configuration:

[security]
enable_nla = true
auth_method = "pam"

Packaging & Installation

How do I install on Fedora?

Enable RPM Fusion nonfree and install via dnf:

sudo dnf install lamco-rdp-server

Requires RPM Fusion nonfree repository to be enabled on your system.

How do I install on Arch Linux?

Install from AUR using your preferred AUR helper:

yay -S lamco-rdp-server
Is there a .deb package?

Yes. A Debian package is available from apt.lamco.ai (amd64 and arm64) for Debian Trixie and derivatives.

You can also download the .deb directly from the download page.

Can I run this on RHEL 9?

Native RHEL 9 support is no longer supported: its glibc predates the build target. RHEL 10 (GNOME, Portal v5) is the current enterprise target, with full video, input, and clipboard.

On RHEL 9 family systems, the Flatpak Community Edition still runs in the Portal v1 sandbox, video-only.

Still Need Help?

Can't find the answer you're looking for?