Blog

Steam et Proton sur un serveur cloud GPU, streamés avec Sunshine et Moonlight

Steam installé sur un serveur Linux sans écran avec une Intel UHD 770, un jeu Windows lancé avec Proton (umu-launcher) et streamé avec Sunshine vers Moonlight : 85 à 96 fps en 1080p, 9 ms de traitement côté serveur.

Steam et Proton sur un serveur cloud GPU, streamés avec Sunshine et Moonlight

Le Steam Deck et la nouvelle Steam Machine de Valve font tourner des jeux Windows sous Linux grâce à Proton, la version de Wine maintenue par Valve. Le même logiciel fonctionne sur un serveur Linux en data center : installez Steam, laissez Proton lancer vos jeux Windows sur le GPU du serveur, et jouez sur n’importe quel écran avec Sunshine (sur le serveur) et Moonlight (chez vous). Nous l’avons testé sur un serveur Linux GPU équipé d’une Intel UHD 770.

La version Windows de SuperTuxKart lancée avec Proton sur le serveur Linux, telle que la reçoit un client Moonlight (5 secondes, statistiques Moonlight en haut à gauche).

Les résultats en bref

  • Le client Steam démarre sur un serveur sans écran : environ 3 minutes entre le premier lancement et la fenêtre de connexion, sur un écran Wayland virtuel rendu par le GPU.
  • Proton fait tourner le jeu Windows sur le GPU : 85 à 96 fps en 1080p (V-Sync coupée) dans le benchmark de SuperTuxKart, proche de Wine (environ 95 fps) et de Windows 11 (111 fps) sur le même GPU.
  • Le streaming avec Sunshine ne ralentit pas le jeu : 83 à 95 fps pendant un flux 1080p à 60 fps vers Moonlight, 9,3 ms de traitement sur le serveur en moyenne, aucune image perdue.
  • Nous ne pouvions pas nous connecter à Steam pour ce test : Proton a donc été lancé avec umu-launcher, l’outil qui exécute le Proton de Valve sans le client Steam. Avec Steam, vous vous connectez avec votre propre compte et activez Steam Play.
  • Pour jouer, prenez iGPU Power : avec la part de GPU d’iGPU Start, pendant que d’autres serveurs utilisaient le GPU, le même benchmark tombait à 67 à 84 fps.

Configuration du test

ÉlémentValeur
ServeurLinux (Debian 13), 4 vCPU (comme iGPU Power), 10 Go de RAM, Intel UHD 770 (GPU partagé), noyau 7.3, Mesa 25.0
Affichagesway en mode headless + Xwayland, 1920 × 1080, rendu par le GPU
Steampaquet Debian steam-installer (client Steam, contrib/non-free)
Protonumu-launcher 1.4.4 (release GitHub), qui a téléchargé UMU-Proton 10.0-4 et le Steam Linux Runtime 3.0
JeuSuperTuxKart 1.5, version Windows, benchmark intégré (course enregistrée, 38 s), rendu OpenGL, V-Sync coupée
StreamingSunshine 2026.914 sur le serveur (capture Wayland, H.264 encodé par le GPU via VA-API), Moonlight 6.2 sur un second serveur Linux, 1080p 60 fps
Réseauclient et serveur dans le même data center : sur Internet, ajoutez la latence de votre connexion

D’autres machines virtuelles utilisaient fortement le GPU partagé pendant tout le test (entre deux tiers et 87 % du temps GPU quand notre serveur était au repos) : les chiffres ci-dessous sont ceux d’un GPU partagé chargé, pas d’un GPU vide.

1. Un écran pour Steam sur un serveur

Steam a besoin d’un affichage et refuse de tourner en root. Nous avons créé un utilisateur normal et lancé sway, un compositeur Wayland qui fonctionne sans écran et dessine avec le GPU, plus Xwayland pour Steam et les jeux Windows (Xvfb ferait le rendu sur le CPU) :

dpkg --add-architecture i386
apt install sway xwayland steam-installer mesa-vulkan-drivers mesa-vulkan-drivers:i386 \
  libgl1-mesa-dri:i386 intel-media-va-driver-non-free
# en tant qu'utilisateur de jeu :
mkdir -p ~/.config/sway
printf 'output HEADLESS-1 resolution 1920x1080\nxwayland enable\n' > ~/.config/sway/config
WLR_BACKENDS=headless WLR_RENDERER=gles2 WLR_LIBINPUT_NO_DEVICES=1 \
  WLR_RENDER_DRM_DEVICE=/dev/dri/renderD128 sway &
DISPLAY=:0 steam &

Au premier lancement, Steam télécharge et met à jour son client (1,4 Go dans ~/.local/share/Steam), puis affiche la fenêtre de connexion, environ 3 minutes 20 secondes après le premier démarrage.

Fenêtre de connexion de Steam sur l'écran sway virtuel d'un serveur cloud Linux
Le client Steam sur l'écran virtuel du serveur, en attente de connexion (capture faite avec grim).

Avec votre propre compte : connectez-vous (via Moonlight ou un bureau à distance la première fois), puis dans Steam → Paramètres → Compatibilité, activez Steam Play pour tous les autres titres et choisissez une version de Proton. Les jeux Windows s’installent et se lancent alors comme des jeux Linux. Pour jouer à la manette depuis le canapé, lancez Steam en mode Big Picture (steam -gamepadui), qui est aussi l’interface de la Steam Machine.

2. Proton sans compte Steam : umu-launcher

Se connecter à Steam n’était pas possible pour ce test : nous avons utilisé umu-launcher, le lanceur utilisé par Lutris et Heroic pour exécuter Proton en dehors de Steam. Il lance un jeu Windows avec Proton dans le même conteneur Steam Linux Runtime que Steam :

export WINEPREFIX=~/prefixes/stk GAMEID=umu-default
./umu-run supertuxkart.exe --screensize=1920x1080 --fullscreen --benchmark

Au premier lancement, umu-launcher a téléchargé UMU-Proton 10.0-4 (1,4 Go décompressé) et le Steam Linux Runtime 3.0 « sniper » (800 Mo), puis créé le préfixe Windows (900 Mo), en moins d’une minute avec la connexion du serveur. Le journal du jeu confirme que Proton dessine sur le GPU :

IrrDriver: OpenGL renderer: Mesa Intel(R) UHD Graphics 770 (ADL-S GT1)
IrrDriver: OpenGL version string: 4.6 (Core Profile) Mesa 25.0.7
Version Windows de SuperTuxKart lancée avec Proton sur un serveur cloud Linux avec une Intel UHD 770
Le jeu Windows lancé avec Proton sur le serveur, en 1080p (capture de l'écran virtuel).

3. Résultats

V-Sync coupée dans le jeu (swap-interval-vsync="0" dans le config.xml de SuperTuxKart) : l’écran du serveur est virtuel, et la V-Sync ne fait qu’obliger le jeu à l’attendre.

SuperTuxKart (version Windows), 1080p, ProtonTypicalMostly stableSteady
Part de GPU d’iGPU Power, 2 passages85 à 96 fps70 à 83 fps52 à 69 fps
Part de GPU d’iGPU Power, en streaming vers Moonlight, 2 passages83 à 95 fps58 à 75 fps44 à 58 fps
Part de GPU d’iGPU Start, 4 passages67 à 84 fps59 à 71 fps45 à 61 fps
Graphique en barres : fps de SuperTuxKart en 1080p avec Proton selon la part de GPU, en streaming, comparé à Wine et Windows 11
Fréquence d’images moyenne de SuperTuxKart selon la configuration (plus haut = mieux).

Pour comparaison, sur le même GPU : environ 95 fps avec Wine et 111 fps sous Windows 11. Proton est un Wine enrichi par Valve ; pour un jeu OpenGL comme celui-ci, la vitesse est la même.

Le jeu utilisait en moyenne environ 10 % des 4 vCPU, environ 30 % avec Sunshine qui capture et encode en même temps. Le serveur entier utilisait 3,2 Go de RAM pendant le test (sway, jeu, Sunshine).

4. Streaming avec Sunshine et Moonlight

Sunshine pour Linux capture l’écran sway et encode sur le GPU. Sa configuration :

capture = wlr
encoder = vaapi
adapter_name = /dev/dri/renderD128

Il lui faut le pilote média Intel (intel-media-va-driver-non-free) ; sans lui, Sunshine ne trouve aucun encodeur. Avec :

Creating encoder [h264_vaapi]
vaapi vendor: Intel iHD driver for Intel(R) Gen Graphics - 25.2.3

Nous avons appairé un client Moonlight installé sur un second serveur Linux du même data center et relevé ses statistiques pendant la partie :

Statistique Moonlight (1080p, H.264, 60 fps)Valeur
Images reçues et affichées59,8 fps
Traitement sur le serveur (capture + encodage), min / moyenne / max4,2 / 9,3 / 14,8 ms
Images perdues (réseau ou gigue)0 %
Latence réseau (même data center)1 ms
Temps de décodage côté client0,29 ms
Graphique en barres : temps du flux Moonlight, traitement serveur min, moyen et max, réseau et décodage client
Où passe le temps dans le flux Moonlight (plus bas = mieux).
Client Moonlight affichant SuperTuxKart streamé depuis le serveur Linux, avec ses statistiques de performance
Ce que voit le joueur dans Moonlight : le jeu lancé avec Proton sur le serveur, et les statistiques.

Ouvrez l’interface web de Sunshine par un tunnel SSH (ssh -L 47990:localhost:47990 utilisateur@votre-serveur) plutôt que de l’exposer sur Internet. Sunshine pour Linux propose d’office une entrée « Steam Big Picture » à choisir dans Moonlight. Votre latence totale dépendra surtout de votre connexion Internet jusqu’au serveur (Allemagne) : une bonne fibre en Europe ajoute en général 10 à 30 ms.

Les limites à connaître

  • Anti-triche : beaucoup de jeux en ligne avec anti-triche refusent Proton ou les machines virtuelles. Vérifiez sur ProtonDB avant d’acheter un jeu pour cet usage.
  • C’est un GPU intégré : parfait pour les jeux indépendants, les jeux anciens et les jeux 2D/3D des années 2010, pas pour les gros jeux AAA récents en 1080p.
  • Son : le serveur n’a pas de carte son. Pour avoir le son dans Moonlight, lancez PipeWire ou PulseAudio dans la session de jeu ; nous n’avons pas testé le son ici.

Des systèmes prêts pour le jeu dès l’installation. Les systèmes que nous installons par défaut sont déjà optimisés pour cela : Debian 13 avec un noyau récent (7.3), les pilotes GPU Intel et Mesa (OpenGL, Vulkan, encodage vidéo VA-API), et Windows 11 (option) avec le pilote graphique Intel et le Bureau à distance rendu sur le GPU. Aucun pilote à chercher : installez votre jeu et Sunshine, et jouez.

Quelle offre ?

Nous recommandons iGPU Power (4 vCPU, 14 Go de RAM, deux fois la part de GPU d’iGPU Start). Quand d’autres serveurs utilisent le GPU, le temps GPU de chacun suit sa part : dans notre test, le même benchmark est passé de 67 à 84 fps avec la part de Start à 85 à 96 fps avec celle de Power. iGPU Start (2 vCPU, 8 Go) reste suffisant pour les jeux 2D et les outils légers.

Envie d’un serveur prêt à jouer ? Demandez-le par e-mail à la commande (contact@linuxgpu.eu) : nous pouvons vous livrer le serveur avec Steam, l’écran virtuel et Sunshine déjà installés et réglés. Vous vous connectez à Steam avec votre propre compte et installez Moonlight sur votre ordinateur, téléphone ou box TV.

Si un jeu ne fonctionne pas avec Proton, l’option Windows 11 (10 €, payés une seule fois) vous donne un Windows complet : voir Windows 11 dans le cloud avec Sunshine et Moonlight.

Voir les offres : iGPU Power coûte 29,99 € HT par mois.