Игровой стриминг через виртуальные машины на Proxmox
Ключевые тезисы
- Создание Windows и Linux VM на Proxmox для игрового стриминга с пробросом реальной видеокарты (GPU Passthrough)
- Использование стримингового ПО (Apollo/Sunshine + Moonlight) для игры на любом устройстве-клиенте
- Тестирование конфигурации на маломощном хосте ZimaBoard 2 с разными видеокартами
- Решение проблем с виртуальными дисплеями и сетевыми адаптерами для стабильной работы
Создание Windows VM
Настройки виртуальной машины
- Тип ОС: Windows (используется образ LTSC для экономии ресурсов)
- Тип машины:
q35 - Диск: 120+ GB с галочкой Discard (для освобождения места на хосте)
- Процессор: 4 ядра, тип host
- Оперативная память: ~12 GB
- Сетевой адаптер: E1000 (VirtIO на текущей версии Proxmox вызывает проблемы со стримингом)
- Агент QEMU: обязательно включить
Установка и настройка Windows
- При установке загрузить драйвер VirtIO SCSI с CD-образа (
vioscsi). - Установить VirtIO Guest Tools для корректной работы в QEMU.
Включить Remote Desktop для удалённого доступа (так как у видеокарты нет физического монитора).- Настроить автоматический вход в систему (через
netplwizи правку реестра) для запуска игр без ручного логина.
Создание Linux VM (CachyOS)
Настройки виртуальной машины
- Критически важно: тип машины q35 и UEFI BIOS (для PCIe Passthrough).
- Диск: 100+ GB с Discard.
- Процессор: 4 ядра типа host.
- Оперативная память: ~12 GB.
- Сетевой адаптер: VirtIO (работает корректно в Linux).
- В образе CachyOS может потребоваться отключить Secure Boot в BIOS для загрузки.
Настройка Linux для стриминга
- Установить Sunshine (аналог Apollo для Linux) и драйверы NVIDIA.
- Настроить автозапуск Sunshine после входа в систему.
- Установить и запустить QEMU Guest Agent для получения IP-адреса.
Проброс видеокарты (GPU Passthrough)
Общие шаги для обеих VM
- В настройках оборудования VM добавить PCI-устройство — вашу видеокарту.
- Выбрать "All functions" (чтобы захватить и аудиоустройство).
- В расширенных настройках обязательно поставить галочку PCI-Express.
- Для Windows VM поставить галочку "Primary GPU" (отключит виртуальную графику).
Решение проблем с драйверами на хосте
- Для карт AMD (например, RX 5700 XT) нужно заблокировать (
blacklist) драйверыamdgpuиradeonна хосте Proxmox, чтобы они не занимали устройство. - Создать файл в
/etc/modprobe.d/и выполнитьupdate-initramfs -u -k all.
Решение проблемы "безголового" (headless) режима
Для Windows (Apollo)
- В настройках Apollo во вкладке Configuration → Audio/Video включить Headless Mode. Это создаст виртуальный дисплей при подключении.
Для Linux (Sunshine)
- Ядро Linux может эмулировать монитор через EDID-файл.
- Скачать нужный EDID-файл (например, для HDMI), поместить в
/usr/lib/firmware/edid/. - Определить имя HDMI-порта видеокарты (например,
card0-HDMI-A-1). - Добавить параметр
video=HDMI-A-1:edid_file=/usr/lib/firmware/edid/...в командную строку ядра (в/etc/default/limineдля Limine). - Добавить путь к EDID-файлу в
/etc/mkinitcpio.confи выполнитьmkinitcpio -P. - После перезагрузки в системе появится виртуальный монитор.
Настройка стриминга (Apollo/Sunshine + Moonlight)
- Установить Apollo (форк Sunshine с виртуальным дисплеем) на Windows или Sunshine на Linux.
- При первом запуске создать логин и пароль администратора.
- На клиентском устройстве установить Moonlight.
- Выполнить pin-pairing: Moonlight найдёт VM, покажет код, который нужно ввести в веб-интерфейсе Apollo/Sunshine.
- Для удобства можно добавить игры вручную во вкладке Applications в Apollo, указав команду запуска.
Результаты тестирования и энергопотребление
- Производительность: На слабой карте (GTX 745) игры (WRC 7, Borderlands 2) работают, но с ограничениями из-за слота PCIe x4 и нагрузки на кодирование потока. Более мощная карта (RX 5700 XT) показывает значительно лучшие результаты.
- Энергопотребление (ZimaBoard 2):
Хост в простое: ~10 Вт.
VM запущена, но без нагрузки: +3-4 Вт.
Нагрузка на GPU (стресс-тест): до ~60 Вт (близко к пределу БП).- В реальных игровых сессиях потребление было значительно ниже стресс-теста.
Выводы и рекомендации
Технология работает и позволяет играть на любом устройстве с Moonlight-клиентом.
ZimaBoard 2 с его 60W БП сильно ограничивает выбор видеокарт (подходят только маломощные или карты с внешним питанием).
Те же шаги можно повторить на любом хосте с Proxmox (или другим гипервизором на QEMU) для получения более мощной игровой станции.- Ключевые моменты для успеха: правильная настройка сети (E1000 для Windows), создание виртуального дисплея и корректный проброс GPU с отключением драйверов на хосте.