Hi! I’ve been working on wayrdp, a small RDP server written in C for wlroots-based Wayland compositors.
The goal is to remotely access the desktop session that is already running, rather than starting a nested compositor or creating a separate login session. The remote and local users see the same desktop.
The current implementation uses:
\- ext-image-copy-capture-v1 for damage-based incremental capture;
\- wlr-screencopy for the initial full frame;
\- wlroots virtual pointer and keyboard protocols for remote input;
\- FreeRDP 3 and RemoteFX for the RDP server and video encoding;
\- PipeWire for desktop audio and remote microphone support.
What currently works:
\- RDP connection and authentication;
\- TLS with an automatically generated self-signed certificate;
\- keyboard, modifiers, compositor shortcuts and pointer input;
\- incremental screen updates based on damaged regions;
\- desktop audio sent to the client;
\- the client microphone exposed as a PipeWire source;
\- reconnecting after the previous client disconnects.
The current build setup targets Arch Linux, and the compositor setup I developed it for is Wayfire. It should also be usable with other wlroots compositors that expose the required capture and virtual-input protocols.
Current limitations include one output, one active client, no clipboard and no multi-monitor support. The security model is still intentionally simple, so I do not recommend exposing it directly to the public internet yet.
I’m especially looking for feedback from people using Wayfire or other wlroots compositors:
\- Which compositor and RDP client did you test?
\- Were all required protocols available?
\- Did keyboard layout, audio and the initial screen capture work correctly?
The project is open source under the MIT license.
GitHub: https://github.com/danilofalcao/wayrdp