
Der Folgende Text habe ich von Claude zusammenfassen lassen, wie das Problem mit SteamVR auf Linux gelöst wurde. Anfang des Jahres dachte ich, dass SteamVR auf Linux nicht funktioniert und meinte nur ok, wird wohl nicht supportet. Die SteamVR Anwendung war gestartet aber kein Spiel ließ den Betrieb mit der Steam Index zu.
Diese Woche dachte ich, ich versuche mit Claude Opus ein VR Spiel generieren, dass ich direkt mit der Steam Index betreibenben kann. Für die Machbarkeit stieß ich mit hilfe von Claude, dass ich die Einstellung für OpenXR festlegen sollte für die Steam Index und dies ginge nur über SteamVR in den Einstellungen. Und so folgt eins zum anderen.
Ausgangspunkt
Für mein VR-Projekt TerraIncognitaVR, das ich mit der Godot Engine entwickle,
wollte ich meine Valve Index unter Linux in Betrieb nehmen. Ich nutze Pop!_OS
24.04 LTS mit der neuen COSMIC-Oberfläche. Unter Windows lief die Index bei
mir problemlos, unter Linux startete SteamVR zwar, aber das gewohnte
SteamVR-Fenster mit dem Status von Brille, Controllern und Base Stations
erschien nicht. Ohne dieses Fenster fand ich auch die Einstellung nicht, mit
der man SteamVR als OpenXR-Runtime festlegt. Godot braucht genau diese
Runtime, um mit der Brille zu sprechen.
Dazu kam, dass auf meinem Rechner zwei Steam-Installationen lagen: die normale
Version aus dem Paketsystem und eine Snap-Version. In beiden war SteamVR
installiert. Es war also nicht einmal klar, welche Installation beim Start
überhaupt verwendet wurde.
Prüfen
Zuerst habe ich herausgefunden, welche Steam-Programme installiert sind:
Das Ergebnis waren /usr/games/steam (die normale
Version) und /snap/bin/steam (die Snap-Version). Die
Snap-Version läuft in einer Sandbox und macht bei VR häufig Probleme, deshalb
habe ich mich für die normale Installation entschieden. Wo SteamVR genau
liegt, zeigte die Suche nach dem Startskript:
find ~ -name "vrstartup.sh" 2>/dev/null
SteamVR fand sich in beiden Installationen. Die normale lag nicht unter
~/.local/share/Steam, wie man es oft liest, sondern unter
~/.steam/debian-installation/.
Dann habe ich alle Steam-Instanzen beendet, nur die normale Version gestartet
und SteamVR in einem zweiten Terminal direkt aufgerufen:
~/.steam/debian-installation/steamapps/common/SteamVR/bin/vrstartup.sh
So kam die entscheidende Fehlermeldung zum Vorschein, die beim Start aus Steam
heraus unsichtbar bleibt:
This application failed to start because it could not find or load the Qt platform plugin "wayland;xcb".
Available platform plugins are: xcb.
Die Ursache: COSMIC setzt die Umgebungsvariable
QT_QPA_PLATFORM auf wayland;xcb.
Das heißt “erst Wayland versuchen, sonst X11”. Die Qt-Bibliothek, die SteamVR
mitbringt, kennt aber nur xcb und kann mit dieser
Angabe nichts anfangen. Das SteamVR-Fenster stürzte deshalb sofort beim Start
ab.
Lösung
Der Test aus dem Terminal mit der passenden Variable brachte das
SteamVR-Fenster sofort zum Vorschein:
QT_QPA_PLATFORM=xcb ~/.steam/debian-installation/steamapps/common/SteamVR/bin/vrstartup.sh
Damit es auch beim normalen Start aus Steam funktioniert, habe ich die
Variable dauerhaft eingetragen. In der Steam-Bibliothek mit Rechtsklick auf
SteamVR → Eigenschaften → Allgemein steht jetzt bei den Startoptionen:
QT_QPA_PLATFORM=xcb %command%
Seitdem startet SteamVR über den normalen Startknopf. Brille, Controller und
Base Stations werden grün angezeigt. Im SteamVR-Fenster unter den
Einstellungen (nach dem Einblenden der erweiterten Einstellungen) habe ich
SteamVR als OpenXR-Runtime festgelegt. Ob das geklappt hat, zeigt dieser
Befehl:
readlink -f ~/.config/openxr/1/active_runtime.json
Er muss auf die Datei steamxr_linux64.json in der
normalen SteamVR-Installation zeigen, nicht in den Snap-Ordner.
Zum Schluss habe ich ein kleines Godot-Testprojekt gestartet, das den
OpenXR-Status direkt in der Brille anzeigt. Der Boden erscheint, Kopf- und
Handbewegungen werden genau übertragen, und jeder Tastendruck an den
Controllern kommt an. Damit ist klar: Die Valve Index läuft unter Pop!_OS
24.04 mit SteamVR und Godot. Der Weg zum eigentlichen Prototyp ist frei.