Calculate Container Games
Обновлено 11 апреля 2021
- Введение
- Настройка хост-машины
- Установка и настройка Calculate Container Games
- Подключение к графическому сеансу контейнера
- Запуск игр
Введение
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
. Для отображения списка поддерживаемых видеодрайверов выполните:
Видео драйвер: [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 загружен:
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 раскомментируйте следующие строки:
# Nvidia settings Section "Screen" Identifier "Monitor" Option "UseEDID" "true" Option "CustomEDID" "DFP-0:/usr/share/edid/1920x1080.bin" EndSection
Видеокарты Intel и AMD
При использовании видеокарты AMD или Intel, определите название порта к которому подключен монитор:
==> /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):
# 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 драйвер позволяет решить эту проблему программно: вы можете принудительно указать выход видеокарты, даже если к нему не подключен монитор. Для этого раскомментируйте следующие строки:
# Nvidia displayless Section "Device" Identifier "Video" Option "ConnectedMonitor" "DFP-0" EndSection
Видеокарты Intel и AMD
Решение проблемы на видеокартах Intel и AMD без потери производительности только аппаратное: можно сделать заглушку по инструкции. Либо воспользоваться эмулятором HDMI подобным этому:
Подключение к графическому сеансу контейнера
Для доступа к контейеру вы можете использовать подключенный к серверу монитор, либо, используя протокол VNC, подключиться удаленно, например при помощи клиента Remmina. Для подключения укажите протокол VNC и IP адрес контейнера 192.168.0.10:
При первом запуске контейнера с настроенной учётной записью пользователя guest будет выполнена автоматическая установка Steam по сети:
После установки будет запущен Steam в режиме Big Picture:
Запуск игр
Для трансляции игр с сервера необходимо, чтобы клиент и сервер находились в одной сети. Если же они находятся в разных сетях, то их можно объединить в одну, используя VPN.
Для подключения ОС Android к запущенному Steam используйте клиент Steam Link:
К сожалению, версии Steam Link под Linux нет. Вместо этого вы можете установить 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:
После этого снова запустите Steam из меню.
Изображение плохого качества
Может случиться, что качество транслируемого по сети изображения может сильно ухудшиться. Это может быть связано не только с проблемой работы сети, но и с автоопределением скорости сети в Steam, из-за чего он может занизить передачу до 3 Мбит/сек. Для решения этой проблемы укажите фиксированную минимально достаточную скорость. Например для трансляции Full HD вам вполне хватит скорости 10-15 Мбит/сек. Эти настройки можно выполнить как в Steam Link, так и в Steam, запущенном на сервере, перейдя в Настройки -> Remote Play -> Расширенные настройки клиента -> Предельная пропускная способность и выбрав 15 Мбит/с:
Настройка Steam-контроллера
Могут возникнуть сложности подключения Steam контроллера к Android через USB адаптер. В таком слуае для полключения используйте Bluetooth соединение. Возможно для этого может потребоваться обновить прошивку контроллера. Подробная инструкция доступна на сайте.
Так же в Steam понадобится включить поддержку Xbox контроллера. Это можно сделать перейдя в меню "Настройки" -> "Настройки контроллера" и включить "Пользовательская настройка контроллера xbox":