Ich habe mir eine Quest 3 geholt und wollte PC-VR unter Linux ohne SteamVR. Es funktioniert — besser als erwartet.

Der Stack

  • WiVRn — Streaming-Server auf dem PC, Client-App auf der Quest. Läuft über WLAN oder USB-Kabel; ich nutze das Kabel.
  • xrizer — übersetzt für Spiele, die OpenVR sprechen (die SteamVR-API), nach OpenXR. Spiele, die nativ OpenXR sprechen, brauchen es nicht und reden direkt mit WiVRn.
  • Lutris + umu + Proton — wie bei meinen normalen Spielen.

Kein Steam, kein SteamVR, kein ALVR. Die Kette ist entweder Spiel → Proton → xrizer → WiVRn → Headset oder, bei OpenXR-Spielen, Spiel → Proton → WiVRn → Headset.

Was läuft

SpielAPIHinweise
Half-Life: AlyxOpenVR → xrizerBraucht das Startargument -vr. Texturspeicher eine Stufe unter Maximum, sonst geht der VRAM aus.
Vertigo 2OpenVR → xrizerDas erste Spiel, das ich über das Lutris-Setup zum Laufen bekommen habe.
Gunman ContractsOpenVR → xrizerLäuft einfach.
Wanderer: The Fragments of FateOpenXRBeim benutzerdefinierten Grafik-Preset bleiben — das höchste Preset lässt die GPU abstürzen.
Skydance’s BEHEMOTHOpenXRBraucht das Startargument -steam, sonst versucht es die Oculus-Lizenzprüfung und beendet sich.
Ghost Town VROpenXRDer Ton muss einmal aufs Headset geleitet werden (siehe unten).
SpaceEngineOpenVR → xrizerVR ist eine Einstellung in der Config, kein Startargument. Das Arbeitsverzeichnis muss der Spielordner sein.
Resident Evil 7OpenXR (Mod)Normales Spiel + REFramework-VR-Mod. Muss unter DX11 laufen.

Normale Spiele in VR: Resident Evil 7

REFramework lädt sich als dinput8.dll, die das Spiel selbst lädt — kein Injector nötig. Unter Linux braucht es dafür nur WINEDLLOVERRIDES=dinput8=n,b. Die openvr_api.dll der Mod löschen, dann nutzt sie OpenXR direkt zu WiVRn.

Das Spiel auf DX11 umstellen. Und die Option “force anti-aliasing” der Mod ausschalten: Die RE Engine rendert manche Effekte in halber Auflösung als Dither-Muster und braucht TAA, um das zu glätten — ohne liegt über allem ein feines Schachbrettmuster.

Standalone auf der Quest

The Simpsons: Hit & Run — ein Fan-Port, der direkt auf der Quest läuft. Die eigenen Spieldateien kommen aufs Headset. Sie müssen unverändert sein: Ist ein Mod-Launcher vorinstalliert, muss der vorher raus.

Desktop im Headset

wayvr holt meinen Linux-Desktop als schwebende Fenster ins Headset, und WiVRn startet es automatisch. Praktisch, um kurz etwas nachzusehen, ohne das Headset abzunehmen.

Zuschauen auf der Leinwand

Im Wohnzimmer kann jeder mitschauen: Sunshine auf dem PC streamt den Desktop (mit dem Spiegelfenster des Spiels) an Moonlight auf dem Wohnzimmer-PC und den Beamer.

Der Haken ist der Ton. Sunshine macht beim Streamstart sein eigenes Audiogerät zum Standard, Spiele folgen dem Standard, und im Headset ist es still. Die Lösung: den Ton des Spiels an Headset und Stream gleichzeitig leiten — WirePlumber merkt sich das pro Spiel.

Was (noch) nicht läuft

  • HITMAN 3 — braucht eine OpenVR-Funktion (GetPosesForFrame), die xrizer, OpenComposite und VapoR alle nicht implementieren. Es gibt einen experimentellen xrizer-Branch; den im Auge behalten.
  • Hogwarts Legacy über UEVR — die Mod lädt, aber es kommt nie ein Bild im Headset an. DX12 ist die Mauer.

Die Einstellungen, die zählen

  1. Prüfen, welche API ein Spiel nutzt, bevor man es einrichtet: openvr_api.dll im Spielordner heißt OpenVR (→ xrizer); eine openxr_loader.dll und kein OpenVR heißt natives OpenXR (→ kein xrizer).
  2. Den Encoder in WiVRn explizit auf nvenc stellen. Auf auto hat er einen Software-Encoder gewählt, und alles war schwarz.
  3. gamescope: false für VR-Spiele in Lutris, sonst landet das Spiel in einem verschachtelten Compositor und kommt nie im Headset an.
  4. PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES=1, damit das Spiel WiVRn aus Protons Container heraus sieht. XR_RUNTIME_JSON nicht auf einen Host-Pfad setzen.
  5. Die echte exe starten. Unreal-Spiele haben oft einen kleinen Launcher im Hauptordner; Lutris stattdessen auf ...-Win64-Shipping.exe zeigen lassen.
  6. Den Firewall-Port öffnen (9757) für WLAN. Das Headset findet den PC per mDNS und wartet dann ewig, wenn der Port blockiert ist. Über USB ist das egal.
  7. Kein Ton im Headset? Der Ton des Spiels ist auf dem Standardausgang gelandet. Einmal auf wivrn.sink verschieben (pactl move-sink-input), WirePlumber merkt es sich.
  8. Auf den VRAM achten. Ein großes Spiel plus WiVRns Encoder plus der Desktop füllen die Grafikkarte schnell; das zeigt sich als Textur-Glitches und Ruckeln, nicht als Fehlermeldung.
  9. Automatisches Hand-Tracking ausschalten auf der Quest, sonst verschwinden die Hände, sobald sie von Controllern auf Hände umschaltet.

Auf der Liste

Blade & Sorcery, Red Matter 2, Into the Radius 2 und The Room VR sind installiert, aber noch nicht getestet.