Blog

Een Linux-bureaublad in de cloud met een GPU: wat de GPU echt verandert

We draaiden een volledig Linux-bureaublad op een cloudserver met een gedeelde Intel UHD 770 en streamden het met Sunshine en Moonlight, één keer met de GPU en één keer in software. Met de GPU gebruikten een 1080p-video, een WebGL-scène of een zware webpagina 0,3 tot 0,6 vCPU en bleven ze op 60 fps; in software nam hetzelfde bureaublad 2,7 tot 3,9 vCPU, zakte WebGL naar 7 fps en verdrievoudigde de streamlatentie op de server.

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.

Hetzelfde cloudbureaublad zoals een Moonlight-client het ontvangt (elk 5 seconden). Boven: GPU, WebGL Aquarium op 62 fps. Onder: alleen CPU, 9 fps, en de stream zelf zakt naar ongeveer 45 fps. De statistieken van Moonlight staan linksboven.

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

OnderdeelWaarde
ServerDebian 13, Linux 7.3, Intel UHD 770 (gedeelde GPU), 4 vCPU, 8 GB RAM
Bureaubladsway (Wayland, Debian-pakket) in headless-modus, 1920×1080, waybar, terminal foot; Xwayland voor X11-apps
BrowserChromium 156 (Debian-pakket), native Wayland
StreamingSunshine 2026.914 (capture = wlr), H.264 1080p 60 fps op 15 Mbit/s
ClientMoonlight (Qt-AppImage) op een tweede server in hetzelfde datacenter (1 ms netwerk), hardwaredecodering
GPU-modusChromium op de GPU (OpenGL ES via Mesa, videodecodering met VA-API), Sunshine encoder = vaapi
SoftwaremodusChromium met SwiftShader (de CPU-renderer van Chrome) en zonder hardwarematige videodecodering, Sunshine encoder = software (x264 superfast)
Testsbureaublad 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
Metingen12 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

Staafdiagram: CPU van de server gebruikt door het gestreamde bureaublad in vier tests, GPU tegenover software
CPU van de hele server, in vCPU van de 4, terwijl Moonlight het bureaublad streamt. GPU in groen, alleen CPU in oranje.
TestGPU: serverwaarvan Chromiumwaarvan SunshineSoftware: serverwaarvan Chromiumwaarvan Sunshine
Bureaublad in rust0,14 vCPU—0,100,96 vCPU—0,92
1080p-video0,31 vCPU0,120,142,71 vCPU1,231,45
WebGL Aquarium0,56 vCPU0,370,153,88 vCPU2,841,00
Wikipedia scrollen0,44 vCPU0,250,153,21 vCPU1,911,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

Staafdiagram: beeldsnelheid van WebGL Aquarium en beelden per seconde ontvangen door Moonlight, GPU tegenover software
Eerste staaf: beelden die WebGL Aquarium in de pagina tekent. Overige staven: beelden per seconde die de Moonlight-client tijdens elke test ontving.

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.

Moonlight-client met het cloudbureaublad: een terminal en Chromium met WebGL Aquarium op 62 fps, Moonlight-statistieken op 59,8 fps en 10,1 ms verwerking op de host
GPU: WebGL Aquarium op 62 fps; Moonlight ontvangt 59,8 fps, met 10,1 ms verwerking op de server. De balk bovenaan toont de CPU van de server op 13%.
Hetzelfde bureaublad in software: WebGL Aquarium op 7 fps, Moonlight-statistieken op 50,5 fps en 32,6 ms verwerking op de host, CPU van de server op 97%
Software: het aquarium zakt naar 7 fps, de stream naar 50,5 fps met 32,6 ms op de server, en de CPU staat op 97%.

3. Streamlatentie op de server

Staafdiagram: verwerkingstijd van Sunshine op de host per beeld in vier tests, GPU tegenover software
Gemiddelde tijd die Sunshine op de server nodig heeft om één beeld op te nemen en te coderen, zoals gemeld door Moonlight. Lager betekent een sneller reagerend bureaublad.

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

Staafdiagram: CPU gebruikt door Sunshine met de VA-API-encoder en met de x264-encoder in vier tests
CPU die alleen Sunshine gebruikt, in beide gevallen met Chromium op de GPU, zodat alleen de encoder verandert.

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 snelheidCPU voor één 1080p60-stream
h264_vaapi (GPU)194 fps0,18 core
h264_vaapi, low-powermodus (GPU)254 fps0,19 core
libx264 superfast, zero latency (CPU)126 fps1,35 cores
libx264 veryfast (CPU)78 fps2,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 cloudbureaublad: een terminal met Debian 13, Linux 7.3, de OpenGL-renderer Intel UHD 770 en zijn VA-API-profielen, naast Chromium dat Big Buck Bunny afspeelt
Het bureaublad op de server: de terminal toont OpenGL op de Intel UHD 770 en de VA-API-encoders; Chromium speelt een 1080p-video af die door de GPU wordt gedecodeerd. CPU op 4%, 1,3 GB RAM in gebruik.

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.