gliff is a remote desktop for Hyprland. It shows the Hyprland session of another machine in a window on yours, and all it needs between the two is ssh: no open ports, no accounts, no relay.
Text stays sharp. Most remote desktops send video with halved colour resolution, which blurs coloured text; gliff sends full-resolution colour (4:4:4) through the H.264 hardware every GPU has. Video runs on the GPU at both ends, and falls back to the CPU on machines where it cannot.
- Mirror any screen of the remote machine, or get a private screen that exists only for your session and follows the size of your window.
- Your keyboard layout, not the remote's: keys map the same on both ends.
- A shared clipboard in both directions: text, images, and copied files.
- Quality that adapts to the link, giving up frame rate before sharpness.
- Reconnection when the link drops.
- A window that follows your Omarchy theme.
- Hyprland on both machines, with a session running on the remote one.
- ssh access from your machine to the remote one.
- For GPU video: an AMD or Intel GPU with its Vulkan and VA-API drivers
(on Arch,
vulkan-radeonandmesafor AMD, orvulkan-intelandintel-media-driverfor Intel). Without them, and on NVIDIA, gliff uses the CPU and needs nothing extra.
Install gliff on both machines: your machine runs gliff, the remote one
runs gliff-server.
Install gliff from the Omarchy Package Repository (OPR):
omarchy pkg add gliff
Then open Gliff from the app launcher, or run gliff in a terminal.
On Arch without the OPR, build and install the package from a checkout:
bin/install
To build from source, see docs/development.md.
gliff user@host
This mirrors the screen that has focus on the remote machine. To pick a screen, or to get a private one:
gliff --output DP-1 user@host # mirror a named remote screen
gliff --headless user@host # a private remote screen, sized and
# scaled to this window
A mirrored screen keeps its own size and is fitted into the window. A private screen follows the window as you resize it, and is removed when you disconnect.
Every machine you connect to gets a tab in the title bar. Click a tab to
connect to that machine, or to switch to it: each connection keeps running
while you look at another, so switching is instant. Hover a tab for its
button: a stop square disconnects a running machine, and an X forgets one
that is not running. Drag the tabs to reorder them. The + after the tabs
opens the address bar; type user@host and press Enter to add a machine.
A bare gliff opens the window with a tab for each machine you have used,
and connects again to the ones that were connected when you closed it; with
no machines yet, it opens with the address bar ready.
Keyboard. While the pointer is over the picture, everything you type goes
to the remote machine, window-manager shortcuts included; move the pointer
off it to get your own back. Press Shift+Esc to get your shortcuts back
without moving the pointer. --release-hotkey changes that key (ctrl+alt+q,
double-escape, or none).
Clipboard. Copy on one machine and paste on the other. Nothing is sent
until you paste. A paste that takes more than a second shows its progress
with a cancel button. Pasted files are kept in ~/.cache/gliff/clipboard.
Slow links. gliff measures the link and lowers the frame rate, then the
colour detail, then the resolution, and raises them again when there is
room. Two flags change the video, and you pass them to the server through
--server-bin: --low-bandwidth sends 4:2:0 colour from the start, and
--full-chroma keeps 4:4:4 on a server that encodes on the CPU.
gliff --server-bin 'gliff-server --low-bandwidth' user@host
- Run
gliff-probe allon each machine. It checks the compositor, the GPU drivers and both video paths, and prints PASS or FAIL for each. - If ssh cannot find
gliff-server, give its path:gliff --server-bin /path/to/gliff-server user@host. - The server needs the remote user's running Hyprland session. If the ssh
session does not have
XDG_RUNTIME_DIRorWAYLAND_DISPLAY, set them through--server-bin 'env XDG_RUNTIME_DIR=/run/user/1000 gliff-server'. - To rule out a driver problem, force the CPU on your end with
gliff --video cpu user@host. - Screens wider than 4096 pixels are streamed at a reduced size and scaled back up.
- docs/architecture.md: how it works, the design choices, measurements, and what is not built yet.
- docs/hardware-quirks.md: what each GPU driver and Hyprland do, and what is tested where.
- docs/development.md: building, running on one machine, and the tests.
gliff is released under the MIT license.
