Installation Wolf (Multi-User Cloud Gaming)
Objectif : Faire tourner plusieurs instances de Steam indépendantes sur un ou plusieur seul GPU, accessibles via Moonlight avec support manettes et 4K/60fps.
1. Prérequis Système (Unraid)
A. Plugin Nvidia
Installer le plugin "Nvidia Driver" (par ich777) depuis les Community Applications.
B. Activation du "Kernel Mode Setting" (⚠️)
Wolf a besoin de contrôler l'affichage au niveau du noyau pour créer les sessions graphiques. Sans ça, écran noir.
- Aller dans Main > Flash > Syslinux Configuration.
- Ajouter à la toute fin de votre configuration
Unraid OS:
nvidia-drm.modeset=1 - Redémarrer Unraid.
C. Persistance des Manettes.
Pour que Unraid recrée les règles de manettes virtuelles à chaque démarrage (sinon elles disparaissent au reboot).
- Ouvrir le terminal Unraid.
- Éditer le fichier de boot :
nano /boot/config/go - Ajouter ce bloc à la fin du fichier :
# --- Wolf : Support Manettes Virtuelles ---
# 1. Permissions uinput
chmod 666 /dev/uinput
# 2. Règles UDEV
cat << 'EOF' > /etc/udev/rules.d/85-wolf-virtual-inputs.rules
KERNEL=="uinput", SUBSYSTEM=="misc", MODE="0660", GROUP="input", OPTIONS+="static_node=uinput"
KERNEL=="uhid", TAG+="uaccess"
SUBSYSTEMS=="input", ATTRS{id/vendor}=="ab00", MODE="0660", GROUP="input", ENV{ID_SEAT}="seat9"
SUBSYSTEMS=="input", ATTRS{name}=="Wolf X-Box One (virtual) pad", MODE="0660", GROUP="input"
SUBSYSTEMS=="input", ATTRS{name}=="Wolf PS5 (virtual) pad", MODE="0660", GROUP="input"
SUBSYSTEMS=="input", ATTRS{name}=="Wolf gamepad (virtual) motion sensors", MODE="0660", GROUP="input"
SUBSYSTEMS=="input", ATTRS{name}=="Wolf Nintendo (virtual) pad", MODE="0660", GROUP="input"
EOF
# 3. Recharger les règles
udevadm control --reload-rules && udevadm trigger
2. Installation de Wolf (Docker Compose)
Utiliser le plugin Docker Compose Manager. Créer une stack nommée wolf.
Puis éditer le Stack et cliquez Compose File
Fichier docker-compose.yml :
services:
wolf:
image: ghcr.io/games-on-whales/wolf:stable
container_name: wolf
restart: unless-stopped
# Le mode host est impératif pour Moonlight (découverte réseau)
network_mode: host
privileged: true
environment:
- PUID=1000
- PGID=1000
- NVIDIA_DRIVER_CAPABILITIES=all
- NVIDIA_VISIBLE_DEVICES=all
- WOLF_LOG_LEVEL=INFO
volumes:
# CRITIQUE : Permet à Wolf de piloter le Docker d'Unraid pour lancer les jeux
- /var/run/docker.sock:/var/run/docker.sock:rw
# Configuration et données persistantes
- /mnt/user/appdata/wolf/config:/etc/wolf
- /mnt/user/appdata/wolf/data:/var/lib/wolf
# Dossier où Xorg et Wayland stockent leurs sockets (utile pour la communication inter-processus)
- /tmp/.X11-unix:/tmp/.X11-unix:rw
# Indispensable pour créer des périphériques
- /dev/:/dev/:rw
# Indispensable pour que Linux détecte l'insertion de la manette
- /run/udev:/run/udev:rw
# Configuration spécifique pour le plugin Nvidia d'Unraid
runtime: nvidia
device_cgroup_rules:
- 'c 13:* rmw'
Enregistrez et cliquez update stack puis compose up
3. Configuration des Utilisateurs (Config.toml)
A. Préparation des dossiers (Permissions)
Avant d'ajouter un utilisateur, créer son dossier spécifique et fixer les droits :
Création d'un répertoire utilisateur :
mkdir -p /mnt/user/appdata/wolf/<NOM_DU_COMPTE>
Application des droits (Utilisateur 1000) :
chown -R 1000:1000 /mnt/user/appdata/wolf
chmod -R 777 /mnt/user/appdata/wolf
Droits sur le dossier des jeux :
chown -R 1000:1000 /mnt/cache/Games
chmod -R 777 /mnt/cache/Games
Pensez bien à faire ça à chaque nouvelle création d'un utilisateur. Sinon votre Moonlight se fermera à chaque lancement du Steam concerné, à cause d'un manque de droits.
Faire ce changement de droit après la création du compte et le reboot du Docker wolf.
B.A. LeModifier contenu dule config.toml
Fichier cible :
nano /mnt/user/appdata/wolf/config/cfg/config.tomlÀ titre perso, pour le moment, j'ai complètement épuré l'affichage dans Moonlight.
Mais il est possible de laisser l'app Wolf UI qui permet en gros de choisir un utilisateur et dedans d'avoir les app de cet utilisateur.
Ça peut être pratique, mais là je vous montre simplement au plus simple pour Steam.
C'est tout à fait modifiable à vos souhaits plus tard. Je pourrais vous accompagner si besoin ☺️
Dans ce fichierfichier, vous supprimez tous ce qu'il y a entre :
[[profiles]]
id = 'moonlight-profile-id'
et
[[profiles]]
id = 'user'
name = 'User'
Et vous collercollez la conf de votre premier utilisateur :
Remplacer bien les quatre <NOM_DU_COMPTE>
Remplacer <url-image-png> par une image PNG. Dimension idéale width=112px height=150px ->→ Ça permettra à votre utilisateur de reconnaitre son compte dans Moonlight.
# --- Utilisateur 1 : <NOM_DU_COMPTE> ---
[[profiles.apps]]
icon_png_path = '<url-image-png>'
start_virtual_compositor = true
title = '<NOM_DU_COMPTE>'
[profiles.apps.runner]
base_create_json = '''{
"HostConfig": {
"IpcMode": "host",
"CapAdd": ["SYS_ADMIN", "SYS_NICE", "SYS_PTRACE", "NET_RAW", "MKNOD", "NET_ADMIN"],
"SecurityOpt": ["seccomp=unconfined", "apparmor=unconfined"],
"Ulimits": [{"Name":"nofile", "Hard":10240, "Soft":10240}],
"Privileged": false,
"DeviceCgroupRules": ["c 13:* rmw", "c 244:* rmw"]
}
}
'''
devices = []
env = [
'PROTON_LOG=1',
'RUN_SWAY=true',
'GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*',
'XKB_DEFAULT_LAYOUT=fr'
]
image = 'ghcr.io/games-on-whales/steam:edge'
mounts = [
'/mnt/user/Games:/home/retro/games-unraid:rw',
'/mnt/user/appdata/wolf/<NOM_DU_COMPTE>:/home/retro/.steam:rw'
]
name = '<NOM_DU_COMPTE>'
ports = []
type = 'docker'
'XKB_DEFAULT_LAYOUT=fr' → Permet d'avoir le clavier français en AZERTY
On'/mnt/user/Games:/home/retro/games-unraid:rw', peut→ aussi faire une configuration qui isole tout, c'est-à-dire que personne ne voit les SteamPoint de personne.montage Maisdu çarépertoire impliqued'installation qu'unedes instancejeux
'/mnt/user/appdata/wolf/<NOM_DU_COMPTE>:/home/retro/.steam:rw' → Permet de rendre persistant l'installation de Steam. Sinon un nouveau Steam est installé pour autantchaque Moonlight du même utilisateur.
B. Préparation des dossiers (Permissions)
Avant d'ajouter un utilisateur, créer son dossier spécifique et fixer les droits :
Création d'un répertoire utilisateur :
mkdir -p /mnt/user/appdata/wolf/<NOM_DU_COMPTE>
Application des droits (Utilisateur 1000) :
chown -R 1000:1000 /mnt/user/appdata/wolf
chmod -R 777 /mnt/user/appdata/wolf
Droits sur le dossier des jeux :
chown -R 1000:1000 /mnt/cache/Games
chmod -R 777 /mnt/cache/Games
Pensez bien à faire ça à chaque nouvelle création d'un utilisateur. Sinon votre Moonlight se fermera à chaque lancement du Steam concerné, à cause d'un manque de Moonlight installé.Donc vu que j'ai 1 tel / 1 tablette / 2 TV, je n'ai pas envie que ça installe quatre instances rien que pour mon compte.droits.MaisFaire sachezce quechangement c'estde possible.droit après la création du compte et le reboot du Docker wolf.
4. Configuration Post-Installation
A. Appairage Moonlight
- Lancer Moonlight sur le client (PC, TV, Tablette).
- Noter le code PIN affiché.
- Consulter les logs Docker :
docker logs -f wolf - Cliquer sur le lien
http://IP_UNRAID:47989/pin/visible dans les logs pour entrer le PIN. - Ça vous ouvre une page web qui demande de renseigner le PIN pour dévérouiller le Moonlight.
À la première ouverture de Steam ça installe le dépot puis il faut vous connecter à votre compte avec le Steam Guard.
B. Déclaration des Jeux dans Steam
Par défaut, Steam ne voit pas le disque mappé. Si vous ne fite rien il va installer les jeux dans votre répertoire appdata et il ne sera pas commun à tous compte.
- Lancer Steam via Moonlight.
- Aller dans Paramètres > Stockage.
- Ajouter un lecteur > Remonter à la racine
/> Sélectionner le dossier/games-unraid. - Le définir comme lecteur par défaut (étoile).
Il faudra faire ça pour chaque compte Steam.
5. Accès à Distance (Ouverture de Ports)
Wolf ne gère pas l'UPnP. Pour jouer depuis l'extérieur, vous avez deux options :
Option A : VPN (Recommandé)
Utilisez Tailscale ou Wireguard (Plugins Unraid). C'est plus sécurisé et ne nécessite aucune ouverture de port.
Plus chiant côté FireTV ou autre :)
Option B : Ouverture de Ports (NAT)
Si vous n'utilisez pas de VPN, redirigez les ports suivants sur votre routeur vers l'IP de votre serveur Unraid :
- TCP 47984 : HTTPS (Sécurité)
- TCP 47989 : HTTP (Appairage Web)
- TCP 48010 : RTSP (Initialisation du stream)
- UDP 47999 : Contrôle (Manettes)
- UDP 48100 : Flux Vidéo (RTP - Spécifique Wolf)
- UDP 48200 : Flux Audio (RTP - Spécifique Wolf)