Installation Wolf (Multi-User Cloud Gaming)
Objectif : Faire tourner plusieurs instances de Steam indépendantes sur un ou plusieur seulplusieurs 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.
A. Modifier le 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 fichier, vous supprimez tous ce qu'il y a entre :
[[profiles]]
id = 'moonlight-profile-id'
et
[[profiles]]
id = 'user'
name = 'User'
Et vous collez 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
'/mnt/user/Games:/home/retro/games-unraid:rw', → Point de montage du répertoire d'installation des jeux
'/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 chaque 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 droits.
Faire ce changement de droit après la création du compte et le reboot du Docker wolf.
3b. Variante des gestions d'utilisateurs.
Wolf UI
Wolf UI permet d'avoir un répertoire par utilisateur.
Il y a deux principaux avantages de l'utiliser :
- Lorsque vous avez beaucoup d'application, car vous pouvez les rangers par utilisateurs.
- Lorsque vous avait besoin d'utiliser le mode
co-op. Afin que deux utilisateurs puissent se connecter sur la même session pour jouer en coop locale.
Activation de Wolf UI
Faire apparaitre le menu Wolf UI dans moonlight.
Pour activer wolf UI, il faut modifier config.toml, repérez la partie :
[[profiles]]
id = 'moonlight-profile-id'
Directement dessous, collez
[[profiles.apps]]
icon_png_path = 'https://raw.githubusercontent.com/games-on-whales/wolf-ui/refs/heads/main/src/Icons/wolf_ui_icon.png'
start_virtual_compositor = true
title = 'Wolf UI'
[profiles.apps.runner]
base_create_json = '''{
"HostConfig": {
"IpcMode": "host",
"CapAdd": ["NET_RAW", "MKNOD", "NET_ADMIN", "SYS_ADMIN", "SYS_NICE"],
"Privileged": false,
"DeviceCgroupRules": ["c 13:* rmw", "c 244:* rmw"]
}
}'''
devices = []
env = [
'GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*',
'WOLF_SOCKET_PATH=/var/run/wolf/wolf.sock',
'WOLF_UI_AUTOUPDATE=False',
'LOGLEVEL=INFO'
]
image = 'ghcr.io/games-on-whales/wolf-ui:main'
mounts = [ '/var/run/wolf/wolf.sock:/var/run/wolf/wolf.sock' ]
name = 'Wolf-UI'
ports = []
type = 'docker'
Création des espaces utilisateur.
De base, dans le fichier config.toml, un utilisateur user est créé avec toutes les app activées dedans.
Vous pouvez créer un nouvel espace en rajoutant ceci :
[[profiles]]
id = 'user'
name = 'NOM_UTILISATEUR'
toutes les app de cet utilisateur doivent sous ces lignes
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/IDvisible dans les logs et entrez le code pin a 4 chiffre demandé par l'instance Moonlight. - Ça vous ouvre une page web qui demande de renseigner le PIN pour déverrouiller Moonlight.
À la première ouverture de Steam, ça installe le dépôt, puis il faut vous connecter à votre compte avec le Steam Guard.
B. Déclaration des Jeux dans Steam
Par défaut, Steam n'a pas le disque d'installation des jeux que nous avons configurés dans le fichier config.toml. Si vous laissez tel quel, il va installer les jeux dans votre répertoire appdata, et de fait ne sera pas commun à tous les utilisateurs.
- Fermez Big Picture.
- Dans Steam, allez dans Paramètres > Stockage.
- Ajouter un lecteur > Remonter à
/Home> 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)

