Skip to main content

Installation Wolf (Multi-User Cloud Gaming)

Objectif : Faire tourner plusieurs instances de Steam indépendantes sur un 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" (CRITIQUE)

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. Sur la ligne append, ajouter à la toute fin (avec un espace avant) :
    nvidia-drm.modeset=1
  3. Redémarrer Unraid.

C. Persistance des Manettes (Fichier Go)

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.

Fichier docker-compose.yml :

services:
  wolf:
    image: ghcr.io/games-on-whales/wolf:stable
    container_name: wolf
    restart: unless-stopped
    network_mode: host
    privileged: true
    environment:
      - PUID=1000
      - PGID=1000
      - NVIDIA_DRIVER_CAPABILITIES=all
      - NVIDIA_VISIBLE_DEVICES=all
      - WOLF_LOG_LEVEL=INFO

    volumes:
      # Socket Docker (Vital pour que Wolf lance les jeux)
      - /var/run/docker.sock:/var/run/docker.sock:rw
      # Config et Data
      - /mnt/user/appdata/wolf/config:/etc/wolf
      - /mnt/user/appdata/wolf/data:/var/lib/wolf
      # Sockets X11
      - /tmp/.X11-unix:/tmp/.X11-unix:rw
      # Périphériques (Vital pour les manettes)
      - /dev/:/dev/:rw
      - /run/udev:/run/udev:rw
      # Montage du dossier Jeux
      - /mnt/cache/Games:/games:rw

    runtime: nvidia
    # Règle vitale pour autoriser la création des manettes virtuelles
    device_cgroup_rules:
      - 'c 13:* rmw'

3. Configuration des Utilisateurs (Config.toml)

Fichier cible : /mnt/user/appdata/wolf/config/cfg/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 du dossier perso
mkdir -p /mnt/user/appdata/wolf/steam-data-larry

# 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

B. Le contenu du config.toml

Ajouter les blocs suivants à la fin du fichier. Notez l'ajout de la variable pour le clavier FR.

# --- Utilisateur 1 : Larry ---
[[profiles.apps]]
    title = 'Steam-Larry'
    start_virtual_compositor = true
    icon_png_path = 'https://games-on-whales.github.io/wildlife/apps/steam/assets/icon.png'

    [profiles.apps.runner]
        type = 'docker'
        image = 'ghcr.io/games-on-whales/steam:edge'
        name = 'Steam-Larry'
        env = [
            'PROTON_LOG=1',
            'RUN_SWAY=true',
            'GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*',
            # Clavier AZERTY (FR)
            'XKB_DEFAULT_LAYOUT=fr'
        ]
        # Montage 1 : Le dossier de jeux commun (/games)
        # Montage 2 : Le dossier de CONFIG PERSO (/home/retro/.steam) -> Isolation des sauvegardes
        mounts = [
            '/mnt/cache/Games:/games:rw',
            '/mnt/user/appdata/wolf/steam-data-larry:/home/retro/.steam:rw'
        ]
        devices = []

# --- Utilisateur 2 : Thymon ---
[[profiles.apps]]
    title = 'Steam-Thymon'
    start_virtual_compositor = true
    icon_png_path = 'https://games-on-whales.github.io/wildlife/apps/steam/assets/icon.png'

    [profiles.apps.runner]
        type = 'docker'
        image = 'ghcr.io/games-on-whales/steam:edge'
        name = 'Steam-Thymon'
        env = [
            'PROTON_LOG=1',
            'RUN_SWAY=true',
            'GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*',
            'XKB_DEFAULT_LAYOUT=fr'
        ]
        mounts = [
            '/mnt/cache/Games:/games:rw',
            '/mnt/user/appdata/wolf/steam-data-thymon:/home/retro/.steam:rw'
        ]
        devices = []

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/ visible dans les logs pour entrer le PIN.

B. Déclaration des Jeux dans Steam

Par défaut, Steam ne voit pas le disque mappé.

  1. Lancer Steam via Moonlight.
  2. Aller dans Paramètres > Stockage.
  3. Ajouter un lecteur > Remonter à la racine / > Sélectionner le dossier /games.
  4. Le définir comme lecteur par défaut (étoile).

5. Astuces & Dépannage

  • Le clavier est en QWERTY : Ajouter 'XKB_DEFAULT_LAYOUT=fr' dans la section env du fichier config.toml et redémarrer Wolf.
  • Le conteneur Steam s'ouvre et se ferme instantanément : C'est un problème de droits. Relancer la commande chown -R 1000:1000 sur le dossier de données de l'utilisateur.
  • Lag / Image figée sur FireTV : Vérifiez le câble réseau ! Wolf est très sensible aux câbles défectueux. Préférez le WiFi 5GHz si le câble est douteux.
  • Manette non détectée : Vérifiez que le fichier /boot/config/go contient bien le bloc UDEV et redémarrez le serveur.