IT-инфраструктура • инструкции • практикаПоиск по сайту

Серверы и системное администрирование

Найти материал →

Как настроить игровой стриминг с домашнего сервера на любое устройство

Как превратить домашний сервер в игровой стриминг на любое устройство в доме

Игровой компьютер не всегда должен стоять рядом с телевизором или рабочим местом. Если мощный ПК уже используется как домашний сервер для хранения файлов, фильмов и резервных копий, его видеокарта может приносить пользу и после переезда в шкаф. Один из наиболее удобных сценариев - игровой стриминг с ПК на телевизор, Steam Deck, ноутбук или другое устройство в локальной сети.

В моём случае компьютер с Ryzen 7 5800X3D и производительной видеокартой постепенно перестал использоваться для игр напрямую. Вместо этого он стал домашним сервером, который большую часть времени занимался раздачей медиаконтента. Чтобы вернуть игровому железу прежнюю нагрузку, я настроил передачу игр по сети, но отказался от классической связки Sunshine и Moonlight.

Почему Sunshine оказался не лучшим вариантом

Sunshine - сервер протокола Moonlight, который появился как развитие NVIDIA GameStream. Принцип работы напоминает высокоскоростной удалённый рабочий стол: видеокарта захватывает изображение, кодирует его и отправляет клиентскому приложению.

На обычном игровом ПК это решение практически не требует компромиссов. Однако сервер в шкафу работает без подключённого монитора. Для Sunshine пришлось бы использовать HDMI-заглушку, имитирующую дисплей. Кроме того, все пользователи фактически подключались бы к одной графической сессии, а Steam и связанные с ним компоненты пришлось бы устанавливать непосредственно на хостовую систему.

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

Альтернативой стал Wolf из проекта Games on Whales. Он позволяет организовать стриминг игр на любое устройство через виртуальные графические сессии и Docker-контейнеры.

Как работает Wolf

Wolf не захватывает изображение уже существующего рабочего стола, а создаёт виртуальный дисплей под параметры конкретного клиента. Например, при подключении Steam Deck можно запустить сессию с разрешением 1280×800 и частотой 90 Гц. HDMI-заглушка для этого не нужна.

Каждое подключение получает собственный контейнер. Он запускается при обращении клиента и удаляется после завершения сеанса. Благодаря этому на хосте не остаются временные процессы и конфигурации. Несколько пользователей могут подключаться одновременно, разделяя ресурсы видеокарты.

Для клиента всё выглядит привычно: Wolf совместим с Moonlight и воспринимается как обычный GameStream-сервер. Сопряжение выполняется стандартным способом - через PIN-код.

В состав Games on Whales входят сам Wolf и готовые образы для Steam, Lutris, RetroArch и обычного рабочего стола. Контейнеры создаются автоматически через проброшенный Docker socket, а клавиатура, мышь и виртуальные геймпады подключаются с помощью uinput на стороне хоста.

У такого решения есть важный недостаток: Wolf получает практически полный контроль над системой. Ему нужны docker.sock и доступ на запись ко всему `/dev`, поэтому о строгой изоляции говорить нельзя. Для домашнего сервера, не опубликованного напрямую в интернете, такой компромисс может быть приемлемым, но его необходимо учитывать заранее.

Установка на Arch Linux

Моя конфигурация включает Arch Linux, Ryzen 7 5800X3D, RTX 4070 Ti и Docker. Основная часть стека описывается одним Compose-файлом. Образ Wolf лучше фиксировать по digest, а не использовать плавающий тег `stable`. В таком случае контейнер не обновится неожиданно, а смену версии можно выполнять вручную после проверки совместимости.

Доступ к устройствам ввода предоставляется правилом `c 13:* rmw`, открывающим работу с `/dev/input/*`. Заранее перечислить конкретные устройства невозможно: виртуальные контроллеры Wolf создаёт уже после запуска контейнера через uinput. По этой же причине требуется проброс `/run/udev`, иначе события появления устройств не попадут внутрь игровых сессий.

На хостовой системе должны быть загружены модули `uinput` и `uhid`. Их можно добавить в отдельный файл внутри `/etc/modules-load.d/`, чтобы они подключались автоматически после перезагрузки.

В Compose также используется внешний volume `nvidia-driver-vol`. Он должен существовать до запуска стека, поскольку Wolf ожидает, что драйвер NVIDIA будет доступен внутри создаваемых контейнеров.

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

После первого старта Wolf создаёт файл `/etc/wolf/cfg/config.toml`. Базовые параметры обычно уже работоспособны, но для Steam-сессии полезно включить `RUN_GAMESCOPE=1`.

По умолчанию окружение запускается в оконном менеджере sway. Gamescope лучше подходит для полноэкранных игр: он предсказуемее работает с разрешением, частотой обновления и переключением между приложением и интерфейсом Steam.

Игровую библиотеку также имеет смысл вынести в отдельный volume или примонтировать каталог с хоста. В противном случае при удалении контейнера исчезнут скачанные игры, а их повторная загрузка быстро сведёт на нет преимущества контейнерной архитектуры. При сохранении библиотеки пересоздание сессии не влияет на установленные проекты и пользовательские данные.

Владельцам видеокарт AMD и Intel настройка обычно проще: графические устройства пробрасываются через `/dev/dri`, и многие компоненты работают практически сразу. С NVIDIA ситуация сложнее из-за необходимости синхронизировать версию драйвера хоста и содержимое драйверного volume.

Проблема NVIDIA и автоматическое восстановление

Официальный способ подготовки NVIDIA-драйвера предполагает создание специального Docker volume с файлами, извлечёнными из текущего драйвера. После обновления системы, например через `pacman -Syu`, версия драйвера на хосте меняется, а содержимое volume остаётся прежним. В результате Wolf может перестать запускать игровые контейнеры или стриминг завершится сразу после подключения.

Ручная пересборка volume после каждого обновления неудобна, поэтому разумно автоматизировать этот процесс. Скрипт или systemd-unit может сравнивать установленную версию драйвера с метаданными volume и пересоздавать его при обнаружении изменений. После этого стек Wolf запускается уже с актуальными библиотеками.

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

Клиенты и практический опыт

Для подключения подходят официальные клиенты Moonlight на телевизорах, Steam Deck, Windows, Linux, macOS, Android и других платформах. Поэтому сценарий "как настроить игровой стриминг дома" сводится не к установке отдельной игры на каждое устройство, а к подготовке одного мощного сервера и удобных клиентских приложений.

На телевизоре особенно заметна польза от такой схемы: компьютер можно оставить в техническом помещении, а изображение и управление передавать по Ethernet или стабильной беспроводной сети. Steam Deck позволяет продолжить игру в другой комнате, а ноутбук превращается в лёгкий терминал для запуска проектов, требовательных к графике.

Качество зависит от локальной сети. Для разрешения 1080p обычно достаточно хорошего Wi-Fi 5 или Wi-Fi 6, но проводное подключение предпочтительнее. При переходе к 4K важны не только пропускная способность, но и задержка, возможности аппаратного кодирования и стабильность соединения.

В итоге Wolf подходит тем, кому нужен сервер для игрового стриминга дома с несколькими клиентами, виртуальными дисплеями и изолированными сессиями. Он сложнее Sunshine, зато лучше соответствует серверной архитектуре: не требует физического монитора, поддерживает контейнеры и позволяет запускать отдельные игровые окружения для разных устройств. Подробное описание этой схемы и нюансов NVIDIA можно найти в материале о настройке игрового стриминга на домашнем сервере.

Прокрутить вверх