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).