Een Linux-bureaublad in de cloud met een GPU: wat de GPU echt verandert
Steeds meer mensen willen een Linux-bureaublad dat op een server draait: een werkomgeving die vanaf elke computer hetzelfde is, een browser die niet op je laptop draait, een plek voor AI-desktopapps en agents die blijven draaien als je de klep dichtdoet. Tools als Kasm Workspaces, webtop, Apache Guacamole of RustDesk spelen allemaal in op die behoefte. De meeste tekenen het bureaublad in software, op de CPU.
Daarom stelden we een simpele vraag: wat levert de GPU een extern bureaublad op, op een cloudserver met een gedeelde Intel-GPU? We draaiden hetzelfde bureaublad op dezelfde server en streamden het in 1080p en 60 fps naar een client, eerst met de GPU die de apps tekent en de stream codeert, daarna met alles op de CPU.
De resultaten in het kort
- De GPU houdt de server vrij. Met de GPU gebruikten het hele bureaublad en de stream 0,14 vCPU in rust, 0,31 voor een 1080p-video, 0,44 voor het scrollen door een zware webpagina en 0,56 voor een WebGL-scène, van de 4. In software namen dezelfde taken 0,96, 2,71, 3,21 en 3,88 vCPU: vanaf het afspelen van video zat de server bijna vol.
- 3D in de browser heeft de GPU nodig. WebGL Aquarium draaide op 62 fps op de GPU en 7 fps in software, terwijl alle 4 vCPU bezet waren. Zonder vlag voor een software-fallback zet Chromium WebGL gewoon uit.
- Een vloeiendere, snellere stream. Met de GPU ontving Moonlight in elke test 60 fps en had Sunshine 8 tot 11 ms per beeld op de server nodig. In software zakte de stream naar 52 tot 59 fps en kostte hij 25 tot 32 ms per beeld zodra er iets bewoog.
- Alleen het coderen: 0,1 core in plaats van 1. De H.264-encoder van Sunshine op de GPU (VA-API) gebruikte 0,10 tot 0,15 van een core; de x264-software-encoder gebruikte 0,81 tot 1,19 cores voor dezelfde 1080p60-stream.
- 0 GPU-hangs op de host tijdens de hele test.
Testopstelling
| Onderdeel | Waarde |
|---|---|
| Server | Debian 13, Linux 7.3, Intel UHD 770 (gedeelde GPU), 4 vCPU, 8 GB RAM |
| Bureaublad | sway (Wayland, Debian-pakket) in headless-modus, 1920×1080, waybar, terminal foot; Xwayland voor X11-apps |
| Browser | Chromium 156 (Debian-pakket), native Wayland |
| Streaming | Sunshine 2026.914 (capture = wlr), H.264 1080p 60 fps op 15 Mbit/s |
| Client | Moonlight (Qt-AppImage) op een tweede server in hetzelfde datacenter (1 ms netwerk), hardwaredecodering |
| GPU-modus | Chromium op de GPU (OpenGL ES via Mesa, videodecodering met VA-API), Sunshine encoder = vaapi |
| Softwaremodus | Chromium met SwiftShader (de CPU-renderer van Chrome) en zonder hardwarematige videodecodering, Sunshine encoder = software (x264 superfast) |
| Tests | bureaublad in rust; Big Buck Bunny 1080p30 H.264 in een <video> op volledig scherm; WebGL Aquarium (500 vissen); en.wikipedia.org/wiki/Linux gescrold met 12 px per beeld |
| Metingen | 12 s opwarmen, daarna 30 s per test terwijl Moonlight streamt; CPU van de hele server uit /proc/stat; beeldsnelheden uit de pagina (requestAnimationFrame, getVideoPlaybackQuality); statistieken van Moonlight aan het einde van de stream. 3 runs op de GPU, 2 in software, gemiddeld |
CPU-waarden staan in vCPU (1,00 = één volledige core van de 4). In beide modi tekent de windowmanager zelf op de GPU: Sunshine kan geen sway-sessie opnemen die door de CPU wordt getekend. Een server zonder enige GPU zou het daarom iets slechter doen dan onze softwaremodus.
1. CPU van de server: het grootste verschil
| Test | GPU: server | waarvan Chromium | waarvan Sunshine | Software: server | waarvan Chromium | waarvan Sunshine |
|---|---|---|---|---|---|---|
| Bureaublad in rust | 0,14 vCPU | — | 0,10 | 0,96 vCPU | — | 0,92 |
| 1080p-video | 0,31 vCPU | 0,12 | 0,14 | 2,71 vCPU | 1,23 | 1,45 |
| WebGL Aquarium | 0,56 vCPU | 0,37 | 0,15 | 3,88 vCPU | 2,84 | 1,00 |
| Wikipedia scrollen | 0,44 vCPU | 0,25 | 0,15 | 3,21 vCPU | 1,91 | 1,23 |
Twee dingen vullen de CPU in software. Eerst de apps: Chromium had 1,2 cores nodig om een 1080p-video te decoderen en te tonen, en 2,8 cores om het aquarium slecht te tekenen. Dan de stream: de software-encoder kost de hele tijd ongeveer één core, zelfs als er niets beweegt op het scherm, omdat hij nog steeds 60 beelden per seconde verstuurt. Op de GPU verhuizen beide taken naar speciale engines: in onze metingen was de video-engine van de GPU voor 15 tot 43% bezet en de 3D-engine voor 5 tot 30%.
Zonder stream (alleen het bureaublad, zonder verbonden gebruiker) gebruikte het GPU-bureaublad 0,00 vCPU in rust, 0,10 voor de video en 0,26 voor het aquarium.
2. Beeldsnelheden: de pagina en de stream
Met de GPU draaide elke pagina op de volle 60 fps van het scherm (61,5 tot 61,8 gemeten door de pagina) en speelde de video zijn 30 beelden per seconde af zonder er één te verliezen. In software speelde de video ook zonder verlies af en bleef scrollen binnen de pagina op 60 fps, maar de server was zo druk dat de stream beelden verloor: Moonlight ontving 58,5 fps tijdens de video, 55,8 tijdens het scrollen en 52,0 met het aquarium. Op het scherm is dat een bureaublad dat hapert.
3. Streamlatentie op de server
Moonlight meldt de tijd die elk beeld op de server doorbrengt (“host processing latency”). Met de GPU was dat gemiddeld 8,1 tot 10,8 ms, met pieken rond 20 tot 32 ms. In software was het 14 ms in rust en 25 tot 32 ms zodra het scherm bewoog, met pieken van 51 tot 67 ms. De latentie van je internetverbinding komt daar nog bovenop: onze client zat op 1 ms afstand, in hetzelfde datacenter.
4. Alleen de encoder: VA-API tegenover x264
Om de encoder te isoleren, lieten we de apps op de GPU en schakelden we alleen Sunshine om van VA-API naar x264. Sunshine ging van 0,10-0,15 core naar 0,81-1,19 cores, en de tijd per beeld op de server van 8-11 ms naar 12-17 ms. We hebben de encoders ook met ffmpeg getimed op 60 seconden ongecomprimeerde 1080p-video:
| Encoder (H.264, 15 Mbit/s) | Hoogste snelheid | CPU voor één 1080p60-stream |
|---|---|---|
h264_vaapi (GPU) | 194 fps | 0,18 core |
h264_vaapi, low-powermodus (GPU) | 254 fps | 0,19 core |
libx264 superfast, zero latency (CPU) | 126 fps | 1,35 cores |
libx264 veryfast (CPU) | 78 fps | 2,31 cores |
Op 2 vCPU zou een software-encoder alleen al meer dan de helft van de server innemen. De encoder van de GPU zou drie 1080p60-streams tegelijk aankunnen.
5. Hoe het eruitziet en wat je erop kunt draaien
Het is een normaal Linux-bureaublad: een browser met WebGL en hardwarevideo, een terminal, kantoorapps, een IDE, beeldbewerking en desktopapps voor AI. Er bestaan bijvoorbeeld communitybuilds van Claude Desktop voor Linux; dat zijn onofficiële pakketten, niet ondersteund door Anthropic, en we hebben er hier geen geïnstalleerd omdat er een account voor nodig is. Hetzelfde geldt voor apps die een browser aansturen voor een AI-agent: zie OpenClaw op een GPU-server en Chrome met de GPU op een Linux-server (headless, Playwright).
Het bureaublad gebruikte tussen 1,3 en 1,7 GB RAM met Chromium open.
6. Een app of een browser?
We testten Sunshine en Moonlight omdat ze de GPU aan beide kanten gebruiken: VA-API-codering op de server,
hardwaredecodering op je apparaat, en clients voor Windows, macOS, Linux, Android, iOS en Apple TV. Moonlight is
gemaakt voor games en reageert dus heel snel, maar heeft geen bestandsoverdracht: gebruik scp, SFTP of een
synchronisatietool voor bestanden.
Heb je liever een browser en niets te installeren, dan streamen projecten als Selkies (WebRTC), Kasm Workspaces of webtop een bureaublad naar een webpagina, en geeft Apache Guacamole RDP of VNC door. Die hebben we hier niet gemeten. Controleer of het bureaublad erachter op de GPU wordt getekend en of de stream met VA-API wordt gecodeerd: een bureaublad getekend door Xvfb of xrdp is puur software, zoals onze softwaremodus.
7. Veilig verbinden
Sunshine opent meerdere poorten (47984 tot 48010) en een webbeheerpagina op poort 47990. Stel ze nooit open voor het internet. Zet de server en je apparaten in een privénetwerk met Tailscale (of WireGuard) en verbind Moonlight met het Tailscale-adres van de server:
# op de server en op elk apparaat
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
# de firewall van de server kan dan elke Sunshine-poort blokkeren, behalve op tailscale0
Koppel elk apparaat één keer met de pincode van Sunshine en houd de beheerpagina alleen bereikbaar via het tailnet
of een SSH-tunnel (ssh -L 47990:localhost:47990 <server>). We leggen de hele opzet stap voor stap uit in
Overal spelen op je cloudserver met Moonlight en Tailscale.
8. Zelf instellen
Liever meteen klaar voor gebruik? Vraag het per e-mail bij je bestelling (contact@linuxgpu.eu): we kunnen de server leveren met het bureaublad, Sunshine op de GPU en Tailscale al geïnstalleerd.
Op Debian 13, als root:
apt install sway waybar foot xwayland seatd chromium intel-media-va-driver-non-free vainfo
# Sunshine: de .deb voor Debian 13 ("trixie") van github.com/LizardByte/Sunshine/releases
apt install ./sunshine-*trixie*amd64.deb
useradd -m -G video,render,input desk && systemctl enable --now seatd
Start daarna, als gebruiker desk, sway zonder scherm en Sunshine op de GPU:
mkdir -p ~/.config/sway ~/.config/sunshine
printf 'output HEADLESS-1 resolution 1920x1080\nbar swaybar_command waybar\n' > ~/.config/sway/config
printf 'capture = wlr\nencoder = vaapi\nadapter_name = /dev/dri/renderD128\n' > ~/.config/sunshine/sunshine.conf
export XDG_RUNTIME_DIR=/run/user/$(id -u)
# headless = geen scherm; libinput = toetsenbord en muis verstuurd door Moonlight (via uinput)
LIBSEAT_BACKEND=seatd WLR_BACKENDS=headless,libinput WLR_RENDER_DRM_DEVICE=/dev/dri/renderD128 \
dbus-run-session sway &
sleep 3; WAYLAND_DISPLAY=wayland-1 sunshine ~/.config/sunshine/sunshine.conf &
In het log van Sunshine zou Creating encoder [h264_vaapi] moeten staan. Start Chromium met
--ozone-platform=wayland; dan zou chrome://gpu de Intel UHD 770 moeten tonen en zou het aquarium op de
beeldsnelheid van het scherm moeten draaien. Zonder libinput in WLR_BACKENDS wordt het bureaublad goed
weergegeven, maar negeert het toetsenbord en muis.
Beperkingen van deze test
- Eén gebruiker, 4 vCPU, een client op 1 ms afstand. Via het internet komt de latentie van je verbinding erbij. We hebben geen audio en geen meerdere gebruikers tegelijk getest.
- sway is een tiling-windowmanager. Hij draait heel goed zonder scherm. GNOME en KDE Plasma hebben een andere headless-opzet nodig, die we hier niet hebben gemeten.
- De GPU is gedeeld. Andere servers gebruiken hem ook, dus de beeldtijden kunnen iets schommelen als die druk bezig zijn. Elk abonnement heeft zijn eigen aandeel in de GPU (Perf 1, 2 of 3).
- Onze softwaremodus gebruikte de GPU nog steeds voor de windowmanager. Een server zonder enige GPU zou trager zijn dan wat we in software hebben gemeten.
Welk abonnement?
Met de GPU gebruikte het gestreamde bureaublad in onze tests 0,1 tot 0,6 vCPU en ongeveer 1,5 GB RAM.
- iGPU Start (2 vCPU, 8 GB RAM, Perf 1, € 14,99 per maand excl. btw): het bureaublad van één persoon om te browsen, voor kantoorwerk, ontwikkeling en AI-desktopapps. Met de GPU laten een 1080p-video of een WebGL-pagina meer dan één vCPU vrij; in software zouden 2 vCPU al vol zitten.
- iGPU Power (4 vCPU, 14 GB, Perf 2 = twee keer het GPU-aandeel van Start, € 29,99): zwaar browsen met veel tabbladen, 3D in de browser, ontwerpwerk, of een bureaublad plus Docker-diensten en AI-agents op dezelfde server. Dit is de grootte die we hebben getest.
- iGPU Pro (6 vCPU, 14 GB, Perf 3, € 44,99): een bureaublad naast zwaarder GPU-werk zoals transcoderen of lokale AI-modellen.
Probeer het
Bekijk de abonnementen: iGPU Start kost € 14,99 en iGPU Power € 29,99 per maand excl. btw.