COSMIC (Wayland) RDP

COSMIC (System76's Rust/Smithay desktop) is a working target on lamco-rdp-server 1.4.5. On COSMIC 1.6 and later, video, keyboard, mouse, and clipboard all work out of the box — no opt-in step needed. COSMIC 1.6 (2026-08-18) shipped EI protocol support (cosmic-comp #2442) and a RemoteDesktop portal (xdg-desktop-portal-cosmic #317), so input now routes through the same org.freedesktop.portal.RemoteDesktop + EIS path already used on GNOME and KDE. Screen capture uses ext-image-copy-capture-v1 and clipboard uses ext-data-control-v1, as before.

On COSMIC releases before 1.6, there is no RemoteDesktop portal and no wlr-virtual-pointer (cosmic-comp #1350), so the server falls back to injecting the mouse through the kernel's /dev/uinput as an interim, application-owned path; keyboard and clipboard already worked the same way they do today. See the opt-in section below if you're on an older COSMIC release.

What works today (1.4.5, COSMIC 1.6+)

CapabilityPath on COSMICNotes
Screen videoext-image-copy-capture-v1 (portal-generic)Real frames, no consent dialog. The native COSMIC ScreenCast portal node hands out 0 frames and is not used
KeyboardRemoteDesktop portal + EISFull, including Unicode
MouseRemoteDesktop portal + EISWorks out of the box on COSMIC 1.6+, no opt-in step
Clipboardext-data-control-v1 (+ zwlr-data-control-v1)Bidirectional, verified

On COSMIC releases before 1.6, keyboard and clipboard use the same paths; mouse instead needs the /dev/uinput opt-in step below.

The RemoteDesktop portal has landed. COSMIC 1.6 merged both blockers this page used to track: EI protocol support (cosmic-comp #2442) and the RemoteDesktop portal (xdg-desktop-portal-cosmic #317). input.input_protocol = "auto" resolves to libei on COSMIC 1.6+, so mouse and keyboard route through the same portal-mediated EIS path as GNOME/KDE, and the /dev/uinput fallback is no longer needed there. It stays in place only for COSMIC releases before 1.6.

Enable the mouse: give the server /dev/uinput access (COSMIC before 1.6 only)

On COSMIC 1.6 and later the mouse works out of the box through the RemoteDesktop portal — skip this section. On an older COSMIC release, mouse is the single feature that wants /dev/uinput. Video, keyboard, and clipboard all work without it; when it is missing the session simply comes up keyboard-only and logs:

uinput pointer unavailable ... keyboard-only

Grant access one of two ways (the uinput device node is built into most distro kernels; if yours ships it as a module, load it first with sudo modprobe uinput):

  • A udev rule (recommended, per-machine):
    echo 'KERNEL=="uinput", GROUP="input", MODE="0660"' | sudo tee /etc/udev/rules.d/99-uinput.rules
    sudo udevadm control --reload-rules && sudo udevadm trigger
    sudo usermod -aG input "$USER"      # then log out and back in
  • Or an existing ACL: some systems already grant the active login session access via a uaccess ACL. Check with ls -l /dev/uinput — a trailing + (e.g. crw-rw----+) means an ACL is present and no group change is needed.

Nothing else needs this: GNOME, KDE, and wlroots inject input through Wayland protocols and never touch /dev/uinput.

COSMIC's evolving state (precise, as of epoch 1.6)

COSMIC's input situation held at /dev/uinput through epoch 1.2.0, then changed with epoch 1.6 (2026-08-18): the upstream chain this page tracked — cosmic-comp #2442 and xdg-desktop-portal-cosmic #317 — merged, bringing up the standard org.freedesktop.portal.RemoteDesktop + EIS path already used on GNOME/KDE. The server routes input there automatically on 1.6+, with no COSMIC-specific code and no /dev/uinput access needed. COSMIC still moves quickly overall, so re-check lamco-rdp-server --show-capabilities on your version.

Install

Native or Flatpak (CE). On COSMIC prefer the native package if you need the mouse (the Flatpak sandbox complicates /dev/uinput access). Verify what the running session exposes:

lamco-rdp-server --show-capabilities

Minimal config

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

[server]
# Dual-stack by default; use "0.0.0.0:3389" only to force IPv4-only.
listen_addr = "[::]:3389"

[security]
tls = true

[video]
codec = "auto"

Connect

Dual-stack by default (IPv4 + IPv6). Hostname or explicit address (IPv6 in brackets):

  • Windows: mstsc.exe → host:3389 (or [2001:db8::10]:3389).
  • Linux: Remmina, or xfreerdp /v:host:3389 /u:USER.

Troubleshooting

SymptomCauseFix
Video and keyboard work but the mouse doesn't move (COSMIC before 1.6)Server can't open /dev/uinput (log: uinput pointer unavailable ... keyboard-only); COSMIC has no wlr-virtual-pointerGrant /dev/uinput access (udev rule + input group, or a uaccess ACL); re-login
Mouse doesn't move on COSMIC 1.6+Not the uinput case above — check whether the RemoteDesktop portal is actually active in the sessionRun lamco-rdp-server --show-capabilities and confirm it reports the RemoteDesktop portal/EIS path, not uinput
Black/blank screenThe native COSMIC ScreenCast portal node returns 0 framesNothing to do: the server uses ext-image-copy-capture automatically. Ensure an Encoding backend (--show-capabilities); install Cisco OpenH264 for software H.264 (see Video Encoding)
Clipboard text doesn't syncext-data-control-v1 unavailable in the running sessionConfirm the COSMIC build advertises ext-data-control-v1

See also: Installation, Configuration, Security, Video Encoding, the Roadmap, the Platform Compatibility matrix, and the sibling guides for GNOME/Mutter, KDE/KWin, sway/wlroots, and Hyprland.