150 lines
7.8 KiB
Markdown
150 lines
7.8 KiB
Markdown
---
|
|
title: Steam Headless
|
|
created: 2026-06-07
|
|
updated: 2026-06-07
|
|
type: app
|
|
tags: [catalogue, gaming, steam, headless, docker, bash, game-streaming, library]
|
|
confidence: medium
|
|
contested: true
|
|
sources:
|
|
- https://selfh.st/apps/?tag=Gaming
|
|
- https://github.com/Steam-Headless/docker-steam-headless
|
|
- https://headless.doctormckay.com/
|
|
---
|
|
|
|
# 🚂 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\|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)
|
|
|
|
```yaml
|
|
# 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_user` puis suivre la procédure Steam Guard interactivement au premier lancement (cache le token ensuite).
|
|
|
|
### Avec GPU NVIDIA
|
|
|
|
```yaml
|
|
services:
|
|
steam-headless:
|
|
runtime: nvidia
|
|
environment:
|
|
- NVIDIA_VISIBLE_DEVICES=all
|
|
- NVIDIA_DRIVER_CAPABILITIES=all
|
|
# ... reste identique
|
|
```
|
|
|
|
### Installation manuelle (sans Docker)
|
|
|
|
```bash
|
|
# 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/steamapps` sur 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>` via `xvfb-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.sock` dans 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
|
|
|
|
- [Site officiel](https://headless.doctormckay.com/)
|
|
- [Repository GitHub](https://github.com/Steam-Headless/docker-steam-headless)
|
|
- [Discussion Reddit (état du projet)](https://reddit.com/r/selfhosted)
|
|
- [Wiki Proton (compatibilité jeux)](https://www.protondb.com/)
|
|
|
|
## 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
|