I was building Parallel — an Electron app for local network screen sharing on Linux. No server, no account, just WebRTC and mDNS between two machines on the same WiFi.

Everything worked until I tried to add remote input control on Wayland.

The problem with Wayland

The X11 display protocol allowed apps to inject input directly. Wayland was designed to prevent this — no app can touch the input system without going through the XDG Desktop Portal RemoteDesktop interface, which requires the user to explicitly grant permission.

So I implemented the portal workflow. Three calls: CreateSession, SelectDevices, Start. After the user clicks Allow on the dialog, you can inject input freely.