Pimax

Pimax P2 HMDs #

At the moment, only headsets from the P2 series (the 5k and 8k headsets with various suffixes) are supported. The Crystal, Crystal light, and Crystal super use different protocols that have not been reverse engineered yet.

Setup #

Kernel patches #

For the most convenient use, a few kernel patches are required. One to mark the display as non-desktop (can also be manually done without a patch on Xorg), and one to ignore the EDID checksum errors a lot of these headsets feature (alternatively, overriding the edid with a fixed version also works).

udev rules #

To allow monado to access to the Pimax HID device, a udev rule is required.

SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="0101", MODE="0660", TAG+="uaccess", TAG+="udev-acl"
KERNEL=="hidraw*", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="0101", MODE="0660", TAG+="uaccess", TAG+="udev-acl"

Distortion meshes #

Since calculating the lens distortion isn’t implemented yet, precalculated distortion meshes which have been exported from pimax’s runtime are used instead. The meshes are available here:

The tools to dump meshes yourself are available here (requires a windows install that can drive the headset):

Monado #

Use monado from the branch pimax from the repository https://gitlab.freedesktop.org/Coreforge/monado/. Make sure to use the lighthouse driver steamvr_lh, other lighthouse drivers are currently not supported with the pimax driver.

At this point, you should have a working headset.

Configuration options #

The headset should work without changing any of these options, but they may improve the experience or stability (e.g. if the headset only works on the first launch of monado after powering the headset), or might be needed for less standard setups.

Name default value description
PIMAX_MESHES_PATH ~/.config/pimax/meshes The directory distortion meshes are loaded from
PIMAX_MESH_NAME automatically determined The file name the distortion meshes are loaded from
PIMAX_CHECK_INIT 0 If enabled, display unlock commands are only sent if the HMD hasn’t been unlocked (displays enabled) yet
PIMAX_REBOOT 0 If enabled, reboots the HMD on startup, like PiTool does
PIMAX_REBOOT_DELAY_MS 5000 How long to wait after sending the reboot command
PIMAX_HID_RETRY_COUNT 3 How many times to retry opening the pimax HID device before giving up
PIMAX_HID_RETRY_DELAY_MS 1000 How long to wait between attempts
PIMAX_OFFS_X_R PIMAX_OFFS_X_G PIMAX_OFFS_X_R 0.0 for all Shifts one channel of the distortion mesh sideways by the given amount of pixels. This is an attempt at reducing the coloured edges especially visible on the 5K XR due to monado currently not supporting subpixel shading.
PIMAX_IPD_V0 PIMAX_IPD_V1 0.0 Vertical offsets (in meters) added to the view poses, somewhat similar to the display offsets in PiTool
PIMAX_IPD_H0 PIMAX_IPD_H1 0.0 Horizontal offsets (in meters) added to the view poses and IPD (for the distortion correction), somewhat similar to the display offsets in PiTool

The display (or IPD in the option name) offsets can also be adjusted in the debug GUI, following the same procedure as for PiTool (values are not saved in the debug GUI).