xrizer#
xrizer is a reimplementation of OpenVR on top of OpenXR. This enables you to run OpenVR games through any OpenXR runtime without running SteamVR.
⚠️ WarningApplication developers: The OpenVR implementation is incomplete and contains only what’s necessary to run most games for compatibility and may omit certain information - if you plan to implement software, utilize the OpenXR API.
Installation#
ℹ️ NoteIf you’re using the Flatpak version of WiVRn, xrizer is already included, however if necessary you can get an updated version from a distribution package or GitHub by following the steps below.
Install xrizer (latest release) or xrizer-git (nightly) from the AUR.
You may also want to install the lib32- version for compatibility with 32-bit games.
Install media-libs/xrizer from Guru.
See the xrizer README for installation instructions.
Edit your profile and change the ‘OpenVR Compatibility Type’ to xrizer.
Using full body trackers#
Support for full body trackers when using Monado has been merged. Make sure you’re using at least v0.4 or the latest nightly (see above).
Fixing VRChat gestures on Index controllers#
Skeletal summary has been merged. Make sure you’re using the latest nightly.
Using controllers / other devices as full-body trackers#
You can use the XRIZER_TRACKER_SERIALS environment variable, documented in the Environment Variables section of the xrizer README, to force devices to be used as full-body trackers.
You can get the serial numbers using motoc’s show subcommand, or by looking at the top of the Monado/WiVRn log.
Rebinding controls#
ℹ️ NoteChanging OpenVR bindings is currently a very manual process. This will change in the future.
The following example uses VRChat, but this pattern will work for any OpenVR game that ships with bindings and actions JSONs.
-
Locate the bindings.
For Unity games this is always in
GameName_Data/StreamingAssets/SteamVR. In the case of VRChat, it would be inPATH_TO_STEAM/steamapps/common/VRChat/VRChat_Data/StreamingAssets/SteamVR/. -
Create a folder next to the game’s executable called
xrizer.Alternatively, you can also use a different folder and point to it by running the app using the the
XRIZER_CUSTOM_BINDINGS_DIRenvironment variable. -
Make a copy of the bindings file for your controller and place it in the
xrizerfolder. Open it up and look forcontroller_type, it’s typically near the bottom of the file."controller_type" : "knuckles", -
Rename the copy you’ve made to the internal xrizer value of
controller_type, kept in lowercase, and without any underscore(s).Controller Type Filename vive_controller vivecontroller.json knuckles knuckles.json oculus_touch oculustouch.json In my case, I’ve ended up with a copy of the Valve Index’s controller bindings named
knuckles.jsonlocated inPATH_TO_STEAM/steamapps/common/VRChat/xrizer/knuckles.json. -
Going back to the location of the original bindings, open up
actions.json, which defines every possible action in the game. A popular binding is changing the microphone button to toggle gestures, which is used this as an example.In
actions.json, find the name of the desired actions."/actions/Global/in/Mic": "Toggle Microphone", //the one we want to replace "/actions/Global/in/Gesture_Toggle": "Gesture Toggle", //the one we want to replace it with -
In xrizer’s copy of
knuckles.json, look foractions/Global/in/Micand replace it withGesture_Toggle:{ "inputs" : { "click" : { "output" : "/actions/global/in/Gesture_Toggle" } }, "mode" : "button", "path" : "/user/hand/left/input/a" },
And that’s it! xrizer will automatically pick up these files as long as they’re placed and named correctly, and load them instead of the game’s provided ones.
If encountering issues, look in the xrizer logs (located under ~/.local/state/xrizer/xrizer.txt).