Back to the main site

[solved] Vr games don't run in headset

Hi, I’m trying to play games that have a vr mode with my valve index, without using steam.

I have Steam and SteamVR for linux installed on my system, bug the games I want to launch in vr aren’t in my Steam library, I can’t start them with Steam directly (it says : Launching, then it stop a few second after), but it works with lutris using system Wine (5.18) or Proton (5.13) that I added to lutris.

I know vrchat from steam wich is a windows only game start with proton in vr mode without issue, so I think it should be possible and I have everything I need to start my game in vr using proton.

I saw a git repo with a custom openvr library that forward the openvr call from wine to the native linux steam vr here : https:// gitlab[dot]com/roothorick/WineOpenVR

When I launch a game with a vr mode with lutris, it launch it in normal mode and says : “no vr equipment detected, starting in pc mode”, and I have these line in the logs :

[...]
info:    OpenVR
warn:  OpenVR: Failed to locate module
[...]
XR: OpenVR Error! OpenVR failed initialization with error code VRInitError_Init_PathRegistryNotFound: "Installation path could not be located (110)"! 
[...]

I have these with proton runner or system runner (lutris runner don’t start the game).

Do steam add more library when launching a game in vr mode that the one included with proton ?

How can I add it to my wine installation/proton runner ?

Thanks in advance,
Flutter

[Edit]
So, a little update
I successfully builded WineOpenVR last night and integrated it to my wine installation.
What I need to do is :

git clone --recurse-submodules https://github.com/roothorick/WineOpenVR.git

Then I downloaded openvr from here : https://github.com/ValveSoftware/openvr/archive/v1.0.13.tar.gz and extracted it to the openvr folder that was in the git I cloned before.

then, I typed Make to build it, and I copied the files in bin32 to /usr/lib/wine/ and the files in bin64 to /usr/lib64/wine.

Now, when I run a vr game with the method recommended in the github repo, and if I have steamvr launched in linux, I have the message in the headset : “now starting Wine” forever.

So the communication between wine and steamvr seems to work, but I have new error now :

One of the games started with this :

[...]
WOVR trace: uint32_t WOVR_InitInternal2(vr::EVRInitError*, vr::EVRApplicationType, const char*) 
WOVR trace: void* WOVR_GetGenericInterface(const char*, vr::EVRInitError*) IVRSystem_019
WOVR trace: virtual void proxy_IVRSystem_019::GetDXGIOutputInfo(int32_t*) 
################################################################################

WOVR ERROR: void ID3DProxy::GetDXGIOutputInfo(int32_t*) stub!

################################################################################
WOVR trace: void WOVR_ShutdownInternal()
[...]

And every other vr game have the following logs

[...]
WOVR trace: uint32_t WOVR_InitInternal2(vr::EVRInitError*, vr::EVRApplicationType, const char*) 
WOVR trace: void* WOVR_GetGenericInterface(const char*, vr::EVRInitError*) IVRSystem_019
WOVR trace: void* WOVR_GetGenericInterface(const char*, vr::EVRInitError*) IVRChaperone_003
WOVR trace: const char* WOVR_GetVRInitErrorAsEnglishDescription(vr::EVRInitError) 
WOVR trace: const char* WOVR_GetVRInitErrorAsSymbol(vr::EVRInitError) 
WOVR trace: void* WOVR_GetGenericInterface(const char*, vr::EVRInitError*) IVRChaperoneSetup_005
WOVR trace: const char* WOVR_GetVRInitErrorAsEnglishDescription(vr::EVRInitError) 
WOVR trace: const char* WOVR_GetVRInitErrorAsSymbol(vr::EVRInitError) 
WOVR trace: void* WOVR_GetGenericInterface(const char*, vr::EVRInitError*) IVRCompositor_022
WOVR trace: const char* WOVR_GetVRInitErrorAsEnglishDescription(vr::EVRInitError) 
WOVR trace: const char* WOVR_GetVRInitErrorAsSymbol(vr::EVRInitError) 
WOVR trace: uint32_t WOVR_InitInternal2(vr::EVRInitError*, vr::EVRApplicationType, const char*) 
WOVR trace: void* WOVR_GetGenericInterface(const char*, vr::EVRInitError*) IVRSystem_019
WOVR trace: void* WOVR_GetGenericInterface(const char*, vr::EVRInitError*) IVRChaperone_003
WOVR trace: const char* WOVR_GetVRInitErrorAsEnglishDescription(vr::EVRInitError) 
WOVR trace: const char* WOVR_GetVRInitErrorAsSymbol(vr::EVRInitError) 
WOVR trace: void* WOVR_GetGenericInterface(const char*, vr::EVRInitError*) IVRChaperoneSetup_005
WOVR trace: const char* WOVR_GetVRInitErrorAsEnglishDescription(vr::EVRInitError) 
WOVR trace: const char* WOVR_GetVRInitErrorAsSymbol(vr::EVRInitError) 
WOVR trace: void* WOVR_GetGenericInterface(const char*, vr::EVRInitError*) IVRCompositor_022
WOVR trace: const char* WOVR_GetVRInitErrorAsEnglishDescription(vr::EVRInitError) 
WOVR trace: const char* WOVR_GetVRInitErrorAsSymbol(vr::EVRInitError)
[...]

Guess I’m going to search how to avoid these new error now.

Flutter~

So, I found how to do that.

First, you need to install steam, then, log in steam, and go to the games tab, select tools, and install steamvr (of course) and proton (any version seems to work, I’m on the latest)

Once this is done, just launch the game with proton using this command line : STEAM_COMPAT_DATA_PATH=~/.local/share/Steam/steamapps/compatdata/ ~/.local/share/Steam/steamapps/common/Proton\ /proton run path/to/game.exe

It will launch the game with the proton you selected, and if you wait a bit, it will display in your headset that it’s launching wine prelauncher (which is your vr game) ^^

1 Like

Once this is done, just launch the game with proton using this command line : >STEAM_COMPAT_DATA_PATH=~/.local/share/Steam/steamapps/compatdata/ ~/.local/share/Steam/steamapps/common/Proton\ /proton run path/to/game.exe

just this part alone was enough to get my skyrimvr to actually run. I cant say the game is running great yet. still learning controls.

then, I typed Make to build it

can you tell me the line you ran specifically?