006: The Linux GPU desktop runs Xorg with NVIDIA's driver, streamed by x0vncserver
Status: accepted, 30 September 2026. Research: the GPU in a desktop
box. Partly superseded by
021: the screen resizes with
xrandr --fb, so the backend resizes it for the viewer. Extended by
020: a GPU desktop that fell back to
the CPU is retried on another GPU; and by
048:
a Wayland desktop on the GPU needs a host setting that this decision’s Xorg
path does not.
Context
The desktop box exists for GPU-rendered apps: Chrome with WebGL and WebGPU, and native apps such as GPUI apps on Vulkan. In an unprivileged container with no monitor, measured on an NVIDIA GPU:
| Display server | Result |
|---|---|
| Xtigervnc | CPU only; Vulkan cannot present on NVIDIA |
| Xtigervnc with VirtualGL | OpenGL on the GPU, no Vulkan |
| Xorg with NVIDIA’s driver on a virtual screen | OpenGL, Vulkan, Chrome and GPUI all on the GPU |
Selkies’ patched Xvfb would keep the screen on the GPU and allow resizing and
more desktops per GPU. It needs the host’s nvidia_drm module loaded with
modeset=Y, and changing that means reloading the module or rebooting the
host.
Decision
- The desktop template runs Xorg with NVIDIA’s driver on a virtual screen,
served by
x0vncserverfrom upstream TigerVNC 1.16.2. Ubuntu 24.04’s 1.13.1 lacks clipboard support inx0vncserverand the fix for CVE-2026-34352. - Each desktop sees one GPU. With two GPUs visible, Vulkan could not present.
- Without a usable GPU (no device, or a driver mismatch), the box falls back to Xtigervnc on the CPU and reports why.
- The patched Xvfb is parked until the operator sets
modeset=Yon the host. Then the experiment in the research note decides whether to switch.
Consequences
- The desktop cannot resize to the panel; it keeps the size it started with.
x0vncservercopies each update from GPU memory on the CPU.- Each desktop uses 40 to 47 MiB of GPU memory for Xorg, and Chrome’s GPU process 100 to 300 MB more. The backend reports GPU desktops per GPU, and a setting caps them so other workloads on the host keep their memory.
- The box reports whether it came up on the GPU or the CPU. The panel shows it and the agent can read it.