Waylo
Waylo is a lightweight, browser-based remote desktop for Wayland/GNOME. It streams a real logged-in GNOME session to any modern browser — no client to install, no plugin, no VNC server — and it is built from the ground up for unattended access: a headless box that boots, auto-logs-in, and is reachable over the network without anyone sitting at the keyboard.
The name is a nod to how it is meant to be reached: lo = the loopback interface, behind SSH or a VPN, on Wayland.
Why Waylo
Traditional remote-desktop stacks fight the modern Linux desktop instead of working with it:
- VNC servers on Wayland either can't capture the real session or require a parallel virtual display, losing your actual desktop and GPU acceleration.
- xrdp spins up a separate login session; on GNOME it commonly collides with the user's one allowed graphical session and the window manager exits on connect. It also doesn't survive a locked screen gracefully.
xdg-desktop-portalscreen-sharing needs a human to click an "allow" and monitor-picker dialog on every start, and won't persist monitor choices across restarts — a non-starter for unattended machines.
Waylo talks directly to GNOME's compositor, Mutter, over its private D-Bus
APIs (org.gnome.Mutter.ScreenCast and org.gnome.Mutter.RemoteDesktop). That
means it captures the real, current session — the same desktop the user
sees — with no dialogs, no manual activation, and no separate display, and it
keeps working across service restarts and reboots.
Key features
- Zero-install client — any WebCodecs-capable browser; the UI is served by Waylo itself. An optional desktop app adds saved connections, stored credentials and several sessions at once.
- Encrypted by default — HTTPS/WSS with a self-signed certificate on first run, which is also what lets browsers decode H.264.
- Real session capture via GNOME Mutter — no virtual display, no portal dialogs, monitor choices persist.
- H.264 with automatic MJPEG fallback — hardware-accelerated when available (VA-API), decoded in the browser via WebCodecs; falls back to MJPEG when H.264 isn't available.
- Multi-monitor — switch monitors from the toolbar, or pop a monitor out into its own browser window with seamless pointer edge-crossing between them.
- True unattended access — a systemd user service, GDM auto-login, and a locked-screen capture path mean a machine is reachable from cold boot.
- Locked-screen aware — with the companion GNOME extension, Waylo streams the session while it stays locked; without it, Waylo automatically drops the lock and retries so a connection never wedges.
- SSH-backed authentication — credentials are verified against the local SSH server, so only the desktop session's owner (with sudo) can connect.
- Input — pointer (absolute), keyboard, discrete + smooth scroll, on-screen keyboard and touch support for phones and tablets.
- Self-contained installer — a single
.runfile bundles a pinned Node runtime, the prebuilt UI, and native dependencies; the target needs no Node, npm, compiler, or network.
Where to go next
- System Requirements — what the host needs (GNOME, OpenSSH, GStreamer).
- Installation — the one-line
installer and the self-extracting
.run. - Quick Start — connect and log in.
- Unattended Access — service, auto-login, and locked-screen capture.
- Architecture — how the pieces fit together.
Waylo requires a GNOME desktop. It is designed for Wayland but also works on a GNOME-on-Xorg session (including inside an xrdp session), because it uses Mutter's D-Bus APIs rather than any display-server-specific capture.