Запуск VR на NixOS требует понимания взаимодействия между OpenXR-рантаймами, композиторами и песочницей Steam. Для связки Meta Quest 3S + Steam (Proton) оптимальным решением является использование WiVRn в качестве стримера и OpenXR-рантайма, с опциональным использованием OpenComposite для обратной совместимости со старыми OpenVR-играми.
💡 Критически важно: VR-пакеты в NixOS развиваются очень быстро. Настоятельно рекомендуется использовать пакеты из ветки
nixos-unstableили оверлея nixpkgs-xr.
📦 Базовая конфигурация NixOS
Создать или обновить модуль (например, modules/vr.nix). Данная конфигурация решает две основные проблемы NixOS VR: асинхронную репроекцию (требующую CAP_SYS_NICE) и изоляцию Steam (Pressure Vessel).
{ config, lib, pkgs, ... }:
{
# 1. Загрузка модуля ядра для виртуального ввода (критично для WayVR)
boot.kernelModules = [ "uinput" ];
# 2. Добавление пользователя в необходимые группы
users.users.ponfertato.extraGroups = [ "input" "plugdev" "adbusers" ];
services.wivrn = {
enable = true;
autoStart = true;
openFirewall = true;
# Решает проблему фризов (асинхронная репроекция требует CAP_SYS_NICE)
highPriority = true;
# Автоматически пробрасывает PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1
# Это позволяет играм в песочнице Steam видеть OpenXR-рантайм WiVRn
steam = {
enable = true;
importOXRRuntimes = true;
};
# Переменные окружения для корректного захвата экрана в KDE Wayland
monadoEnvironment = {
XDG_CURRENT_DESKTOP = "KDE";
XDG_SESSION_TYPE = "wayland";
QT_QPA_PLATFORM = "wayland";
};
# Опционально: автоматический запуск WayVR из меню гарнитуры
config = {
enable = true;
json = {
application = [ pkgs.unstable.wayvr ];
};
};
};
environment.systemPackages = with pkgs.unstable; [
wayvr # Оверлей рабочего стола в VR
opencomposite # Слой совместимости OpenVR -> OpenXR
android-tools # Для ADB и проводного сопряжения при необходимости
];
}
⚠️ Решение типичных проблем
1. WayVR показывает только сквозную камеру (Pass-through)
Если WayVR запускается, но не отрисовывает интерфейс, а в логах есть ошибки uinput или OpenXR-Loader, выполнить следующие проверки:
Группа
input: Убедиться, что пользователь добавлен в группуinput(как указано в конфиге выше) и выполнена перезагрузка системы или повторный вход в сессию. Без этого WayVR не может инициализировать виртуальные устройства ввода и блокирует рендеринг UI.Порядок запуска: Запускать WayVR строго после того, как гарнитура подключена к WiVRn.
# 1. Убедиться, что сервис запущен systemctl --user status wivrn # 2. Если автоматический запуск не сработал, запустить через обёртку Steam # (это решает проблемы с доступом к сокетам NixOS FHS) steam-run wayvr --replaceОграничения iGPU: На старых интегрированных графических процессорах (например, Intel HD 530) композитинг Vulkan в WayVR может работать нестабильно. Если интерфейс не появляется, использовать встроенный SteamVR Desktop (запустить SteamVR из меню WiVRn и выбрать “Рабочий стол”).
2. Игры Steam не видят OpenXR-рантайм
Даже при включённом importOXRRuntimes = true, некоторые игры могут требовать явного указания. Если игра вылетает или запускается в плоском режиме, добавить в её параметры запуска в Steam:
PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1 %command%
Для старых игр, жёстко требующих OpenVR, использовать OpenComposite:
env XR_RUNTIME_JSON=/run/current-system/sw/share/openxr/1/opencomposite_runtime.json %command%
3. Ошибка failed to determine active runtime file path
OpenXR-загрузчик не может найти манифест. WiVRn управляет этим автоматически, но при использовании кастомных настроек следует убедиться, что файл существует:
ls -l /run/current-system/sw/share/openxr/1/openxr_wivrn.json
При использовании Home Manager можно явно создать ссылку:
xdg.configFile."openxr/1/active_runtime.json".source = "${pkgs.unstable.wivrn}/share/openxr/1/openxr_wivrn.json";
🔄 Процесс подключения (Quest 3S)
- Включить Режим разработчика в приложении Meta Horizon.
- Подключить гарнитуру по USB-C. Разрешить отладку в окне гарнитуры.
- Установить APK WiVRn (скачать последний релиз с GitHub):
adb install WiVRn-vX.Y.Z.apk - Отключить USB. Убедиться, что ПК и гарнитура находятся в одной сети Wi-Fi (желательно 5 ГГц).
- Запустить приложение WiVRn на гарнитуре. Оно автоматически найдёт ПК через Avahi (mDNS).
- В меню гарнитуры выбрать запуск WayVR (или SteamVR, если WayVR не отображается).