Calculate Container Games

Обновлено 11 апреля 2021

Steam Link

Введение

Calculate Container Games - это контейнер, предназначенный для запуска Steam на сервере Calculate Scratch Server. Для запуска Steam игр можно использовать Steam Link, запущенный под Android/iOS, AppleTV, Raspberry Pi, Samsung Smart TV или Steam клиент с запуском игр в режиме трансляции. Calculate Container Games позволяет запускать Steam с неподдерживаемым разрешением монитора или на системе без подключенного монитора, задействуя простаивающие возможности вашего домашнего сервера.

Настройка хост-машины

Установите firmware для полноценной поддержки видеокарт:

emerge -a sys-kernel/linux-firmware

Укажите тип системы - "host" для поддержки запуска контейнеров с графическим окружением:

/var/calculate/ini.env

[container]
type=host

Обновите настройки системы и перезагрузите хост-машину:

cl-setup-system

reboot

Установка и настройка Calculate Container Games

Подготовка LXC-контейнера

Выполните установку контейнера Calculate Container Games, настроив его согласно инструкции, указав имя дистрибутива CCG, а имя контейнера - games.

Настройка видеодрайвера

Выполните настройку видеокарты, используя утилиту cl-setup-video. Для отображения списка поддерживаемых видеодрайверов выполните:

cl-setup-video --video list
Видео драйвер:
  [default]      Автоопределение системой *
  [radeon]       AMD Radeon (radeon)
  [amdgpu]       AMD AMDGPU (amdgpu)
  [modesetting]  Framebuffer device (modesetting)
  [intel]        Intel (intel)
  [nouveau]      Nvidia Nouveau (nouveau)

Для выбора AMDGPU и разрешения 1920x1080 выполните:

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

Добавление пользователя

Добавьте пользователя guest в контейнере, настройте его профиль и автовход:

lxc-attach games

useradd --groups audio,input,video guest

cl-desktop guest

cl-setup-session -A guest

Для начальной настройки Steam вам понадобится либо физический доступ к серверу с монитором, либо удаленный. Для включения удалённого доступа по VNC, задайте пароль доступа для пользоватля 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

При наличии пароля, VNC сервер будет запускаться вместе с Xorg сервером.

Перезагрузите контейнер:

exit

lxc-stop -r games

Настройка проприетарного драйвера Nvidia

Установка и настройка

В отличии от открытых видеодрайверов, проприетарный драйвер Nvidia необходимо установить как на хост-машину, так и в контейнер, причём одинаковую версию. Так же для сборки драйвера внутри контейнера необходимо подключить каталог с исходным кодом ядра из хост-машины, а для полноценной работы драйвера дать доступ на модификацию устройств 195 char.

Установите и настройте пакет с драйвером Nvidia на хост-машине:

emerge -a x11-drivers/nvidia-drivers

cl-setup-video --video nvidia

Перезагрузите хост-машину и убедитесь, что модуль Nvidia загружен:

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

Добавьте доступ к видеокарте и подключите исходный код ядра в контейнер, раскомментировав две строки в конфигурационном файле контейнера:

/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

Остановите контейнер и запустите его заново:

lxc-stop games

lxc-start games

Установите и настройте драйвер Nvidia в контейнере, указав разрешение 1920x1080:

lxc-attach games

cl-update --sync-only

emerge -a x11-drivers/nvidia-drivers

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

exit

Обновление

Для обновления драйверов Nvidia или ядра, обновите на хост-машине ядро, затем драйвер Nvidia:

cl-update --sync-only

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

Перезапустите контейнер с остановкой для подключения исходного кода ядра:

lxc-stop games

lxc-start games

Обновите Nvidia драйвер в контейнере:

lxc-attach games

cl-update --sync-only

emerge -a x11-drivers/nvidia-drivers

exit

Настройка произвольного разрешения

Если монитор не поддерживает разрешение, которым вы хотите транслировать изображение, то его можно будет указать через файл настроек Xorg сервера. В примерах ниже транслируемое разрешение - Full HD (1920x1080).

Видеокарта Nvidia

При использовании видеокарты Nvidia раскомментируйте следующие строки:

/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 и AMD

При использовании видеокарты AMD или Intel, определите название порта к которому подключен монитор:

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

Раскомментируйте следующие строки, указав вместо Monitor-DVI-I-0 ваш (в примере выше Monitor-DP-1):

/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

Настройка Xorg-сервера для работы без монитора

Без подключенного монитора, Steam не сможет определить поддерживаемые разрешения и не будет запускать игры.

Видеокарта Nvidia

Nvidia драйвер позволяет решить эту проблему программно: вы можете принудительно указать выход видеокарты, даже если к нему не подключен монитор. Для этого раскомментируйте следующие строки:

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

Видеокарты Intel и AMD

Решение проблемы на видеокартах Intel и AMD без потери производительности только аппаратное: можно сделать заглушку по инструкции. Либо воспользоваться эмулятором HDMI подобным этому:

HDMI emulator 4K

Подключение к графическому сеансу контейнера

Для доступа к контейеру вы можете использовать подключенный к серверу монитор, либо, используя протокол VNC, подключиться удаленно, например при помощи клиента Remmina. Для подключения укажите протокол VNC и IP адрес контейнера 192.168.0.10:

VNC клиент Remmina

При первом запуске контейнера с настроенной учётной записью пользователя guest будет выполнена автоматическая установка Steam по сети:

Steam download

После установки будет запущен Steam в режиме Big Picture:

Steam login

Запуск игр

Для трансляции игр с сервера необходимо, чтобы клиент и сервер находились в одной сети. Если же они находятся в разных сетях, то их можно объединить в одну, используя VPN.

Для подключения ОС Android к запущенному Steam используйте клиент Steam Link:

Steam Link for Android

К сожалению, версии Steam Link под Linux нет. Вместо этого вы можете установить Steam, залогиниться той же учётной записью и подключиться к серверу, выбрав Трансляция, для использования его вычислительной мощности:

Steam

Для установки Steam в Calculate Linux Desktop выполните:

emerge -a games-util/steam-launcher

Возможные проблемы

Моргание экрана

В некоторых случаях при трансяции изображения в Steam Link на видеокартах Nvidia может появляться моргание экрана. Чтобы исправить это, выйдите из Steam и запустите NVIDIA X Server Settings. В настройках OpenGL выключите опции Sync to VBlank и Allow Flipping:

Nvidia disable sync

После этого снова запустите Steam из меню.

Изображение плохого качества

Может случиться, что качество транслируемого по сети изображения может сильно ухудшиться. Это может быть связано не только с проблемой работы сети, но и с автоопределением скорости сети в Steam, из-за чего он может занизить передачу до 3 Мбит/сек. Для решения этой проблемы укажите фиксированную минимально достаточную скорость. Например для трансляции Full HD вам вполне хватит скорости 10-15 Мбит/сек. Эти настройки можно выполнить как в Steam Link, так и в Steam, запущенном на сервере, перейдя в Настройки -> Remote Play -> Расширенные настройки клиента -> Предельная пропускная способность и выбрав 15 Мбит/с:

Предельная пропускная способность Steam

Настройка Steam-контроллера

Могут возникнуть сложности подключения Steam контроллера к Android через USB адаптер. В таком слуае для полключения используйте Bluetooth соединение. Возможно для этого может потребоваться обновить прошивку контроллера. Подробная инструкция доступна на сайте.

Steam Controller

Так же в Steam понадобится включить поддержку Xbox контроллера. Это можно сделать перейдя в меню "Настройки" -> "Настройки контроллера" и включить "Пользовательская настройка контроллера xbox":

Включение поддержки Xbox