VapoR#

VapoR is an implementation of an OpenVR runtime on top of OpenXR. It allows playing SteamVR/OpenVR games without using SteamVR.

VapoR has been shown to work better than xrizer with certain games, most notably “Blade & Sorcery” and “Derail Valley”.

Installation#

Install vapor-openvr-gitAUR (nightly) from the AUR.

Afterwards, if using WiVRn, VapoR can be selected as the OpenVR compatibility library through the WiVRn dashboard.

If using the system profile, go into the ≡ menu → “Preferences”, and change “OpenVR compatibility” to “VapoR”.

If you are using development profiles, edit your profile and change the “OpenVR Module Type” to “VapoR”.

Currently, VapoR does not offer any tagged releases, one must compile it manually.

VapoR can be compiled manually through the following commands:

git clone https://github.com/micheal65536/VapoR.git
cd VapoR
cmake -B build
cmake --build build

After compiling, the vrclient.so library will be located under build/src/vrclient.so.

To use VapoR, one must set up the correct OpenVR runtime directory structure. This can be done automatically by using sudo make install in the build directory, Which will set up the required directory structure under /usr/local/lib/VapoR, along with installing device profiles and render models under /usr/local/share/VapoR.

If using WiVRn, VapoR can be selected as the OpenVR compatibility library through the WiVRn dashboard.

If for some reason the dashboard doesn’t automatically detect VapoR; a custom path can be specified instead, which should point to /usr/local/lib/VapoR.

⚠️ Warning

If you are using a headset other than a Quest, or using a Quest with ALVR, you must change the device profile in the configuration file. Otherwise input and possibly other things may not work.

Configuration#

Rebinding Controls#

TUI (easy)#

Use obah (OpenVR bindings are hard), making sure to select VapoR when saving your bindings.

Manual (harder)#

The process is mostly the same as xrizer. However, there are a few differences:

  • The custom bindings must be in a file named vapor_binding.json, not in a folder called xrizer. You cannot override this location using an environment variable.
  • You cannot have a .json files for each controller type, all bindings must be located in vapor_binding.json.

Configuration file#

VapoR offers some configuration options that can be used to set or override behavior. The list of options can be found on VapoR’s README.

VapoR loads configuration files from the following locations:

  • ${CMAKE_INSTALL_PREFIX}/share/VapoR/config.json. (${CMAKE_INSTALL_PREFIX} is /opt if installed from the aur, otherwise its /usr/local/ by default if compiled manually)
  • $XDG_CONFIG_HOME/VapoR/config.json (defaults to $HOME/.config/VapoR/config.json).
  • vapor_config.json in the current working directory.

If a configuration file is present in the current working directory, it will have priority over the configuration files in the other listed directories.

If desired, one can override the searched location, by setting the VAPOR_DIR environment variable. In which case VapoR will try to load a configuration file from $VAPOR_DIR/config.json.

Device profile#

Setting a device profile is only required if using a headset other than a Quest, or when using a Quest headset through ALVR. Currently, only the following are supported:

  • alvr_quest2, if using a Quest 2 via ALVR.
  • alvr_quest3, if using a Quest 3 via ALVR.
  • steamvr_vive, if using a HTC Vive.

Below is an example of how to set this variable in a configuration file located at $HOME/.config/VapoR/config.json

{
    "device_profile": "steamvr_vive"
}

Fixes#

VapoR also supports using certain fixes in the configuration file. The list of available fixes can be found on VapoR’s README

To use a fix, simply add it to VapoR’s configuration file, under the fixes key, like so:

{
    "fixes":{
        "flip":true
    }
}

The above configuration file will flip the image upside down (or right side up if it was already upside down).

Troubleshooting#

My game appears upside down#

See the fixes section on how to apply the “flip” fix.