Как запустить игровой сервер?
Цель и необходимость
Если честно, то я не игроман и к играм абсолютно равнодушен, но было интересно решить вопрос с играми с инженерной точки зрения. Также меня не устраивало, что мне могут диктовать, во что, когда и как играть.
Что имеем:
Возможность запускать игры на любом устройстве через механизм Steam Remote Play. Если коротко, то вся нагрузка ложится на основной хост-компьютер, и его роль может выполнять сервер с настроенной для работы видеокартой Nvidia и запущенным Steam.
---
title: Схема работы Steam Remote Play
---
flowchart TD
subgraph A [Хост-компьютер]
A1[Игра запущена]
A2[Кодирование видео/аудио]
end
subgraph B [Домашняя сеть]
direction LR
B1[Проводное<br>или Wi-Fi соединение]
end
subgraph C [Клиент-устройство]
C1[Декодирование<br>видео/аудио]
C2[Вывод на дисплей]
C3[Ввод с контроллера]
end
A1 --> A2
A2 -->|Потоковое видео| B
B -->|Данные| C1
C1 --> C2
C3 -->|Управление| B
B -->|Ввод| A
Единственный вопрос в этой схеме: «Как запустить Steam на Linux?». Таким образом, я нашел open-source проект Steam-Headless/docker-steam-headless: A Headless Steam Docker image supporting NVIDIA GPU and accessible via Web UI.
docker-compose
Как установить драйверы Nvidia на Linux и сделать доступной видеокарту в Docker в отдельной VM Proxmox не описываю, можете найти эту информацию в соответствующей статье ниже.
Мой docker-compose.yml:
services:
steam-headless:
image: josh5/steam-headless:latest
restart: unless-stopped
shm_size: ${SHM_SIZE}
ipc: host
ulimits:
nofile:
soft: 1024
hard: 524288
cap_add:
- NET_ADMIN
- SYS_ADMIN
- SYS_NICE
security_opt:
- seccomp:unconfined
- apparmor:unconfined
runtime: nvidia
network_mode: host
hostname: ${NAME}
extra_hosts:
- "${NAME}:127.0.0.1"
environment:
# System
- TZ=${TZ}
- USER_LOCALES=${USER_LOCALES}
- DISPLAY=${DISPLAY}
# User
- PUID=${PUID}
- PGID=${PGID}
- UMASK=${UMASK}
- USER_PASSWORD=${USER_PASSWORD}
# Mode
- MODE=${MODE}
# Web UI
- WEB_UI_MODE=${WEB_UI_MODE}
- ENABLE_VNC_AUDIO=${ENABLE_VNC_AUDIO}
- PORT_NOVNC_WEB=${PORT_NOVNC_WEB}
- NEKO_NAT1TO1=${NEKO_NAT1TO1}
# Steam
- ENABLE_STEAM=${ENABLE_STEAM}
- STEAM_ARGS=${STEAM_ARGS}
# Sunshine
- ENABLE_SUNSHINE=${ENABLE_SUNSHINE}
- SUNSHINE_USER=${SUNSHINE_USER}
- SUNSHINE_PASS=${SUNSHINE_PASS}
# Xorg
- ENABLE_EVDEV_INPUTS=${ENABLE_EVDEV_INPUTS}
- FORCE_X11_DUMMY_CONFIG=${FORCE_X11_DUMMY_CONFIG}
# Nvidia specific config
- NVIDIA_DRIVER_CAPABILITIES=${NVIDIA_DRIVER_CAPABILITIES}
- NVIDIA_VISIBLE_DEVICES=${NVIDIA_VISIBLE_DEVICES}
- NVIDIA_DRIVER_VERSION=${NVIDIA_DRIVER_VERSION}
devices:
- /dev/fuse
- /dev/uinput
device_cgroup_rules:
- 'c 13:* rmw'
volumes:
- ${HOME_DIR}:/home/default/:rw
- /mnt/media/games/:/mnt/games/:rw
- ${SHARED_SOCKETS_DIR}/.X11-unix/:/tmp/.X11-unix/:rw
- ${SHARED_SOCKETS_DIR}/pulse/:/tmp/pulse/:rw
Файл-шаблон с переменными необходимо скачивать отсюда и он должен располагаться в 1 директории с docker-compose.yml. Важно помнить, что образ сначала попытается скачать драйвера с официального сайта Nvidia, а потом будет их искать в дополнительном репозитории для Flatpak.
Инструкции по запуску через docker-compose можно посмотреть также тут.
После запуска docker-compose переходим по адресу в браузере: http://<Your IP>:8083 и должны увидеть экран удаленного стола с процессом установки всех компонентов для работы.
Как играть?
Подключаем наше устройство ТВ/планшет (Android) к нашей локальной сети.
Устанавливаем на устройство Steam Link.
Подключаем джойстик к устройству.
Запускаем SteamLink и наш сервер должен быть найден этим устройством.
Где и как искать игры?
Где и как искать игры не из Steam не описываю, но говорят, на части популярных торрент-трекерах появился раздел с играми на Linux. Действия для игр не из Steam:
Возможность эффективной игры на Linux можно проверить через protondb.com
Устанавливаем на сервер игру любым доступным способом.
Добавляем игру через Steam: Games -> Add Non-Steam game to My Library -> Выбираем файл запуска с игрой.
Картинки для игр можно искать на SteamGridDB, чтобы игра была заполнена метаданными и мало чем отличалась от установленных со Steam игр.
Важно для каждой игры включить: Manage->Properties->Compatibility->Proton Hotfix. Что такое Proton от Valve можно увидеть тут.
Эффективность игры зависит от Вашего железа и архитектуры, например, у меня игры на HDD и диски проброшены внутрь VM. В планах игры переместить на SSD диски, а далее рассмотреть вопрос выделения отдельного ПК для игр.
Итог
Теперь мы можем запускать игры не только из Steam и быть автономны насколько это возможно от корпораций и их диктатуры.
Ссылки Github: