Skip to main content

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.

  1. Aller dans Main > Flash > Syslinux Configuration.
  2. Ajouter à la toute fin de votre configuration Unraid OS :
    nvidia-drm.modeset=1

  3. 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).

  1. Ouvrir le terminal Unraid.
  2. Éditer le fichier de boot : nano /boot/config/go
  3. 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.


4. Configuration Post-Installation

A. Appairage Moonlight

  1. Lancer Moonlight sur le client (PC, TV, Tablette).
  2. Noter le code PIN affiché.
  3. Consulter les logs Docker : docker logs -f wolf
  4. Cliquer sur le lien http://IP_UNRAID:47989/pin/ID visible dans les logs et entrez le code pin a 4 chiffre demandé par l'instance Moonlight.

    image.png

  5. Ça vous ouvre une page web qui demande de renseigner le PIN pour déverrouiller Moonlight.

    image.png

À 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.

  1. Fermez Big Picture.
  2. Dans Steam, allez dans Paramètres > Stockage.
  3. Ajouter un lecteur > Remonter à  /Home > Sélectionner le dossier /games-unraid.
  4. 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)