COSMIC (Wayland) RDP

COSMIC (System76's Rust/Smithay desktop) is a working target on lamco-rdp-server 1.4.4: video, keyboard, and clipboard work out of the box, and mouse works after one opt-in step. COSMIC exposes ext-image-copy-capture-v1 (capture), zwp_virtual_keyboard (keyboard), and ext-data-control-v1 (clipboard), but it does not implement wlr-virtual-pointer (cosmic-comp #1350), does not offer wlr-screencopy (rejected, #560), and has no RemoteDesktop portal yet. So the server captures and types through its portal-generic path and injects the mouse through the kernel's /dev/uinput as an interim, application-owned path.

What works today (1.4.4)

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
Keyboardzwp_virtual_keyboardFull, including Unicode
Clipboardext-data-control-v1 (+ zwlr-data-control-v1)Bidirectional, verified
Mouse/dev/uinput (creates a lamco-rdp-pointer device)Opt-in; see below. Without it the session is keyboard-only

There is no libei/RemoteDesktop portal on COSMIC yet, so input does not go through libei here (unlike GNOME/KDE).

Enable the mouse: give the server /dev/uinput access (COSMIC-only, opt-in)

Mouse is the single feature that wants /dev/uinput, and only on COSMIC. 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.2.0)

COSMIC's input situation did not change between epoch 1.0 and 1.2.0: uinput remains the COSMIC mouse path through 1.2.0. The standard org.freedesktop.portal.RemoteDesktop + EIS path (already used on GNOME/KDE) will take over once the upstream chain merges: Smithay #2073 (ei_text), cosmic-comp #2442, and xdg-desktop-portal-cosmic #317 (all still open). When it lands, the server routes input there automatically and the /dev/uinput path retires with no COSMIC-specific code. 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.exehost: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 moveServer 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
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.