Calculate Container Games

Updated 11 Avril 2021

Steam Link

Introduction

Calculate Container Games est un conteneur permettant d'utiliser Steam sur un [Calculate Scratch Server] (cls). Il est possible d'utiliser [Steam Link] (https://support.steampowered.com/kb_article.php?ref=8082-YJBN-9141) sur un système Android/iOS, AppleTV, Raspberry Pi, Samsung Smart TV, ou un client [Steam] (https://old.calculate-linux.org/packages/games-util/steam-launcher) pour jouer aux jeux Steam en mode streaming. Calculate Container Games permet de faire tourner Steam à une résolution d'écran non prise en charge, ou sur un système sans écran connecté, pour profiter des capacités inutilisées de votre serveur domestique.

Configuration de l'hôte

Installez le micrologiciel permettant la prise en charge complète de la carte vidéo :

emerge -a sys-kernel/linux-firmware

Spécifiez "host" comme type de système pour prendre en charge l'exécution des conteneurs dans un environnement graphique :

/var/calculate/ini.env

[container]
type=host

Mettez à jour les paramètres du système et redémarrez l'ordinateur hôte :

cl-setup-system

reboot

Installation et configuration de Calculate Container Games

Préparer un conteneur LXC

Installez Calculate Container Games et configurez-le comme expliqué dans le manuel. Le nom de la distribution serait CCG et le nom du conteneur, games~.

Réglages vidéo

Configurez votre carte vidéo avec cl-setup-video. Pour obtenir la liste des pilotes pris en charge, veuillez lancer :

cl-setup-video --video list
Video driver:
  [default]      Auto *
  [radeon]       AMD Radeon (radeon)
  [amdgpu]       AMD AMDGPU (amdgpu)
  [modesetting]  Framebuffer device (modesetting)
  [intel]        Intel (intel)
  [nouveau]      Nvidia Nouveau (nouveau)

Par exemple, pour sélectionner AMDGPU~ et 1920x1080~~, il suffit de lancer :

cl-setup-video --video amdgpu -X 1920x1080

Ajouter un utilisateur

Ajoutez l'utilisateur guest~ dans le conteneur, configurez son profil et ses paramètres de connexion automatique :

lxc-attach games

useradd --groups audio,input,video guest

cl-desktop guest

cl-setup-session -A guest

Vous aurez besoin d'un accès physique ou à distance au serveur avec un moniteur pour l'installation initiale de Steam. Pour activer l'accès VNC à distance, définissez un mot de passe pour l'utilisateur guest :

su guest -c "x11vnc -storepasswd"

Enter VNC password: 
Verify password:    
Write password to /home/guest/.vnc/passwd?  [y]/n y
Password written to: /home/guest/.vnc/passwd

Maintenant, le serveur VNC démarrera en même temps que le serveur Xorg.

Redémarrez le conteneur :

exit

lxc-stop -r games

Configurer le pilote propriétaire Nvidia

Installation et configuration

Contrairement aux pilotes open source, le pilote Nvidia doit être installé à la fois sur l'hôte et dans le conteneur, et ce, avec la même version. Vous devez également lier le répertoire contenant le code source du noyau sur l'ordinateur hôte pour compiler le pilote dans le conteneur, et autoriser la modification des périphériques 195 char pour que le pilote fonctionne correctement.

Installez et configurez le pilote Nvidia sur le système hôte :

emerge -a x11-drivers/nvidia-drivers

cl-setup-video --video nvidia

Redémarrez l'hôte et vérifiez si le module Nvidia est bien chargé :

lsmod | grep nvidia
nvidia_drm             53248  5
nvidia_modeset       1175552  9 nvidia_drm
nvidia              33525760  374 nvidia_modeset
drm_kms_helper        200704  1 nvidia_drm
drm                   462848  8 drm_kms_helper,nvidia_drm
i2c_core               49152  4 drm_kms_helper,nvidia,i2c_piix4,drm

Ajoutez l'accès à la carte vidéo et activez le code source du noyau dans le conteneur en décommentant deux lignes dans le fichier de configuration de ce dernier :

/var/calculate/lxc/games/config

# Nvidia driver support
lxc.cgroup.devices.allow = c 195:* rwm
lxc.mount.entry = /usr/src usr/src none bind,create=dir

Arrêtez le conteneur, puis relancez :

lxc-stop games

lxc-start games

Installez et configurez le pilote Nvidia dans le conteneur avec une résolution de 1920x1080 :

lxc-attach games

cl-update --sync-only

emerge -a x11-drivers/nvidia-drivers

cl-setup-video --video nvidia -X 1920x1080

exit

Mise à jour

Pour mettre à jour les pilotes Nvidia ou le noyau, mettez d'abord à jour le noyau sur l'hôte, puis le pilote graphique :

cl-update --sync-only

emerge -a sys-kernel/calculate-sources x11-drivers/nvidia-drivers

Redémarrez le conteneur. Arrêtez pour activer les sources du noyau :

lxc-stop games

lxc-start games

Mettez à jour le pilote Nvidia dans le conteneur :

lxc-attach games

cl-update --sync-only

emerge -a x11-drivers/nvidia-drivers

exit

Définir une résolution spécifique

Si votre moniteur ne prend pas en charge la résolution que vous souhaitez utiliser, vous pouvez la préciser dans le fichier de configuration Xorg. Dans les exemples ci-dessous, la résolution est Full HD (1920x1080~).

Nvidia

Si vous êtes utilisateur de Nvidia, décommentez les lignes suivantes :

/etc/X11/xorg.conf.d/force-resolution.conf
# Nvidia settings
Section "Screen"
    Identifier "Monitor"
    Option "UseEDID" "true"
    Option "CustomEDID" "DFP-0:/usr/share/edid/1920x1080.bin"
EndSection

Intel et AMD

Si vous êtes un utilisateur AMD ou Intel, indiquez le port auquel le moniteur est connecté :

head /sys/class/drm/card0-*/status
==> /sys/class/drm/card0-DP-1/status <==
connected

==> /sys/class/drm/card0-DP-2/status <==
disconnected

==> /sys/class/drm/card0-HDMI-A-1/status <==
disconnected

==> /sys/class/drm/card0-HDMI-A-2/status <==
disconnected

==> /sys/class/drm/card0-HDMI-A-3/status <==
disconnected

Décommentez les lignes suivantes, en remplaçant Monitor-DVI-I-0 par votre valeur (Monitor-DP-1 dans l'exemple ci-dessus) :

/etc/X11/xorg.conf.d/force-resolution.conf
# Intel, AMDGPU settings
Section "Monitor"
  Identifier "StandardMonitor"
  ModeLine "1920x1080"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
EndSection
Section "Device"
  Identifier "Video"
  Option "Monitor-DVI-I-0" "StandardMonitor"
EndSection

Configuration Xorg sans écran

Si aucun écran n'est connecté, Steam ne reconnaîtra pas les résolutions prises en charge et n'exécutera aucun jeu.

Nvidia

Avec Nvidia, vous pouvez résoudre ce problème avec les moyens logiciels

/etc/X11/xorg.conf.d/force-resolution.conf
# Nvidia displayless
Section "Device"
    Identifier "Video"
    Option "ConnectedMonitor" "DFP-0"
EndSection

Intel et AMD

Si vous souhaitez utiliser des graphiques Intel ou AMD sans perte de performance, la seule solution possible est une solution matérielle. N'hésitez pas à suivre ces [instructions] (https://rumorscity.com/2013/12/06/how-to-create-dummy-plugs-for-your-graphics-cards/). Ou alors utilisez un émulateur HDMI, comme montré ci-dessous :

Émulateur HDMI 4K

Se connecter à une session graphique dans le conteneur

Pour accéder au conteneur, vous pouvez utiliser le moniteur connecté au serveur, ou vous connecter à distance via VNC, par exemple avec Remmina. Pour vous connecter, définissez VNC comme protocole et 192.168.0.10 comme IP du conteneur :

Client VNC Remmina

La première fois que vous démarrez le conteneur avec le compte utilisateur configuré guest, il installera automatiquement Steam sur le réseau :

Télécharger Steam

Une fois que l'installation est terminée, Steam sera lancé en mode Big Picture :

Identification sur Steam

Lancer un jeu

Pour diffuser des jeux à partir du serveur, le client et le serveur doivent être sur un même réseau. S'ils ne sont pas sur un même réseau, ils peuvent être combinés en un seul via [VPN] (wireguard).

Pour connecter Android OS à une instance de Steam en cours d'exécution, utilisez le client [Steam Link] (https://store.steampowered.com/steamlink/about/) :

Steam Link pour Android

Malheureusement, Steam Link ne peut pas être utilisé sous Linux. À la place, vous pouvez installer Steam, vous connecter avec le même compte puis vous connecter au serveur en sélectionnant Transmission pour utiliser sa puissance de traitement :

Steam

Pour installer Steam sur votre système Calculate Linux, exécutez la commande suivante :

emerge -a games-util/steam-launcher

Dépannage

Clignotement de l'écran

Il arrive que l'écran clignote sur Steam Link si vous avez une carte graphique Nvidia. Pour corriger ce problème, quittez Steam et exécutez NVIDIA X Server Settings. Dans les paramètres OpenGL, désactivez les options Sync to VBlank et Allow Flipping :

Désactiver la synchronisation Nvidia

Ouvrez ensuite Steam dans le menu.

Graphismes de mauvaise qualité

La qualité de l'image diffusée sur le réseau peut être considérablement altérée. Certes, cela peut être dû à des problèmes de performance du réseau, mais aussi à la détection automatique de la vitesse du réseau faite par Steam, ce qui peut l'amener à réduire le transfert à 3 Mbit/s. Pour résoudre ce problème, il convient de fixer une vitesse minimale. Par exemple, une vitesse de 10 à 15 Mbit/s est tout à fait suffisante pour des émissions en Full HD. Vous pouvez régler cela dans Steam Link ou dans Steam sur le serveur, en sélectionnant Paramètres -> Jeu à distance -> Paramètres client avancés -> Limite de bande passante -> 15Mbps~ :

Limite de bande passante pour Steam

Configurer votre contrôleur Steam

Il se peut que vous rencontriez des problèmes en essayant de connecter le contrôleur Steam à un appareil Android avec un adaptateur USB. Dans ce cas, utilisez une connexion Bluetooth. Il faudra peut-être mettre à jour le microprogramme du contrôleur. Pour plus de détails, voir [ici] (https://support.steampowered.com/kb_article.php?ref=7728-QESJ-4420&l).

Contrôleur Steam

Vous devrez également activer la fonction Xbox dans Steam. Pour ce faire, allez dans le menu Paramètres, puis dans les paramètres du contrôleur pour activer les paramètres personnalisés pour xbox :

Activer la prise en charge de la Xbox