7.8 KiB
title, created, updated, type, tags, confidence, contested, sources
| title | created | updated | type | tags | confidence | contested | sources | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Steam Headless | 2026-06-07 | 2026-06-07 | app |
|
medium | true |
|
🚂 Steam Headless
Lance un client Steam en mode headless dans un conteneur Linux avec un X server virtuel — permet d'utiliser Steam depuis un serveur distant, d'automatiser des téléchargements, ou de coupler avec app-sunshine pour streamer des jeux Steam via un GPU partagé.
| Métadonnée | Valeur |
|---|---|
| Site web | https://headless.doctormckay.com/ |
| GitHub | https://github.com/Steam-Headless/docker-steam-headless |
| License | MIT |
| Langage | Bash / Dockerfile |
| Étoiles | 225 ⭐ |
| Dernière MAJ | 2026-04-18 |
| Catégorie | cat-gaming |
Description
Steam Headless est un projet communautaire qui répond à un besoin simple mais tricky : faire tourner un client Steam complet dans un environnement sans écran physique (serveur headless, container Docker, VM cloud). Valve ne fournit pas officiellement de client Steam headless — Steam attend un display X11/Wayland, un D-Bus, un audio sink, et refuse de se lancer en mode purement CLI. Ce projet fournit un Dockerfile + scripts Bash qui assemblent un environnement complet : Xvfb (X virtual framebuffer), PulseAudio, D-Bus, SteamCMD, le client Steam, et divers hacks pour bypass les dialogues GUI.
Trois cas d'usage principaux : (1) Téléchargement de bibliothèque Steam : on veut backup tous ses jeux Steam sur un NAS sans devoir laisser un PC allumé. (2) Steam + Sunshine : on stream via app-sunshine depuis un serveur headless, et Steam tourne à l'intérieur d'un container. Le GPU est partagé entre Sunshine et le jeu via le GPU passthrough ou la virtualisation. (3) CI/CD pour jeux Steam : pour des projets qui ont un build/deploy automatisé de leur jeu sur Steam (indé), ou des runners pour le modding.
Le projet n'est pas officiel Valve et dépend des hacks internes de Steam (utilisation de xvfb-run, xdotool pour simuler des clicks, xdg-open, etc.). Valve casse régulièrement la compatibilité (sessions Steam Guard, mises à jour de la binaire, intégration Proton). Le tag contested: true reflète ce risque : le projet est utile mais fragile.
Limites connues : pas de support multi-GPU propre (1 GPU = 1 instance), performances légèrement dégradées vs client natif (overhead Xvfb), mises à jour Steam imposent souvent un rebuild de l'image, certains jeux anti-cheat refusent le mode headless. Pour un usage stable : viser les jeux sans anti-cheat (solo, indie, simulation) ; pour les jeux compétitifs, préférer un client natif sur un PC physique.
Installation
Docker Compose (méthode recommandée)
# docker-compose.yml
version: '3.8'
services:
steam-headless:
build:
context: https://github.com/Steam-Headless/docker-steam-headless.git
dockerfile: Dockerfile
container_name: steam-headless
restart: unless-stopped
network_mode: host # nécessaire pour le streaming
environment:
- DISPLAY=:0
- PUID=1000
- PGID=1000
- TZ=Europe/Paris
- STEAM_USER=mon_compte_steam
- STEAM_PASS=*** # voir note
volumes:
- ./config:/config
- ./library:/home/steam/Steam
- /etc/localtime:/etc/localtime:ro
devices:
- /dev/dri:/dev/dri # Intel/AMD GPU
# runtime: nvidia # décommenter pour GPU NVIDIA
⚠️ Sécurité Steam Guard : éviter de mettre le mot de passe en variable d'environnement. Préférer
steamcmd +login mon_userpuis suivre la procédure Steam Guard interactivement au premier lancement (cache le token ensuite).
Avec GPU NVIDIA
services:
steam-headless:
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=all
# ... reste identique
Installation manuelle (sans Docker)
# Installer Xvfb, SteamCMD, dépendances
sudo apt install -y xvfb xdotool x11-utils pulseaudio dbus-x11
mkdir -p ~/steam-headless
cd ~/steam-headless
# Télécharger SteamCMD
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
# Lancer Steam dans Xvfb
xvfb-run -a -s "-screen 0 1280x720x24" ./steamcmd.sh +login mon_user +quit
Configuration
- Authentification : premier lancement interactif requis pour le Steam Guard (code email). Ensuite, le token est mis en cache.
- Téléchargements automatiques : Steam Headless peut être couplé à un script qui installe les jeux par ID Steam (
steamcmd +app_update <app_id> validate). - Bibliothèque partagée : mapper
/home/steam/Steam/steamappssur un volume NFS ou SMB pour servir la même bibliothèque à plusieurs containers. - Audio : PulseAudio configuré pour rediriger vers null sink (pas de son en headless) ou vers un client réseau (PulseAudio over TCP).
- Lancement de jeux :
steam -applaunch <app_id>viaxvfb-run. Pour les jeux Windows : Proton activé par défaut. - Sunshine integration : ajouter Sunshine dans le même compose file, partager
/home/steam/.steam, configurer Sunshine pour streamer la session X.
Alternatives
Open Source
- app-sunshine — Pour le game streaming, pas le téléchargement Steam.
- app-games-on-whales — Approche conteneurisée plus complète (Sunshine + audio + Steam intégrés).
- SteamCMD (Valve officiel) — CLI pur pour serveurs de jeux dédiés, pas pour client Steam.
- heroic-games-launcher (self-hosted) — Launchers alternatifs GOG/Epic/Amazon, parfois couplés à Steam.
- steam-library-manager (legacy) — Gérer la bibliothèque Steam hors-ligne.
- Nilesoft Steam Manager — Fork Proton pour installation propre.
Propriétaires
- Steam client officiel (Valve) — Mode GUI standard, ne tourne pas headless.
- GeForce NOW, Xbox Cloud Gaming — Cloud gaming SaaS, pas self-hosted.
- Boosteroid, Shadow PC — Offres cloud PC, pas open source.
Sécurité
- Compte Steam : un compte « dédié » au headless est recommandé. Ne pas utiliser son compte principal si on stocke ses identifiants dans un compose file.
- Steam Guard 2FA : obligatoire depuis 2015 pour la plupart des opérations. Activer Steam Mobile Authenticator pour ne pas dépendre de l'email.
- Anti-cheat : EAC/BattlEye/VAC détectent les environments conteneurisés/headless. Jouer à des jeux anti-cheat en headless peut entraîner un ban — vérifier les CGU de chaque jeu.
- Docker socket : ne JAMAIS monter
/var/run/docker.sockdans le container Steam Headless (escalade de privilèges triviale). - Mises à jour : les breaking changes Valve sont fréquents (1-3x/an). Prévoir une procédure de rebuild + test.
- GPU passthrough : si VM, le passthrough PCI d'un GPU est très efficace mais nécessite IOMMU + isolation ACPI. Bien documenter.
- HTTPS Sunshine : si couplé à app-sunshine, la surface d'attaque augmente (2 services exposés). Penser à un VPN (app-vpn).
Ressources
Pages Liées
- cat-gaming — Catégorie parente
- app-sunshine — Game streaming couplé
- app-games-on-whales — Stack conteneurisée complète
- app-pterodactyl — Panel pour serveurs SteamCMD
- app-linuxgsm — CLI pour serveurs de jeux
- recettes-docker-compose — Templates
- securisation-home-lab — Anti-cheat et bans