« Gowstream » : différence entre les versions
Aucun résumé des modifications |
|||
| Ligne 164 : | Ligne 164 : | ||
= convertir les gamelist.xml en metadata.txt = | = convertir les gamelist.xml en metadata.txt = | ||
Pour passer de ROMM à Pegasus : [https://pegasus-frontend.org/tools/convert/ lien] | Pour passer de ROMM à Pegasus : [https://pegasus-frontend.org/tools/convert/ lien] | ||
Commande pour corriger tous les XML en cas de "parse error" : | |||
# find <font color =blue>/mnt/Media/Media/Emulation</font> -name gamelist.xml -exec perl -0pi -e 's/&(?!(amp|lt|gt|quot|apos);)/&/g' {} \; | |||
= Moonlight Wev Stream = | = Moonlight Wev Stream = | ||
[https://github.com/MrCreativ3001/moonlight-web-stream Source] | [https://github.com/MrCreativ3001/moonlight-web-stream Source] | ||
Version du 8 mars 2026 à 15:28
LXC Debian
Prérequis
- LXC avec Privilèges et Nesting
Installation
Virtual devices support
Depuis le serveur :
# vi /etc/udev/rules.d/85-wolf-virtual-inputs.rules
# Allows Wolf to acces /dev/uinput (only needed for joypad support)
KERNEL=="uinput", SUBSYSTEM=="misc", MODE="0660", GROUP="input", OPTIONS+="static_node=uinput", TAG+="uaccess"
# Allows Wolf to access /dev/uhid (only needed for DualSense emulation)
KERNEL=="uhid", GROUP="input", MODE="0660", TAG+="uaccess"
# Joypads
KERNEL=="hidraw*", ATTRS{name}=="Wolf PS5 (virtual) pad", GROUP="input", MODE="0660", ENV{ID_SEAT}="seat9"
SUBSYSTEMS=="input", ATTRS{name}=="Wolf X-Box One (virtual) pad", MODE="0660", ENV{ID_SEAT}="seat9"
SUBSYSTEMS=="input", ATTRS{name}=="Wolf PS5 (virtual) pad", MODE="0660", ENV{ID_SEAT}="seat9"
SUBSYSTEMS=="input", ATTRS{name}=="Wolf gamepad (virtual) motion sensors", MODE="0660", ENV{ID_SEAT}="seat9"
SUBSYSTEMS=="input", ATTRS{name}=="Wolf Nintendo (virtual) pad", MODE="0660", ENV{ID_SEAT}="seat9"
On redémarre le serveur ou l'on charge la configuration avec la commande :
# udevadm control --reload-rules && udevadm trigger
NVidia
Après création du conteneur, depuis le serveur :
# vi /etc/pve/lxc/100.conf
... dev0: /dev/uinput dev1: /dev/uhid dev2: /dev/nvidia0 dev3: /dev/nvidiactl dev4: /dev/nvidia-modeset dev5: /dev/nvidia-uvm dev6: /dev/nvidia-uvm-tools dev7: /dev/nvidia-caps/nvidia-cap1 dev8: /dev/nvidia-caps/nvidia-cap2 lxc.cgroup2.devices.allow: a lxc.cap.drop: lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir lxc.mount.entry: /run/udev mnt/udev none bind,optional,create=dir lxc.mount.entry: /dev mnt/dev none bind,optional,create=dir
On démarre le LXC, ensuite depuis le LXC :
# apt update && apt upgrade
On installe le pilote NVidia (référence), exemple :
# bash /opt/nvidia-driver/NVIDIA-Linux-x86_64-590.48.01.run --no-kernel-module # bash /opt/nvidia-driver/nvidia-patch/patch.sh # bash /opt/nvidia-driver/nvidia-patch/patch-fbc.sh
On installe docker et docker-compose :
# apt install docker.io docker-compose-plugin curl
On install le docker NVidia :
# cd /opt/ # curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile | docker build -t gow/nvidia-driver:latest -f - --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) . # docker create --rm --mount source=nvidia-driver-vol,destination=/usr/nvidia gow/nvidia-driver:latest sh
On installe le conteneur de GOW :
# mkdir /opt/gow # cd /opt/gow/ # vi docker-compose.yml
version: "3"
services:
wolf:
image: ghcr.io/games-on-whales/wolf:stable
environment:
- NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol
#- WOLF_RENDER_NODE=/dev/dri/renderD12X ##pour multiGPU
volumes:
- /etc/wolf/:/etc/wolf:rw
- /var/run/docker.sock:/var/run/docker.sock:rw
- /mnt/udev:/run/udev:rw
- /mnt/dev:/dev:rw
- nvidia-driver-vol:/usr/nvidia:rw
devices:
- /dev/dri
- /dev/uinput
- /dev/uhid
- /dev/nvidia-uvm
- /dev/nvidia-uvm-tools
- /dev/nvidia-caps/nvidia-cap1
- /dev/nvidia-caps/nvidia-cap2
- /dev/nvidiactl
- /dev/nvidia0
- /dev/nvidia-modeset
device_cgroup_rules:
- 'c 13:* rmw'
network_mode: host
restart: unless-stopped
volumes:
nvidia-driver-vol:
external: true
# docker compose up -d
Autoriser client
Lors de la première tentative de connexion d'un client il faut rentrer le pin dans un lien web pour l'autoriser, depuis le LXC :
# docker ps
Exemple :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5e43d2fc724 ghcr.io/games-on-whales/pulseaudio:master "/entrypoint.sh" 29 minutes ago Up 29 minutes 4713/tcp WolfPulseAudio c581ab5d8827 ghcr.io/games-on-whales/wolf:stable "/entrypoint.sh" 29 minutes ago Up 29 minutes opt-wolf-1
# docker logs opt-wolf-1
... ... Insert pin at http://192.168.1.123:47989/pin/#EXEMPLE ...
Configuration
Par défaut :
WOLF_CFG_FILE=/etc/wolf/cfg/config.toml
# vi /etc/wolf/cfg/config.toml
Monter un dossier dans une app
Exemple avec Pegasus : (source)
# vi /etc/wolf/cfg/config.toml
Modifier :
[[profiles.apps]]
icon_png_path = 'https://games-on-whales.github.io/wildlife/apps/pegasus/assets/icon.png'
start_virtual_compositor = true
title = 'Pegasus'
[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 = [ 'RUN_SWAY=1', 'GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*' ]
image = 'ghcr.io/games-on-whales/pegasus:edge'
mounts = []
name = 'WolfPegasus'
ports = []
type = 'docker'
Par, exemple :
...
devices = []
env = [ 'RUN_SWAY=1', 'GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*' ]
image = 'ghcr.io/games-on-whales/pegasus:edge'
mounts = [
"/mnt/Emulation:/assets/romm:ro" # exemple de compatibilite avec ROMM
]
name = 'WolfPegasus'
ports = []
...
On redémarre le conteneur :
# docker restart opt-wolf-1
Importer un thème dans Pegasus
# cd /etc/wolf/profile-data/user/WolfPegasus/.config/pegasus-frontend/themes/
Exemple avec "gameOS" (normalement déjà présent..) :
# wget https://github.com/PlayingKarrde/gameOS/archive/master.zip # unzip master.zip
convertir les gamelist.xml en metadata.txt
Pour passer de ROMM à Pegasus : lien
Commande pour corriger tous les XML en cas de "parse error" :
# find /mnt/Media/Media/Emulation -name gamelist.xml -exec perl -0pi -e 's/&(?!(amp|lt|gt|quot|apos);)/&/g' {} \;
Moonlight Wev Stream
Docker
# mkdir /opt/moonlightwebstream # cd /opt/moonlightwebstream # vi docker-compose.yml
services:
moonlight-web:
image: mrcreativ3001/moonlight-web-stream:latest
container_name: moonlight-web
restart: unless-stopped
ports:
- "8080:8080"
- "40000-40100:40000-40100/udp"
volumes:
- /opt/moonlightwebstream/server:/moonlight-web/server
# docker compose up -d
Configuration
# vi /opt/moonlightwebstream/server/config.json
Auhtentification
Au minimum renseigner les champs suivant :
...
"username": "un_utilisateur",
"credential": "un_mot_de_passe"
...
vhost
server {
listen 443 ssl http2;
server_name moonlight.tondomaine.com;
ssl_certificate /etc/letsencrypt/live/moonlight.tondomaine.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/moonlight.tondomaine.com/privkey.pem;
location /api/host/stream {
proxy_pass http://192.168.123:8080/api/host/stream;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 86400;
}
location / {
proxy_pass http://192.168.1.123:8080/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_read_timeout 86400;
}
}