Initial vault setup

This commit is contained in:
2026-06-09 18:40:21 +02:00
commit bda02d587f
3692 changed files with 402457 additions and 0 deletions
@@ -0,0 +1,149 @@
---
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