From 71bf9be7516cdd4a3ed0e30fd6286814af4371f6 Mon Sep 17 00:00:00 2001 From: Valters Tomsons Date: Mon, 23 Dec 2024 21:09:28 +0200 Subject: [PATCH 01/82] Add section for mod manager integration with Steam/Proton --- content/docs/steamvr/mod-managers.md | 36 ++++++++++++++++++++++++++ static/images/steam_launch_vortex.png | Bin 0 -> 186101 bytes 2 files changed, 36 insertions(+) create mode 100644 content/docs/steamvr/mod-managers.md create mode 100644 static/images/steam_launch_vortex.png diff --git a/content/docs/steamvr/mod-managers.md b/content/docs/steamvr/mod-managers.md new file mode 100644 index 0000000..6834c08 --- /dev/null +++ b/content/docs/steamvr/mod-managers.md @@ -0,0 +1,36 @@ +--- +weight: 200 +title: Using Mod Managers +--- + +# Using Third-Party Mod Managers with Steam Games + +This is a guide on how to install and integrate mod managers (like Vortex, MO2, etc.) for games running in Proton. +Most of this stuff will break if you use Flatpak for any of the involved programs. + +![skyrim_vr_vortex](/images/steam_launch_vortex.png "Example usage Vortex Mod Manager integrated into Skyrim VR on Steam") + +1. Setup `Protontricks` & `Steam Metadata Editor` +2. Install your steam game & **launch it** once +3. Download your mod manager installer (Vortex, MO2 etc.) +4. Run the installer with `Protontricks Launcher`, select your game when prompted +5. Finish the installer, note the install path +6. Symlink mod manager's installation path inside prefix into the game's install path. For example: +``` +ln -s "/home/faith/.local/share/Steam/steamapps/compatdata/611670/pfx/drive_c/Program Files/Black Tree Gaming Ltd/Vo +rtex/" "/home/faith/.local/share/Steam/steamapps/common/SkyrimVR/Vortex" +``` +7. **Close Steam!** Then open Steam Metadata Editor +8. Find your game in the list, then click "Edit launch menu" +9. Click "Add New Entry" +10. In Description enter the display name (e.g. "Vortex Mod Manager") +11. Click on the "..." button in Executable field +12. File picker will appear which should be inside game's install directory. If it's not, try again or restart your computer or perform some ritual because it sometimes doesn't work properly. +13. Choose the mod manager executable (e.g. Vortex -> Vortex.exe) +14. Make sure a relative path appears in the Executable field! It won't work otherwise. (e.g. ("Vortex/Vortex.exe")) +15. Working directory should fill-in automatically +16. Close the modal window +17. Click "Save" button +18. Enjoy + +You have to install mod manager for each game seperately. \ No newline at end of file diff --git a/static/images/steam_launch_vortex.png b/static/images/steam_launch_vortex.png new file mode 100644 index 0000000000000000000000000000000000000000..634982a69c51b1df0f9620f2bea176e44554eaea GIT binary patch literal 186101 zcmZ6yWl$VZ*DVae-GaM2!6i5h?ry=I0R|1O!Gi|~7JQJv;O-XO-QC>>LV(Njy!Wl| z*7u`NSMAe3x~g}tz1H6AM60XHVW5(r!oa{_D98geVPN3aU|?WRkrCe`qSdL??>7_| zc>{MC7|j0vT(GIEn56%C+CxU)!x3a_Z)xtR55vX9BRGI)Yw*5-{{L(kzzA^)Hany3 zzsH&Ewe>yRJuT#{K~B~lZa&KP?jG-99c@{5L74x4d~M+P{Z*)76abRi-q~jzqseS? zZpBY!zcbq805&-yNHFCwgc+3?7u&HzW9?W1YpPuceuJVi%~XW`q%pB$XtBs`e$#Z{ z0XndPKgVKSym+*Jh5J|?2r+4g=rDckj-iyNstn}8@_N<@dePD5qX|8H+&cDC*Ll4S zdhL2T?Rq_hn!Js6{Zo3~`Scp9IieTz1eDTwx)pzOf4#VT#l-RPf4O{ny?m+@f982T z&V4-=Fd1z6u-+)@eVG@7Ox^X!`bIGHiMV8wUJAZ5MD%g%N-41$#X@Squ7zdxhWi zc8M8gdOzB>6^hpBXGc?HZbl^A3yY%tt+B!zxFpysI7OCDSilw~n72wP;m`T(gCC33W|+>`#h2;q$*^U5&P-D^&Epzjyj6k89+mIQG5e73prNWj>+uJM~H$-nVtLx_rc z75Ynd|8%H>kK^J+^Vc2!PhT$k;kTOSL}AfD)a>qd(5&w*&ciU}ZI`jy+TUm-4Oxx5 zznNOyr)oh1*SEQ}D^a}F#pED0Mt#Ds(gX1Dg=-thgGuGHiqpL>ZB4OW&?ttD&h~Tn z%gK%Foygq8hG~-^$#}Eo);|w=?S8kJyQ`DLI@s`XOY5ByCSTnD?qCL_Z_i_Z(mv$A zkqwZF{Y`k|3G(1cqO@6Yp4_fJl)=SpLm_7%$ezizi(fbz)dl-n8WVmrCzDeS*D4D` z8m(0~qCZrIq((mb8QRb33n?DtqqzAGs>jofhY_*s7V*Z|j5u3ifAjLHIE~g_-A&Td zz_x?j*Xeh|q4%sC7)hJ7?_A6?ULA|~mAsAR#RT0T%~8Ihw0C|BdIDkN_sj3Hp1eH; zU0+kaMYX*_-+BTcn4f;AB~re^ye;N(1^vZStU#|4vv~YQnVf)jUNSTzon4olxKm>i2p8dOhgyG6ep6927sGeBGw(JgDs?ndQB{*;jgf z0KGkQEGjYod(UrX@uy)mmp2L(MRBTC!Y@~C5hfFTmxy9p5w1DJUtD?+-ebQ)!?X

f*lgfW1ys3j;wKZ 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�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

0u|mIr%5!fF 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∾J3h7nKY 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 literal 0 HcmV?d00001 From c38b5b764e244bece75d8166348f0d33b73b2ba8 Mon Sep 17 00:00:00 2001 From: Valters Tomsons Date: Tue, 24 Dec 2024 03:59:41 +0200 Subject: [PATCH 02/82] Fix some typos, tweak some points --- content/docs/steamvr/mod-managers.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/content/docs/steamvr/mod-managers.md b/content/docs/steamvr/mod-managers.md index 6834c08..bc10a54 100644 --- a/content/docs/steamvr/mod-managers.md +++ b/content/docs/steamvr/mod-managers.md @@ -8,29 +8,29 @@ title: Using Mod Managers This is a guide on how to install and integrate mod managers (like Vortex, MO2, etc.) for games running in Proton. Most of this stuff will break if you use Flatpak for any of the involved programs. -![skyrim_vr_vortex](/images/steam_launch_vortex.png "Example usage Vortex Mod Manager integrated into Skyrim VR on Steam") +![skyrim_vr_vortex](/images/steam_launch_vortex.png "Example usage: Vortex Mod Manager integrated into Skyrim VR on Steam") 1. Setup `Protontricks` & `Steam Metadata Editor` -2. Install your steam game & **launch it** once -3. Download your mod manager installer (Vortex, MO2 etc.) +2. Install your Steam game and **launch it** once +3. Download your mod manager installer (Vortex, MO2, etc.) 4. Run the installer with `Protontricks Launcher`, select your game when prompted -5. Finish the installer, note the install path +5. Finish the installer and note the installation path 6. Symlink mod manager's installation path inside prefix into the game's install path. For example: ``` ln -s "/home/faith/.local/share/Steam/steamapps/compatdata/611670/pfx/drive_c/Program Files/Black Tree Gaming Ltd/Vo rtex/" "/home/faith/.local/share/Steam/steamapps/common/SkyrimVR/Vortex" ``` 7. **Close Steam!** Then open Steam Metadata Editor -8. Find your game in the list, then click "Edit launch menu" -9. Click "Add New Entry" -10. In Description enter the display name (e.g. "Vortex Mod Manager") -11. Click on the "..." button in Executable field -12. File picker will appear which should be inside game's install directory. If it's not, try again or restart your computer or perform some ritual because it sometimes doesn't work properly. -13. Choose the mod manager executable (e.g. Vortex -> Vortex.exe) -14. Make sure a relative path appears in the Executable field! It won't work otherwise. (e.g. ("Vortex/Vortex.exe")) -15. Working directory should fill-in automatically +8. Find your game in the list, then click `Edit launch menu` +9. Click `Add New Entry` +10. In Description, enter the display name (e.g., `Vortex Mod Manager`) +11. Click on the `...` button in the Executable field +12. File picker will appear, which should be inside the game's install directory. If it's not, try again, restart your computer, or perform some ritual because it sometimes doesn't work properly. +13. Choose the mod manager executable (e.g., `Vortex/Vortex.exe`) +14. Make sure a relative path appears in the Executable field, as above! It won't work otherwise. If you see a full path `/home/faith/.local/share/steam/.../`, try deleting the entry and restarting the metadata editor. +15. The working directory should fill in automatically 16. Close the modal window -17. Click "Save" button +17. Click `Save` button 18. Enjoy -You have to install mod manager for each game seperately. \ No newline at end of file +You have to install mod manager for each game separately. \ No newline at end of file From d6a3becf4d939ad6dbcbfedcd1352228e10fd12b Mon Sep 17 00:00:00 2001 From: Valters Tomsons Date: Tue, 24 Dec 2024 04:00:43 +0200 Subject: [PATCH 03/82] Add subheading for instruction start --- content/docs/steamvr/mod-managers.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/content/docs/steamvr/mod-managers.md b/content/docs/steamvr/mod-managers.md index bc10a54..2c5b60d 100644 --- a/content/docs/steamvr/mod-managers.md +++ b/content/docs/steamvr/mod-managers.md @@ -6,10 +6,13 @@ title: Using Mod Managers # Using Third-Party Mod Managers with Steam Games This is a guide on how to install and integrate mod managers (like Vortex, MO2, etc.) for games running in Proton. -Most of this stuff will break if you use Flatpak for any of the involved programs. + +**Note:** Most of this stuff will break if you use Flatpak for any of the involved programs. ![skyrim_vr_vortex](/images/steam_launch_vortex.png "Example usage: Vortex Mod Manager integrated into Skyrim VR on Steam") +## Instructions + 1. Setup `Protontricks` & `Steam Metadata Editor` 2. Install your Steam game and **launch it** once 3. Download your mod manager installer (Vortex, MO2, etc.) From 9ef4b5beb0973eb5642055fc6b35cb62c4bcaafa Mon Sep 17 00:00:00 2001 From: Valters Tomsons Date: Tue, 24 Dec 2024 04:05:43 +0200 Subject: [PATCH 04/82] Tweak instructions --- content/docs/steamvr/mod-managers.md | 41 +++++++++++++++------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/content/docs/steamvr/mod-managers.md b/content/docs/steamvr/mod-managers.md index 2c5b60d..6c08d65 100644 --- a/content/docs/steamvr/mod-managers.md +++ b/content/docs/steamvr/mod-managers.md @@ -11,29 +11,32 @@ This is a guide on how to install and integrate mod managers (like Vortex, MO2, ![skyrim_vr_vortex](/images/steam_launch_vortex.png "Example usage: Vortex Mod Manager integrated into Skyrim VR on Steam") -## Instructions +## Pre-Requisites +- https://github.com/Matoking/protontricks +- https://github.com/tralph3/Steam-Metadata-Editor +- Launch your game at least once before! -1. Setup `Protontricks` & `Steam Metadata Editor` -2. Install your Steam game and **launch it** once -3. Download your mod manager installer (Vortex, MO2, etc.) -4. Run the installer with `Protontricks Launcher`, select your game when prompted -5. Finish the installer and note the installation path -6. Symlink mod manager's installation path inside prefix into the game's install path. For example: +## Procedure + +1. Download your mod manager installer (Vortex, MO2, etc.) +2. Run the installer with `Protontricks Launcher`, select your game prefix when prompted +3. Finish the installer and note the installation path +4. Symlink mod manager's installation path inside prefix into the game's install path. For example: ``` ln -s "/home/faith/.local/share/Steam/steamapps/compatdata/611670/pfx/drive_c/Program Files/Black Tree Gaming Ltd/Vo rtex/" "/home/faith/.local/share/Steam/steamapps/common/SkyrimVR/Vortex" ``` -7. **Close Steam!** Then open Steam Metadata Editor -8. Find your game in the list, then click `Edit launch menu` -9. Click `Add New Entry` -10. In Description, enter the display name (e.g., `Vortex Mod Manager`) -11. Click on the `...` button in the Executable field -12. File picker will appear, which should be inside the game's install directory. If it's not, try again, restart your computer, or perform some ritual because it sometimes doesn't work properly. -13. Choose the mod manager executable (e.g., `Vortex/Vortex.exe`) -14. Make sure a relative path appears in the Executable field, as above! It won't work otherwise. If you see a full path `/home/faith/.local/share/steam/.../`, try deleting the entry and restarting the metadata editor. -15. The working directory should fill in automatically -16. Close the modal window -17. Click `Save` button -18. Enjoy +5. **Close Steam!** Then open Steam Metadata Editor +6. Find your game in the list, then click `Edit launch menu` +7. Click `Add New Entry` +8. In Description, enter the display name (e.g., `Vortex Mod Manager`) +9. Click on the `...` button in the Executable field +10. File picker will appear, which should be inside the game's install directory. If it's not, try again, restart your computer, or perform some ritual because it sometimes doesn't work properly. +11. Choose the mod manager executable (e.g., `Vortex/Vortex.exe`) +12. Make sure a relative path appears in the Executable field, as above! It won't work otherwise. If you see a full path `/home/faith/.local/share/steam/.../`, try deleting the entry and restarting the metadata editor. +13. The working directory should fill in automatically +14. Close the modal window +15. Click `Save` button +16. Enjoy You have to install mod manager for each game separately. \ No newline at end of file From 1a8bad3d4f7a61dc569bf03617b3510437ad5ef9 Mon Sep 17 00:00:00 2001 From: Valters Tomsons Date: Wed, 25 Dec 2024 00:16:58 +0200 Subject: [PATCH 05/82] Add expanded notes --- content/docs/steamvr/mod-managers.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/content/docs/steamvr/mod-managers.md b/content/docs/steamvr/mod-managers.md index 6c08d65..e88c4f9 100644 --- a/content/docs/steamvr/mod-managers.md +++ b/content/docs/steamvr/mod-managers.md @@ -39,4 +39,8 @@ rtex/" "/home/faith/.local/share/Steam/steamapps/common/SkyrimVR/Vortex" 15. Click `Save` button 16. Enjoy -You have to install mod manager for each game separately. \ No newline at end of file +## Important notes + +* Steam might occasionally remove the custom launch entry, just follow the guide again from Step 5. +* You have to install mod managers and dependencies for each game separately. +* You can't use the Nexus Mods button `Mod Manager Download` via browser, you have to download and adds mods manually. From cb72bead7da7ba0d499715a600241b9fb13cfc9c Mon Sep 17 00:00:00 2001 From: Valters Tomsons Date: Wed, 25 Dec 2024 00:17:15 +0200 Subject: [PATCH 06/82] Add tip about redirecting game exectuables --- content/docs/steamvr/mod-managers.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/content/docs/steamvr/mod-managers.md b/content/docs/steamvr/mod-managers.md index e88c4f9..da75cff 100644 --- a/content/docs/steamvr/mod-managers.md +++ b/content/docs/steamvr/mod-managers.md @@ -44,3 +44,23 @@ rtex/" "/home/faith/.local/share/Steam/steamapps/common/SkyrimVR/Vortex" * Steam might occasionally remove the custom launch entry, just follow the guide again from Step 5. * You have to install mod managers and dependencies for each game separately. * You can't use the Nexus Mods button `Mod Manager Download` via browser, you have to download and adds mods manually. + +# Redirecting game executable from custom launchers + +It is possible to "redirect" any executable that Steam runs and launch any other executable you specify instead. This can be useful for launching Script Extender loader without having to replace any files. + +You need to set game's launch options to the following: + +``` +bash -c 'exec "${@/OriginalGame.exe/CustomLoader.exe}"' -- %command% +``` + +replacing `OriginalGame.exe` and `CustomLoader.exe` with game's executable name and your custom launcher respectively. + +Here's an example of full Fallout 4 VR launch options: + +``` +WINEDLLOVERRIDES="WinHTTP.dll=n,b;x3daudio1_7.dll=n,b" bash -c 'exec "${@/Fallout4VR.exe/f4sevr_loader.exe}"' -- %command% -forcesteamloader +``` + +Put any environment variables before `bash`, put any launch arguments for the game after `%command%`. \ No newline at end of file From 7cebcda718bfbeaded148e84d4e3147ea469a70e Mon Sep 17 00:00:00 2001 From: Valters Tomsons Date: Thu, 26 Dec 2024 19:40:24 +0200 Subject: [PATCH 07/82] Remove -forcesteamloader from example because it makes Vortex crash --- content/docs/steamvr/mod-managers.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/steamvr/mod-managers.md b/content/docs/steamvr/mod-managers.md index da75cff..4e246a4 100644 --- a/content/docs/steamvr/mod-managers.md +++ b/content/docs/steamvr/mod-managers.md @@ -60,7 +60,7 @@ replacing `OriginalGame.exe` and `CustomLoader.exe` with game's executable name Here's an example of full Fallout 4 VR launch options: ``` -WINEDLLOVERRIDES="WinHTTP.dll=n,b;x3daudio1_7.dll=n,b" bash -c 'exec "${@/Fallout4VR.exe/f4sevr_loader.exe}"' -- %command% -forcesteamloader +WINEDLLOVERRIDES="WinHTTP.dll=n,b;x3daudio1_7.dll=n,b" bash -c 'exec "${@/Fallout4VR.exe/f4sevr_loader.exe}"' -- %command% ``` -Put any environment variables before `bash`, put any launch arguments for the game after `%command%`. \ No newline at end of file +Put any environment variables before `bash`, put any launch arguments for the game after `%command%`. \ No newline at end of file From eb423e0c4467c35ca20d8cec423739c39f1f3edb Mon Sep 17 00:00:00 2001 From: Valters Tomsons Date: Thu, 26 Dec 2024 19:43:51 +0200 Subject: [PATCH 08/82] Remove trailing space --- content/docs/steamvr/mod-managers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/steamvr/mod-managers.md b/content/docs/steamvr/mod-managers.md index 4e246a4..e7a81b5 100644 --- a/content/docs/steamvr/mod-managers.md +++ b/content/docs/steamvr/mod-managers.md @@ -63,4 +63,4 @@ Here's an example of full Fallout 4 VR launch options: WINEDLLOVERRIDES="WinHTTP.dll=n,b;x3daudio1_7.dll=n,b" bash -c 'exec "${@/Fallout4VR.exe/f4sevr_loader.exe}"' -- %command% ``` -Put any environment variables before `bash`, put any launch arguments for the game after `%command%`. \ No newline at end of file +Put any environment variables before `bash`, put any launch arguments for the game after `%command%`. \ No newline at end of file From 1c735f8a20065b5fb2cbc20d4a1ce1c542abd308 Mon Sep 17 00:00:00 2001 From: Toemmsen96 Date: Mon, 30 Dec 2024 17:34:22 +0000 Subject: [PATCH 09/82] Add VR Setup on Arch with WMR and Controller tracking --- .../envision/wmr_controllers_on_arch.md | 69 ++++++++++++++++++ static/images/EnvisionXR_WMR.png | Bin 0 -> 15181 bytes .../wmr_controller_tracking_envision.png | Bin 0 -> 53384 bytes 3 files changed, 69 insertions(+) create mode 100644 content/docs/fossvr/envision/wmr_controllers_on_arch.md create mode 100644 static/images/EnvisionXR_WMR.png create mode 100644 static/images/wmr_controller_tracking_envision.png diff --git a/content/docs/fossvr/envision/wmr_controllers_on_arch.md b/content/docs/fossvr/envision/wmr_controllers_on_arch.md new file mode 100644 index 0000000..6d9aff9 --- /dev/null +++ b/content/docs/fossvr/envision/wmr_controllers_on_arch.md @@ -0,0 +1,69 @@ +--- +weight: 100 +title: WMR Controller Tracking on Arch +--- + +# Envision Installation on Arch with Controller Tracking + +## Recommendations: +- **Paru** as the Arch AUR helper +- **KDE** as the desktop environment for better compatibility with SteamVR (may not be necessary) + +### Paru: +[Paru GitHub Repository](https://github.com/Morganamilo/paru) +```bash +sudo pacman -S --needed base-devel +git clone https://aur.archlinux.org/paru.git +cd paru +makepkg -si +``` + +## Monado Vulkan Layers +These are only needed if you have an NVIDIA Card and a Nvidia Driver before 565.77.01. + +[Monado Vulkan Layers AUR](https://aur.archlinux.org/packages/monado-vulkan-layers-git) +### Paru Installation +```bash +paru -S monado-vulkan-layers-git +``` +### Normal Installation with compiling manually +```bash +git clone https://aur.archlinux.org/monado-vulkan-layers-git.git +cd monado-vulkan-layers-git +makepkg -i +``` +- -> Install dependencies and, if needed, run `makepkg -i` again. + +## Envision-XR with Paru +[Envision-XR AUR](https://aur.archlinux.org/packages/envision-xr-git) +```bash +paru -S envision-xr-git +``` + + +### Envision Setup +- Select **WMR default**. + +![WMR default](/images/EnvisionXR_WMR.png "Envision XR Screen with WMR Envision Default selected") +- Duplicate and adjust settings: + - **XR Service Repo**: + ```bash + https://gitlab.freedesktop.org/thaytan/monado + ``` + - **XR Service Branch**: + ```bash + dev-constellation-controller-tracking + ``` + ![WMR adjusted settings](/images/wmr_controller_tracking_envision.png "Repo and Branch adjusted for controller tracking") +- Save and build the profile. +- Plug in the VR headset & turn on the controllers. +- Click **Start** on Monado. +- Once ready, launch a game on Steam. + +### Important Notes: +- Do **not** close Envision before starting the game. +- If changing the game: + - Close the game. + - Leave Monado open. + - Start the new game. +- Always turn on the controllers **before** starting Envision. diff --git a/static/images/EnvisionXR_WMR.png b/static/images/EnvisionXR_WMR.png new file mode 100644 index 0000000000000000000000000000000000000000..b73828f0e00829e1e45be0bb51390b79ff19737b GIT binary patch literal 15181 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 SLXg0Qe Date: Thu, 2 Jan 2025 19:39:23 +0000 Subject: [PATCH 10/82] unity.md: downgrade ALCOM --- content/docs/vrchat/unity.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/docs/vrchat/unity.md b/content/docs/vrchat/unity.md index 6da3c52..d2bdd1e 100644 --- a/content/docs/vrchat/unity.md +++ b/content/docs/vrchat/unity.md @@ -24,7 +24,8 @@ First, take a look at this page from [the official VRChat docs](https://creators vrc-get is a native FOSS package manager written in Rust. Its GUI counterpart was formerly known as vrc-get-gui, but has been rebranded as ALCOM (***Al***ternative Creator ***Com***panion). -1. Download the [AppImage from the latest "gui" release](https://github.com/vrc-get/vrc-get/releases). Pick the file named `alcom--x86_64.AppImage`. +1. Download the [AppImage from the latest "gui" release\*](https://github.com/vrc-get/vrc-get/releases). Pick the file named `alcom--x86_64.AppImage`. + - \*Some users say the v0.16.0 and v1.0.0 releases only show a blank white GUI. If you're affected by this bug, downgrade to [v0.1.15](https://github.com/vrc-get/vrc-get/releases/tag/gui-v0.1.15) AppImage for the time being. 1. Run the AppImage. 1. In the settings tab, under Unity Hub Path, point it to your UnityHub.AppImage. 1. Create a new project and open it. From a413272aeb86b085039fb8ecbffc0c6b0d99b06c Mon Sep 17 00:00:00 2001 From: Bones Date: Wed, 8 Jan 2025 14:34:20 +0000 Subject: [PATCH 11/82] Update info for pico neo 3 --- content/docs/hardware/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index 8f17617..e5d6a1d 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -74,7 +74,7 @@ A non-comprehensive table of various VR/XR devices and the drivers that support | Quest Pro | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | | Quest 3 | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | | Pico 4 | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | -| Pico Neo 3 | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | +| Pico Neo 3 | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ❌ (Broken XR SDK) | | HTC Vive Focus 3 | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | | HTC Vive XR Elite | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | | Lynx R1 | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | From a3fd71e6ce4c23afbd393f4078e7573f320601c5 Mon Sep 17 00:00:00 2001 From: hypevhs <4498312-hypevhs@users.noreply.gitlab.com> Date: Sat, 11 Jan 2025 10:03:06 +0000 Subject: [PATCH 12/82] Envision: add plugins section --- content/docs/fossvr/envision/_index.md | 35 +++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/content/docs/fossvr/envision/_index.md b/content/docs/fossvr/envision/_index.md index b467be4..0a34daa 100644 --- a/content/docs/fossvr/envision/_index.md +++ b/content/docs/fossvr/envision/_index.md @@ -25,7 +25,7 @@ You can download the latest AppImage snapshot from [GitLab Pipelines](https://gi If you are on Arch, You can use the [AUR package](https://aur.archlinux.org/packages/envision-xr-git) `envision-xr-git` -## Getting Started +## Getting started Upon launching Envision, you will need to select a profile on the bottom of the left side bar. @@ -40,7 +40,36 @@ Profiles that are available by default: Monado does not have a launcher app, and so after connecting your headset, you will likely see a solid color. This means you can now start your VR title. -You may want to launch [WlxOverlay-S](/docs/fossvr/wlxoverlay-s/) first and use it to access your desktop and other VR titles. You can even start it automatically alongside the Monado session: just enter `wlx-overlay-s --openxr` into the "Autostart" field of your Envision profile. +You may want to launch [WlxOverlay-S](/docs/fossvr/wlxoverlay-s/) first and use it to access your desktop and other VR titles. You can even start it automatically alongside the Monado/WiVRn session, by enabling it in the [Plugins](#plugin-system) menu. + +## Plugin system + +The plugin system for Envision allows you to launch anything (usually OpenXR overlays) alongside the Monado/WiVRn session. + +Open the Plugins window by clicking the kebab menu (three dots) at the top of the Envision window, and clicking "Plugins". Here, you can install overlays like [WlxOverlay-S](/docs/fossvr/wlxoverlay-s) or [Stardust XR](/docs/fossvr/stardust) (or a custom plugin — see below). After installing plugins and toggling them on, once you start a profile, the enabled plugins will start alongside it. + +Plugins are the replacement for the "autostart" feature from older versions. + +### Adding a custom plugin + +The plugins included in the store are just a quick front-end to the latest release AppImages. For everything else, you can create a custom plugin that runs any given executable script or binary. + +For example, if you installed WlxOverlay-S from AUR or built it from source, you can disable the original WlxOverlay-S plugin and create a custom plugin to run it: + +1. Create a new file `~/.local/bin/wlx-but-newer` (creating the `~/.local/bin` directory if it does not exist). +2. Give it the content: + ```bash + #!/usr/bin/env bash + /usr/bin/wlx-overlay-s --openxr + ``` +3. `chmod +x ~/.local/bin/wlx-but-newer` +4. In Envision, open the Plugins window. +5. Add a custom plugin by clicking the ➕ plus button. +6. For the executable file, point it to the script you just created. +7. Name the plugin "Wlx but newer". +8. Save, and then enable the new plugin. + +Now starting the profile will also start your custom or AUR version of WlxOverlay-S. ## Experimental feature settings @@ -48,7 +77,7 @@ The following resources can be entered into your Envision profile repo and branc ### Full body Lighthouse tracking -Full body is now provided by default in Monado & OpenComposite through the XR_MNDX_xdev_space OpenXR vendor extension. This allows any tracked "xdev" in Monado to be forwarded as a raw pose without bindings to applications. OpenComposite exposes these as fake Vive FBT trackers for use. +Full body is no longer experimental; it is enabled by default in Monado & OpenComposite through the XR_MNDX_xdev_space OpenXR vendor extension. This allows any tracked "xdev" in Monado to be forwarded as a raw pose without bindings to applications. OpenComposite exposes these as fake Vive FBT trackers for use. ### WMR & Rift S controller tracking From 7fba4a55433b50962cffd2000147db580911e5e5 Mon Sep 17 00:00:00 2001 From: GabMus Date: Sun, 12 Jan 2025 09:14:59 +0000 Subject: [PATCH 13/82] warn the user about the dangers of gpu overclocking, stop suggesting to crank up sliders in corectrl --- content/docs/performance/_index.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/content/docs/performance/_index.md b/content/docs/performance/_index.md index c49a56b..135deac 100644 --- a/content/docs/performance/_index.md +++ b/content/docs/performance/_index.md @@ -19,11 +19,18 @@ You should add a kernel arg for `amdgpu` driven cards. Add `amdgpu.ppfeaturemask ### The simple way: Use CoreCtrl +{{% hint danger %}} +**BE CAREFUL** + +CoreCtrl is an **overclocking** utility. Overclocking your GPU is potentially dangerous and if done without care it could **permanently damage your hardware**. + +If you limit yourself to setting the power profile you should be fine, but don't just crank up the sliders. +{{% /hint %}} + - Install [CoreCtrl](https://gitlab.com/corectrl/corectrl) - Select your GPU on the top - Set Performance mode to Advanced - Set Power profile to VR -- Set the GPU and Memory sliders to max ### Enable VR profile using a script From bca6908c5ef1ce6b3cd8716355a6f623ddc3bd2a Mon Sep 17 00:00:00 2001 From: Gabriele Musco Date: Sun, 12 Jan 2025 10:18:42 +0100 Subject: [PATCH 14/82] fix links in envision page --- content/docs/fossvr/envision/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/fossvr/envision/_index.md b/content/docs/fossvr/envision/_index.md index 0a34daa..10ebb21 100644 --- a/content/docs/fossvr/envision/_index.md +++ b/content/docs/fossvr/envision/_index.md @@ -46,7 +46,7 @@ You may want to launch [WlxOverlay-S](/docs/fossvr/wlxoverlay-s/) first and use The plugin system for Envision allows you to launch anything (usually OpenXR overlays) alongside the Monado/WiVRn session. -Open the Plugins window by clicking the kebab menu (three dots) at the top of the Envision window, and clicking "Plugins". Here, you can install overlays like [WlxOverlay-S](/docs/fossvr/wlxoverlay-s) or [Stardust XR](/docs/fossvr/stardust) (or a custom plugin — see below). After installing plugins and toggling them on, once you start a profile, the enabled plugins will start alongside it. +Open the Plugins window by clicking the kebab menu (three dots) at the top of the Envision window, and clicking "Plugins". Here, you can install overlays like [WlxOverlay-S](/docs/fossvr/wlxoverlay-s/) or [Stardust XR](/docs/fossvr/stardust/) (or a custom plugin — see below). After installing plugins and toggling them on, once you start a profile, the enabled plugins will start alongside it. Plugins are the replacement for the "autostart" feature from older versions. @@ -108,4 +108,4 @@ The Oculus Rift CV1 is supported on the OpenHMD profile of Envision. Start the profile with your headset placed on the floor in clear view of all bases to generate this file as your calibrated playspace origin first run and delete it to reset the configuration. -A calibration of base stations will be saved to disk at `~/.config/openhmd/rift-room-config.json`. \ No newline at end of file +A calibration of base stations will be saved to disk at `~/.config/openhmd/rift-room-config.json`. From 6ac38f818605b4ce1852c59573b6c8b2e428a4e3 Mon Sep 17 00:00:00 2001 From: Yannick Date: Sun, 12 Jan 2025 09:20:57 +0000 Subject: [PATCH 15/82] Add relevant information for the Ultraleap v1 hand tracking module. --- content/docs/hardware/_index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index e5d6a1d..8c86869 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -85,6 +85,7 @@ A non-comprehensive table of various VR/XR devices and the drivers that support | Project Babble | ✅ (oscavmgr) | ✅ (oscavmgr) | ✅ (oscavmgr) | | Eyetrack VR | ✅ (oscavmgr) | ✅ (oscavmgr) | ✅ (oscavmgr) | | Mercury Handtrack | 🚧 (Monado SteamVR plugin, win only) | ✅ (survive driver only) | ❌ | +| Ultraleap v1 | ? | ✅ (with `openxr-layer-ultraleap`) | ? | | Lucid VR Gloves | ? | ✅ (survive driver only) | ❌ | | Kinect FBT | ✅ | ✅ (experimental) | 🚧 | | Standable FBT | ❌ | ❌ | ❌ | @@ -107,6 +108,8 @@ Eyetrack VR and Project Babble will both be implemented through [oscavmgr](https Tracking technologies can be mixed Monado/WiVRn by using [motoc](https://github.com/galister/motoc). +Having Ultraleap packages installed causes Monado to not compile. + ## Applying a kernel patch (for Vive Pro 2, Bigscreen Beyond, Pimax) ### Arch From 2206c528b44466231b75fdccbc8d9d844ef06b67 Mon Sep 17 00:00:00 2001 From: Virgile Robles Date: Sat, 25 Jan 2025 21:39:59 +0100 Subject: [PATCH 16/82] document lighthouse_console instructions --- content/docs/steamvr/pairing.md | 63 +++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 content/docs/steamvr/pairing.md diff --git a/content/docs/steamvr/pairing.md b/content/docs/steamvr/pairing.md new file mode 100644 index 0000000..fcc95aa --- /dev/null +++ b/content/docs/steamvr/pairing.md @@ -0,0 +1,63 @@ +--- +weight: 200 +title: Pairing +--- + +# Pairing Lighthouse Controllers or Trackers + +To pair lighthouse-capable hardware such as the Valve Index or HTC +Vive Pro controllers, or VIVE Trackers you'll need enough receivers (one for +each device). + +Receivers can be either: +- watchman dongles (plugged in your computer, preferably not on an USB hub) +- if you have a lighthouse HMD (e.g. Valve Index, HTC Vive, Bigscreen Beyond), + there will be two already built-in (for both controllers) + +## Pairing via SteamVR + +You can follow the normal pairing process by launching SteamVR, and opening the +pairing window (in the Devices menu). + +If however for some reason this does not work (in particular, if the pairing window +[does not render](https://github.com/ValveSoftware/SteamVR-for-Linux/issues/531)), +you can work around it by doing the pairing process via `lighthouse_console`. + +## Pairing via `lighthouse_console` + +In a terminal, launch `lighthouse_console` by running +``` +~/.steam/steam/steamapps/common/SteamVR/tools/lighthouse/bin/linux64/lighthouse_console +``` + +### Identifying available receivers + +You'll be greeted by a shell which starts by listing the serial number of attached receivers (both +dongles and built-in, if your HMD is connected). + +Selecting a receiver is done by running `serial ` in the opened shell. +When pairing new devices, +you'll want to find a receiver that isn't paired with a device already. After a +receiver is selected, you can run `identifycontroller` to check if the receiver +is paired with a device (assuming the device is on). + +In general, built-in HMD receivers will have longer serial numbers than dongle +ones. + +If either you want to *replace* previously paired devices (e.g. when changing +controllers) or you're struggling to identify which receiver to use, run +`unpairall`. This will unpair all lighthouse devices! + +### Pairing a device + +Once you have selected an available receiver with `serial `: + +1. Turn on your device +2. Put it in pairing mode (e.g. hold System+B for Valve controllers), the LED + should be blinking blue +3. Run the `pair` command + +After a few seconds, the LED should turn green, and the device is now paired. + +Do this for each device you want to pair (remember to use a different receiver +for each device), and exit the shell by running `quit`. From 140899ba496c40c321c96505b34cace3cfbd9b03 Mon Sep 17 00:00:00 2001 From: Valters Tomsons Date: Sun, 2 Feb 2025 01:45:52 +0200 Subject: [PATCH 17/82] Add CrysisVR example --- content/docs/steamvr/mod-managers.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/content/docs/steamvr/mod-managers.md b/content/docs/steamvr/mod-managers.md index e7a81b5..a287e8f 100644 --- a/content/docs/steamvr/mod-managers.md +++ b/content/docs/steamvr/mod-managers.md @@ -63,4 +63,10 @@ Here's an example of full Fallout 4 VR launch options: WINEDLLOVERRIDES="WinHTTP.dll=n,b;x3daudio1_7.dll=n,b" bash -c 'exec "${@/Fallout4VR.exe/f4sevr_loader.exe}"' -- %command% ``` +Example for redirecting original Crysis (2007) to [Crysis VR](https://crysis.vrmods.eu/): + +``` +MANGOHUD=0 bash -c 'exec "${@/Crysis.exe/CrysisVR.exe}"' -- %command% +``` + Put any environment variables before `bash`, put any launch arguments for the game after `%command%`. \ No newline at end of file From 20efb3ced02e0c3581c3f4a284bce6804efa0646 Mon Sep 17 00:00:00 2001 From: Valters Tomsons Date: Sun, 2 Feb 2025 01:51:37 +0200 Subject: [PATCH 18/82] More examples to a subsection --- content/docs/steamvr/mod-managers.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/content/docs/steamvr/mod-managers.md b/content/docs/steamvr/mod-managers.md index a287e8f..7eb1d20 100644 --- a/content/docs/steamvr/mod-managers.md +++ b/content/docs/steamvr/mod-managers.md @@ -57,13 +57,15 @@ bash -c 'exec "${@/OriginalGame.exe/CustomLoader.exe}"' -- %command% replacing `OriginalGame.exe` and `CustomLoader.exe` with game's executable name and your custom launcher respectively. -Here's an example of full Fallout 4 VR launch options: +## Examples + +Redirect Fallout 4 VR to [F4 Script Extender](https://f4se.silverlock.org/) with dll overrides needed for other mods to work: ``` WINEDLLOVERRIDES="WinHTTP.dll=n,b;x3daudio1_7.dll=n,b" bash -c 'exec "${@/Fallout4VR.exe/f4sevr_loader.exe}"' -- %command% ``` -Example for redirecting original Crysis (2007) to [Crysis VR](https://crysis.vrmods.eu/): +Redirect original Crysis (2007) executables to [Crysis VR](https://crysis.vrmods.eu/): ``` MANGOHUD=0 bash -c 'exec "${@/Crysis.exe/CrysisVR.exe}"' -- %command% From 81cbe09300c088eb697483a3947688743ccc3ae0 Mon Sep 17 00:00:00 2001 From: Bones Date: Fri, 7 Feb 2025 15:07:28 +0000 Subject: [PATCH 19/82] Update SlimeVR info --- content/docs/slimevr/_index.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/content/docs/slimevr/_index.md b/content/docs/slimevr/_index.md index 9bb057f..b8c2664 100644 --- a/content/docs/slimevr/_index.md +++ b/content/docs/slimevr/_index.md @@ -36,7 +36,7 @@ It's generally **highly recommended** to opt for the more expensive but higher q There are currently three ways to use SlimeVR: - Via SteamVR driver -- Via SolarXR driver for Monado (experimental) +- Via SolarXR driver for Monado - Directly via VRChat OSC (Open Sound Control) ## First method: SteamVR driver @@ -53,12 +53,13 @@ $HOME/.steam/steam/steamapps/common/SteamVR/bin/linux64/vrpathreg.sh adddriver $ Now the only thing you have to do is restart the SlimeVR server. -## Second method: SolarXR driver for Monado (experimental) +## Second method: native SolarXR driver for Monado This is a native approach to using Slime trackers within the open-source stack without relying on SteamVR, offering results comparable to those provided by the native SteamVR driver. -To use this method, you need to compile SlimeVR yourself from this fork: -`https://github.com/rcelyte/SlimeVR-Server.git`, branch `solarxr-ipc`. Build instructions can be found [here](https://github.com/rcelyte/SlimeVR-Server/blob/solarxr-ipc/CONTRIBUTING.md). +To use this method, you need to use SlimeVR v0.14.0 or newer and if not available from stable may be obtained via a testing build: +[Official stable builds](https://github.com/SlimeVR/SlimeVR-Server/releases) +[Unstable testing builds](https://github.com/SlimeVR/SlimeVR-Server/actions/workflows/gradle.yaml?query=branch%3Amain) For Monado, you need compile this fork: `https://gitlab.freedesktop.org/rcelyte/monado.git`, branch `solarxr-integration`. You can easily build Monado from this specific branch via [Envision](../fossvr/envision/), by modifying "XR Service Repo" and "XR Service Branch" in your build profile accordingly. From a0e142e9abc8d71e7c7e449b4c46ffa87d6457e3 Mon Sep 17 00:00:00 2001 From: Mhowser Date: Tue, 11 Feb 2025 20:34:22 +0000 Subject: [PATCH 20/82] Add Outer Wilds Section --- content/docs/games/_index.md | 4 +++ .../docs/games/outer-wilds-vr-mod/_index.md | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 content/docs/games/_index.md create mode 100644 content/docs/games/outer-wilds-vr-mod/_index.md diff --git a/content/docs/games/_index.md b/content/docs/games/_index.md new file mode 100644 index 0000000..b4dccde --- /dev/null +++ b/content/docs/games/_index.md @@ -0,0 +1,4 @@ +--- +title: More VR Games +weight: 60 +--- diff --git a/content/docs/games/outer-wilds-vr-mod/_index.md b/content/docs/games/outer-wilds-vr-mod/_index.md new file mode 100644 index 0000000..52ce940 --- /dev/null +++ b/content/docs/games/outer-wilds-vr-mod/_index.md @@ -0,0 +1,26 @@ +--- +title: Outer Wilds VR Mod +weight: 50 +--- + +# Outer Wilds + +{{% hint warning %}} + +You must use Proton 8 as any other version will not work! + +{{% /hint %}} + +[Outer Wilds](https://store.steampowered.com/app/753640/Outer_Wilds/) is a flat screen game by design. However, there is a VR mod available to bring greater immersion into the gameplay. + +To play Outer Wilds in VR, you need to install [NomaiVR](https://github.com/Raicuparta/nomai-vr). + +It is recommended to use the [Outer Wilds Mod Manager](https://outerwildsmods.com/mod-manager/) to install NomaiVR along with any additional mods you choose. + +## Performance + +Since Outer Wilds was not designed or optimized to be a VR game, performance will be degraded. Expect low framerates in most scenes. + +## Bugs + +While in VR, if you have mods that add extra items in the main menu, they will be rotated at an odd angle as well as any UIs. From 12407c856f33e15f90b0408cf9cf6f4416ec30df Mon Sep 17 00:00:00 2001 From: Reimei Date: Sun, 26 Jan 2025 00:41:05 +0000 Subject: [PATCH 21/82] Edit vrcx.md to add the native linux appimage version. --- content/docs/vrchat/vrcx.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/content/docs/vrchat/vrcx.md b/content/docs/vrchat/vrcx.md index d6f91f3..2066182 100644 --- a/content/docs/vrchat/vrcx.md +++ b/content/docs/vrchat/vrcx.md @@ -8,14 +8,29 @@ title: VRCX VRCX is a tool for managing your VRChat friendships, as well as providing additional convenience functionalities. -# Installer Script +# Appimage (Preferred Method) + + +Stable (Currently Unavailable): +- Grabe the latest .appimage from here: [VRCX Official Releases](https://github.com/vrcx-team/VRCX/releases) +- Run `chmod +x VRCX_*.AppImage`. +- Run the appimage (This will install it as app and auto removes the appimage when complete). +- Open VRCX from your apps. + +Nightly (Available): +- Grab the latest .appimage from here: [VRCX Nightly Releases](https://github.com/Natsumi-sama/VRCX/releases) +- Run `chmod +x VRCX_*.AppImage`. +- Run the appimage (This will install it as app and auto removes the appimage when complete). +- Open VRCX from your apps. + +# Installer Script (Wine) VRCX provides the [install-vrcx.sh](https://github.com/vrcx-team/VRCX/blob/master/Linux/install-vrcx.sh) script upstream, which does the steps of the manual installation for you. You can run it per `curl -sSf https://raw.githubusercontent.com/vrcx-team/VRCX/master/Linux/install-vrcx.sh | bash`. -# Manual Installation +# Manual Installation (Wine) - Grab the latest .zip from here: [VRCX Official Releases](https://github.com/vrcx-team/VRCX/releases) - Use a new or existing Wine prefix of Wine 9.2 or later. Recommend using a non-proton Wine build. From e8a3669c57187c0a28493e67f6b841ea493c0360 Mon Sep 17 00:00:00 2001 From: hypevhs <4498312-hypevhs@users.noreply.gitlab.com> Date: Tue, 11 Feb 2025 16:55:46 -0600 Subject: [PATCH 22/82] Update vrcx.md --- content/docs/vrchat/vrcx.md | 38 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/content/docs/vrchat/vrcx.md b/content/docs/vrchat/vrcx.md index 2066182..5b1f3af 100644 --- a/content/docs/vrchat/vrcx.md +++ b/content/docs/vrchat/vrcx.md @@ -6,34 +6,32 @@ title: VRCX # VRCX - [VRCX GitHub Repository](https://github.com/vrcx-team/VRCX) -VRCX is a tool for managing your VRChat friendships, as well as providing additional convenience functionalities. +VRCX is a tool for managing your VRChat friendships, as well as providing additional convenience features. -# Appimage (Preferred Method) +## AppImage (Preferred Method) +### Stable -Stable (Currently Unavailable): -- Grabe the latest .appimage from here: [VRCX Official Releases](https://github.com/vrcx-team/VRCX/releases) -- Run `chmod +x VRCX_*.AppImage`. -- Run the appimage (This will install it as app and auto removes the appimage when complete). -- Open VRCX from your apps. +1. Download the latest .AppImage from here: [VRCX Official Releases](https://github.com/vrcx-team/VRCX/releases) +1. Run `chmod +x VRCX_*.AppImage`. +1. Run the AppImage. This will install it as an app, which then auto-removes the AppImage file. +1. Open VRCX from your apps. -Nightly (Available): -- Grab the latest .appimage from here: [VRCX Nightly Releases](https://github.com/Natsumi-sama/VRCX/releases) -- Run `chmod +x VRCX_*.AppImage`. -- Run the appimage (This will install it as app and auto removes the appimage when complete). -- Open VRCX from your apps. +### Nightly -# Installer Script (Wine) +- Do the same steps as above, but download the latest .AppImage from here, instead: [VRCX Nightly Releases](https://github.com/Natsumi-sama/VRCX/releases) + +## Installer Script (Wine) VRCX provides the [install-vrcx.sh](https://github.com/vrcx-team/VRCX/blob/master/Linux/install-vrcx.sh) script upstream, which does the steps of the manual installation for you. -You can run it per `curl -sSf https://raw.githubusercontent.com/vrcx-team/VRCX/master/Linux/install-vrcx.sh | bash`. +Install it by running: `curl -sSf https://raw.githubusercontent.com/vrcx-team/VRCX/master/Linux/install-vrcx.sh | bash` -# Manual Installation (Wine) +## Manual Installation (Wine) -- Grab the latest .zip from here: [VRCX Official Releases](https://github.com/vrcx-team/VRCX/releases) -- Use a new or existing Wine prefix of Wine 9.2 or later. Recommend using a non-proton Wine build. -- `winetricks corefonts` -- Symlink your `drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat` folder from the VRChat Wine prefix to the VRCX Wine prefix -- Run `VRCX.exe` via Wine. \ No newline at end of file +1. Download the latest .zip from here: [VRCX Official Releases](https://github.com/vrcx-team/VRCX/releases) +1. Use a new or existing Wine prefix of Wine 9.2 or later. We recommend using a non-Proton build of Wine. +1. Run `winetricks corefonts`. +1. Symlink your `drive_c/users/steamuser/AppData/LocalLow/VRChat/VRChat` folder from the VRChat Wine prefix to the VRCX Wine prefix. +1. Run `VRCX.exe` via Wine. From 606910ecc624166effd294d22e0817d7d9494e0d Mon Sep 17 00:00:00 2001 From: hypevhs <4498312-hypevhs@users.noreply.gitlab.com> Date: Thu, 13 Feb 2025 15:08:10 -0600 Subject: [PATCH 23/82] WiVRn: Add Steam Flatpak instructions Co-authored-by: Tabitha Moon <123581598+tabithamoon@users.noreply.github.com> --- content/docs/fossvr/wivrn/_index.md | 43 +++++++++++++++++++---------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/content/docs/fossvr/wivrn/_index.md b/content/docs/fossvr/wivrn/_index.md index 40e63b4..8408779 100644 --- a/content/docs/fossvr/wivrn/_index.md +++ b/content/docs/fossvr/wivrn/_index.md @@ -17,7 +17,7 @@ WiVRn is based on [Monado](/docs/fossvr/monado/) and can be used with [OpenCompo We recommend using [Envision](/docs/fossvr/envision/) to install and launch WiVRn & OpenComposite. Envision will handle all configuration seamlessly and avoids many of the pitfalls of a manual setup. -Alternatively, you can use the [WiVRn Flatpak](https://flathub.org/apps/io.github.wivrn.wivrn) which includes OpenComposite as part of it. Processes in flatpak cannot take advantage of setcap, and so your performance may suffer when compared to Envision. +Alternatively, you can use the [WiVRn Flatpak](https://flathub.org/apps/io.github.wivrn.wivrn) which includes OpenComposite as part of it. Processes in Flatpak cannot take advantage of setcap, and so your performance may suffer when compared to Envision. ## General WiVRn Notes @@ -33,19 +33,34 @@ If using Nvidia proprietary drivers, have [Monado Vulkan Layers](https://gitlab. For audio in WiVRn, you will need to assign applications, or the system as a whole, to output audio to the virtual output "WiVRn" which is created upon connection between the server and the headset. +It is possible to use WiVRn Flatpak with Steam Flatpak, though Steam Flatpak isn't generally recommended for VR. If you are using Steam Flatpak, you just need to grant it access to the relevant paths: + +```bash +flatpak override --user --filesystem=xdg-config/openxr:ro com.valvesoftware.Steam +flatpak override --user --filesystem=xdg-config/openvr:ro com.valvesoftware.Steam +flatpak override --user --filesystem=xdg-run/wivrn com.valvesoftware.Steam +flatpak override --user --filesystem=/var/lib/flatpak/app/io.github.wivrn.wivrn:ro com.valvesoftware.Steam +``` + +As an added bonus to the above, this command will save you the effort of having to set launch options for every single VR game in your Steam library: + +```bash +flatpak override --user --env=PRESSURE_VESSEL_FILESYSTEMS_RW=/run/user/1000/wivrn/comp_ipc:/var/lib/flatpak/app/io.github.wivrn.wivrn com.valvesoftware.Steam +``` + ## Wired WiVRn -Use WiVRn with a cable instead of Wifi. Use a 5Gbps cable & port at the very least. +You can use WiVRn with a cable instead of Wi-Fi. Use a 5Gbps cable & port at the very least. WiVRn version: 0.19+ Using Envision: -- Connect the headset via USB -- Click the `Start WiVRn Client (Wired)` button in Envision. - - If it's not there, an Envision update might be necessary. +- Connect the headset via USB. +- In Envision, click the `Start WiVRn Client (Wired)` button. + - If it's not there, you may need to update Envision. Manual steps: -- Connect the headset via USB +- Connect the headset via USB. - If WiVRn is running on the headset, close it now. - While in the system lobby of the headset, run the following `adb` commands on the PC: ```bash @@ -55,11 +70,11 @@ Manual steps: ## WiVRn + Lighthouse driver -This section covers using WiVRn with any lighthouse-tracked device: Index/Vive controllers, Vive/Tundra trackers, etc. +This section covers using WiVRn with any Lighthouse-tracked device: Index/Vive controllers, Vive/Tundra trackers, etc. WiVRn version: 0.19+ -Have SteamVR installed (no need to run it). +You must have SteamVR installed (no need to run it). In Envision, set WiVRn Profile as such: - XR Service CMake Flags: @@ -70,20 +85,20 @@ In Envision, set WiVRn Profile as such: Perform a **Clean Build** after changing the CMake flags! -If not using Envision, simply pass `-DWIVRN_FEATURE_STEAMVR_LIGHTHOUSE=ON` to cmake and export the env variables before starting `wivrn-server`. +If not using Envision, simply pass `-DWIVRN_FEATURE_STEAMVR_LIGHTHOUSE=ON` to CMake and export the above environment variables before starting `wivrn-server`. -[Motoc](/docs/fossvr/motoc/) will be used to calibrate the two tracking technologies to work together. +You can use [Motoc](/docs/fossvr/motoc/) to calibrate the two tracking technologies to work together. -Discovery happens only on first connection, so be sure to **have all lighthouse devices powered on and in line of sight of base stations before connecting the headset!** +Discovery happens only on first connection, so be sure to **have all Lighthouse devices powered on and in line-of-sight of your base stations before connecting the headset!** -Once a device is discovered, it may be powered off and then back on later. +Once a device is discovered, you may power it off and on at-will. Once video appears in the headset, check `motoc monitor` to make sure your devices all show up. If one or more devices are missing, try: -- Spread the devices out more; lighthouse devices get discovered quicker if they're not piled up on each other. Simply strapping them on is good, too. +- Spread the devices out more; Lighthouse devices get discovered quicker if they're not piled up on each other. Simply strapping them on is good, too. - Increase `LH_DISCOVER_WAIT_MS`, though this delays the client on first connection. To re-discover devices, restart WiVRn server. -At this point, your lighthouse devices will be randomly floating about somewhere. To calibrate them, follow the guide in the [Motoc README](https://github.com/galister/motoc/blob/main/README.md). +At this point, your Lighthouse devices will be randomly floating about somewhere. To calibrate them, follow the guide in the [Motoc README](https://github.com/galister/motoc/blob/main/README.md). From c869edaefccbb7cf2522f8e68f83d69a86fcd2e9 Mon Sep 17 00:00:00 2001 From: Zuzka Varga <26226541-ZuzkaVarga@users.noreply.gitlab.com> Date: Tue, 4 Mar 2025 19:28:20 +0000 Subject: [PATCH 24/82] Add WMR Lighthouse hacky wiki entry --- content/docs/fossvr/wmr_lighthouse_hacky.md | 102 ++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 content/docs/fossvr/wmr_lighthouse_hacky.md diff --git a/content/docs/fossvr/wmr_lighthouse_hacky.md b/content/docs/fossvr/wmr_lighthouse_hacky.md new file mode 100644 index 0000000..e602db0 --- /dev/null +++ b/content/docs/fossvr/wmr_lighthouse_hacky.md @@ -0,0 +1,102 @@ +--- +title: WMR Lighthouse (No SteamVR) +weight: 9000 +--- +# WMR Lighthouse (No SteamVR) + +This describes a WMR Lighthouse setup using the `steamvr_lh` driver. + +It's different from [WMR Lighthouse](/docs/steamvr/wmr-lighthouse/) + +This doesn't use steamvr to re-map the head from some lighthouse tracking device. +Instead it does this natively in monado, so SteamVR is only necessary for the proprietary `steamvr_lh` driver. + +For now this is a hacky approach requiring a Monado fork, as Monado's builders don't support the functionality yet: + +* https://gitlab.freedesktop.org/monado/monado/-/issues/459 +* https://gitlab.freedesktop.org/monado/monado/-/issues/288 + +This is made for WMR based headsets and has been tested with a Reverb G2 & Vive1 (Vive1 used only for it's 2 watchman dongles needed for the lighthouse controllers). + +You can easily adapt this for other headsets in a hacky way, until these issues are closed. + +Tested working on Arch Linux with NVIDIA RTX 2060S. + +## Setup: +Setup your lighthouse system on SteamVR Windows. The Linux SteamVR version does not work well. On windows: Update everything, pair everything & setup your room boundaries. + +Linux Setup: +* install Steam +* Download SteamVR on Steam (try non beta version first) +* Configurations from Windows copied over + +### How To Copy Your Windows Steam Configurations To Linux +* mount your windows drive (e.g. at `/mnt`) +* `cp -r "/mnt/Program Files (x86)/Steam/config" ~/.steam/steam/` + +### Linux Only Setup +It may be possible to use SteamVR on Linux to setup your room boundaries, pair and update everything. This is untested, but try at least. +You may need playspace moving via Wlx to fine tune the floor if you don't have a Windows install. + +## Build + +### Manually +Use this fork of Monado + +`git clone https://gitlab.freedesktop.org/Zuzka/monado` + +(if it's too old for you, try to merge upstream into it and fix it) + +Ensure you have all required dependencies installed beforehand (Envision or Monado docs might help) + +* `cmake -G Ninja -B build -DCMAKE_INSTALL_PREFIX=/usr -DXRT_BUILD_DRIVER_SURVIVE=0 -DXRT_BUILD_DRIVER_VIVE=0 -DXRT_BUILD_DRIVER_STEAMVR_LIGHTHOUSE=1` +* `sudo ninja -C build install` + +Set following environment variable in your e.g. bash_profile: + +`export LH_DEVICE_SERIAL="{YourSerial}"` + +Replace `{YourSerial}` with [your actual serial](#how-to-find-your-serial) + +### Envision +In Envision, set Profile as such: + +XR Service Repo: +``` +https://gitlab.freedesktop.org/Zuzka/monado.git +``` + +XR Service CMake Flags: +``` +XRT_BUILD_DRIVER_SURVIVE=0 +XRT_BUILD_DRIVER_VIVE=0 +XRT_BUILD_DRIVER_STEAMVR_LIGHTHOUSE=1 +``` +Environment Variables: +``` +LH_DEVICE_SERIAL="{YourSerial}" +``` + +Replace `{YourSerial}` with [your actual serial](#how-to-find-your-serial) + +Perform a Clean Build after changing the CMake flags! + +## How To Find Your Serial +You can find out the actual tracking device serial by: + +1. At monado startup look if you see anything starting with `LHR-` e.g. `LHR-FC2E9BC3`. Try a bunch to find the tracker attached to your headset. +2. running this command and trying a bunch: `ls ~/.steam/steam/config/lighthouse/ | tr '[:lower:]' '[:upper:]'` +3. Running `motoc show` in a terminal + +## Notes +* Turn on all your trackers & controllers and ensure the light is green, before starting monado. +* If you decide to use another lighthouse tracker mount, you'd need to figure the new tracker offset math in the Monado source code. +* If you use a Vive 1 as controller connection dongles *only connect power and USB*. +* Fork works fine without a Vive 1 for dongles, usb dongles work aswell. + +## Useful Resources: +* https://monado.freedesktop.org/getting-started.html#installation-from-source +* https://monado.freedesktop.org/valve-index-setup.html +* check the commits on the fork for more info https://gitlab.freedesktop.org/Zuzka/monado +* vive tracker 3.0 3d printable mount + * model: https://www.printables.com/model/107654-hp-reverb-g2-vive-tracker-mount From c1907a137e4856954d612011bcbcf8a05e70dd7d Mon Sep 17 00:00:00 2001 From: AnnoyingRains Date: Tue, 11 Mar 2025 12:22:50 +0000 Subject: [PATCH 25/82] Fix typo --- content/docs/distros/nixos.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/distros/nixos.md b/content/docs/distros/nixos.md index 6340f84..9c5874b 100644 --- a/content/docs/distros/nixos.md +++ b/content/docs/distros/nixos.md @@ -28,7 +28,7 @@ You can find WiVRn on the official [NixOS wiki](https://wiki.nixos.org/wiki/VR#W To get VRChat working with monado on nix, use the `env PRESSURE_VESSEL_FILESYSTEMS_RW=$XDG_RUNTIME_DIR/monado_comp_ipc %command%` launch options on steam and click play with the "Launch VRChat in Steam VR" mode. It should open it on your desktop for preview and display it through monado. ## SteamVR -SteamVR works like it does on other distros for the most part. Unfotrunately, if it doesn't work out of the box, troubleshooting it on NixOS can be close to impossible due to NixOS's structure and SteamVR's proprietary nature. +SteamVR works like it does on other distros for the most part. Unfortunately, if it doesn't work out of the box, troubleshooting it on NixOS can be close to impossible due to NixOS's structure and SteamVR's proprietary nature. [Asynchronous reprojection does not work](https://github.com/NixOS/nixpkgs/issues/217119) without a kernel patch. From d0d653b5141f79aa0b1e247391ceef068716701c Mon Sep 17 00:00:00 2001 From: AnnoyingRains Date: Tue, 11 Mar 2025 13:32:31 +0000 Subject: [PATCH 26/82] Update NixOS documentation with setup recommendations, as well as instructions on how to undo the damage that Envision can do to a NixOS VR system. --- content/docs/distros/nixos.md | 79 ++++++++++++++++++++++++++++++++--- 1 file changed, 74 insertions(+), 5 deletions(-) diff --git a/content/docs/distros/nixos.md b/content/docs/distros/nixos.md index 9c5874b..341840f 100644 --- a/content/docs/distros/nixos.md +++ b/content/docs/distros/nixos.md @@ -6,6 +6,59 @@ title: NixOS General documentation about VR is provided on the [NixOS Wiki](https://wiki.nixos.org/wiki/VR). +## Recommendations +The recommended way to set up NixOS for VR is by using [services.monado](https://search.nixos.org/options?channel=unstable&query=services.monado) or [services.wivrn](https://search.nixos.org/options?channel=unstable&query=services.wivrn). + +You may also want to install [opencomposite](https://search.nixos.org/packages?channel=unstable&query=opencomposite) (or xrizer, currently only available in [nixpkgs-xr](https://github.com/nix-community/nixpkgs-xr)) and [wlx-overlay-s](https://search.nixos.org/packages?channel=unstable&query=wlx-overlay-s). + +For OpenComposite or XRizer, you may want to configure `~/.config/openvr/openvrpaths.vrpath` to point to your OpenComposite or XRizer installation. See below for an example using [home-manager](https://github.com/nix-community/home-manager). + +```nix +xdg.configFile."openvr/openvrpaths.vrpath".text = '' + { + "config" : + [ + "~/.local/share/Steam/config" + ], + "external_drivers" : null, + "jsonid" : "vrpathreg", + "log" : + [ + "~/.local/share/Steam/logs" + ], + "runtime" : + [ + "${pkgs.opencomposite}/lib/opencomposite" + ], + "version" : 1 + } +''; +``` + +If you need to run the latest possible version of any of these pieces of software for whatever reason, above what is packaged in NixOS, you may want to check out Community Overlays at the bottom of this article. + +If you need to run a branch of Monado or WiVRn, you can use `.overrideAttrs`, see below for an example of doing this for Coreforge's Monado Pimax fork. + +```nix +monado = { + enable = true; + defaultRuntime = true; + highPriority = true; + + package = (pkgs.monado.overrideAttrs { + pname = "monado-pimax"; # optional but helps distinguishing between packages + + src = pkgs.fetchFromGitLab { + domain = "gitlab.freedesktop.org"; + owner = "Coreforge"; + repo = "monado"; + rev = "f858ee5dd8ca7696bd9219e8278f2671df56fe6e"; + hash = "sha256-Si56yvG+oSfyUaPAlF1FgB7WJo8td1xuVxYnkJvbu4o="; + }; + }); +}; +``` + ## Monado Monado is supported natively on NixOS using the [services.monado](https://search.nixos.org/options?channel=unstable&query=services.monado) since 24.05. @@ -24,19 +77,35 @@ As WiVRn is built around Monado, most, if not all, settings for Monado are also You can find WiVRn on the official [NixOS wiki](https://wiki.nixos.org/wiki/VR#WiVRn). -### VRChat -To get VRChat working with monado on nix, use the `env PRESSURE_VESSEL_FILESYSTEMS_RW=$XDG_RUNTIME_DIR/monado_comp_ipc %command%` launch options on steam and click play with the "Launch VRChat in Steam VR" mode. It should open it on your desktop for preview and display it through monado. +### Steam Games +To get Steam games working with monado on NixOS, use the `env PRESSURE_VESSEL_FILESYSTEMS_RW=$XDG_RUNTIME_DIR/monado_comp_ipc %command%` launch options on steam and, if prompted, choose the SteamVR launch option. + +## OpenXR apps +All OpenXR apps should work out of the box, assuming you have a default runtime set. + +To set a default OpenXR runtime, you can either use `services.monado.defaultRuntime` (the same option is present for WiVRn) or create/modify `~/.config/openxr/1/active_runtime.json`. ## SteamVR SteamVR works like it does on other distros for the most part. Unfortunately, if it doesn't work out of the box, troubleshooting it on NixOS can be close to impossible due to NixOS's structure and SteamVR's proprietary nature. -[Asynchronous reprojection does not work](https://github.com/NixOS/nixpkgs/issues/217119) without a kernel patch. +[Asynchronous reprojection does not work](https://github.com/NixOS/nixpkgs/issues/217119) without a [kernel patch](https://github.com/Frogging-Family/community-patches/blob/a6a468420c0df18d51342ac6864ecd3f99f7011e/linux61-tkg/cap_sys_nice_begone.mypatch). However, this patch is only applicable for AMD GPUs. There is no way to get SteamVR asynchronous reprojection working on Nvidia. [setcap doesn't work](https://github.com/NixOS/nixpkgs/issues/42117#issuecomment-996731579) but can be done manually. ## Envision -[Envision](../../fossvr/envision/) has been packaged in [nixos unstable](https://search.nixos.org/packages?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=+envision) but is still in early development and is not recommended. It may also mess with your `monado.service` setup in unexpected ways. +[Envision](../../fossvr/envision/) has been packaged in [nixos 24.11](https://github.com/NixOS/nixpkgs/blob/nixos-24.11/pkgs/by-name/en/envision/package.nix) but is still in early development and is not recommended. It may also mess with your `monado.service` setup in unexpected ways. + +Notably, if you try to use Envision on NixOS, by default, binaries will be dynamically linked, not statically linked, which will cause many issues with VR apps. Also, if you try to use Envision with a dedicated PCVR headset (ie, Monado with an Index, Pimax, etc), asynchronous reprojection will not work without an AMD-only kernel patch, for the same reason as SteamVR. + +### Removing Envision +In case you did not follow the above advice, and attempted to use Envision on NixOS, you may want to undo the changes it has made to your home folder, so `services.monado`, `services.wivrn`, `opencomposite` and/or `xrizer` may work correctly. + +You will want to delete or modify `~/.config/openxr/1/active_runtime.json`. Note that this is an override for `/etc/xdg/openxr/1/active_runtime.json`, so if you are using `services.monado.defaultRuntime = true` (or the WiVRn equivalent) then you can safely delete this file. Otherwise, you'll want to point it to your Monado installation, which will be somewhere in `/nix/store`. + +You will also want to modify `~/.config/openvr/openvrpaths.vrpath`. Remove any runtimes that point to Envision's compiled binaries. + +I recommend using [home-manager](https://github.com/nix-community/home-manager) to automate writing these config files, as these paths will change regularly, due to the nature of NixOS. ## Community Overlays -[Nixpkgs-xr](https://github.com/nix-community/nixpkgs-xr) provides overlays for the exisiting nixpkgs. If the mainline packages are broken for you (whether it be compiling or in function) for any reason, adding this, as described in the readme, might help. +[Nixpkgs-xr](https://github.com/nix-community/nixpkgs-xr) provides overlays for the exisiting nixpkgs. If the mainline packages are broken for you (whether it be compiling or in function) for any reason, adding this, as described in the readme, might help. It also provides XR-related packages considerably before they are available in NixOS. From 28595b46f43d595155ce85476ac334d30cb377dc Mon Sep 17 00:00:00 2001 From: Johnny Mnemonic Date: Wed, 19 Mar 2025 03:06:03 +0000 Subject: [PATCH 27/82] Edit _index.md Updating links and information --- content/docs/fossvr/stardust/_index.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/content/docs/fossvr/stardust/_index.md b/content/docs/fossvr/stardust/_index.md index cf632cd..ea04cb1 100644 --- a/content/docs/fossvr/stardust/_index.md +++ b/content/docs/fossvr/stardust/_index.md @@ -9,19 +9,23 @@ weight: 52 - [Github Organization](https://github.com/StardustXR/) A system UI to make using all your 2D—and eventually OpenXR—apps together intuitive, accessible, and fun by using community-made virtual objects as interfaces. +Stardust provides a 3D environment, where anything from 2D windows (including your existing apps!), to 3D apps built from objects, can exist together in physical space. ![Panels for wayland apps and a CRT panel shell for XR UI.](https://stardustxr.org/img/carousel/panels.png) ## Setup -First you need to install and run the server from https://github.com/StardustXR/server. Follow the README. If you have issues getting OpenXR to work, try running https://gitlab.freedesktop.org/monado/demos/xrgears first. +For full installation instructions and a deeper dive into setting it up with various linux distributions, visit the [Stardust XR website](https://stardustxr.org/docs/get-started/What-is-Stardust) +The quickest way to try out Stardust XR is to install [Telescope](https://stardustxr.org/docs/get-started/Quickstart). It comes with the Stardust XR server, an app launcher called Hexagon Launcher, +and some helpful apps like Flatland to use your 2D apps inside Stardust, and Black Hole to quickly tuck away your objects and apps (kind of like desktop peek on Windows). Note that you'll need to have +the [Terra repository](https://terra.fyralabs.com/) installed. -After the server is running, you'll need to run some clients. Here's a demo showing some off: -![A showcase of some different clients](https://stardustxr.org/img/docs/clients/demo_01.mp4) +``` +sudo dnf install telescope +``` -Non-exhaustive list of clients: -- [Flatland](https://github.com/StardustXR/flatland): A panel item UI (XR equivalent of a window manager) so you can interact with your apps using virtual touchscreens. To show Wayland apps, run them with the proper `WAYLAND_DISPLAY` environment variable, in the server's startup script, or use a stardust launcher such as gravity or protostar. Flatland works great in 3DoF or 6DoF with direct touch and pointer interaction. -![A flat panel containing the prism launcher](https://stardustxr.org/img/docs/clients/flatland.png) -- [Gravity](https://github.com/StardustXR/gravity): Command line tool to launch programs inside of stardust at a particular offset in space. This is nestable so you can run a script using gravity, and then gravity inside that script to make a whole composed setup out of thin air! It also ensures that everything launched through it will properly connect to the stardust server, such as wayland clients. -- [Protostar](https://github.com/StardustXR/protostar): Prototype app launcher library/examples. Grab app icons and drop them in space to launch apps where they're dropped. -- [Magnetar](https://github.com/StardustXR/magnetar): Workspaces in 3D. Any object inside the rings will move with them, so you can move a bunch of stuff out of the way temporarily when you don't need it. \ No newline at end of file + Here's a demo showing some off some of what Stardust XR is like: + + +The full installation of Stardust XR centers around the Stardust XR server, which can run a variety of clients. For a full list of what is available, +check out the [Github repository](https://github.com/StardustXR). \ No newline at end of file From 621af2e3384284ad72a96b1ac677fafc858f6698 Mon Sep 17 00:00:00 2001 From: Aleksander Date: Sat, 22 Mar 2025 10:40:09 +0100 Subject: [PATCH 28/82] SlimeVR: Remove outdated important notes --- content/docs/slimevr/_index.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/content/docs/slimevr/_index.md b/content/docs/slimevr/_index.md index b8c2664..fae1497 100644 --- a/content/docs/slimevr/_index.md +++ b/content/docs/slimevr/_index.md @@ -68,10 +68,6 @@ For Monado, you need compile this fork: **Important note #1**: Do not stop the SlimeVR server during operation, as driver and tracker hot-plugging are not yet supported. -**Important note #2**: SlimeVR will not detect your HMD until you launch a game that supports trackers. For now, body calibration options will be available in-game. - -After launching the game, you should see your trackers being detected. At this point, you can calibrate and use them. - ## Third method: VRChat OSC **This method is only available in VRChat.** From ae430abd23b075f0faf01854001844ce3ae7860b Mon Sep 17 00:00:00 2001 From: hypevhs <4498312-hypevhs@users.noreply.gitlab.com> Date: Fri, 28 Mar 2025 10:39:55 -0500 Subject: [PATCH 29/82] Envision: discourage AppImageLauncher --- content/docs/fossvr/envision/_index.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/content/docs/fossvr/envision/_index.md b/content/docs/fossvr/envision/_index.md index 10ebb21..4c84684 100644 --- a/content/docs/fossvr/envision/_index.md +++ b/content/docs/fossvr/envision/_index.md @@ -71,6 +71,14 @@ For example, if you installed WlxOverlay-S from AUR or built it from source, you Now starting the profile will also start your custom or AUR version of WlxOverlay-S. +### Plugin troubleshooting + +On some systems, a built-in plugin may not launch. This can happen for a number of reasons, but one in particular is so obtuse that it's worth a mention: + +Please *uninstall* AppImageLauncher. It intercepts the normal AppImage starting behavior in a dirty way that we can't predict. + +You can tell if you are affected if, when you run the WlxOverlay-S AppImage in terminal (whether in plugin form in `~/.local/share/envision/plugins`, or downloaded directly from GitHub), you only get the output `execv error: No such file or directory`. + ## Experimental feature settings The following resources can be entered into your Envision profile repo and branch settings to enable early access to code before it's fully upstream in Monado itself. To enable these feature sets, simply clone your profile, edit it with these settings, then build. From 4868cc9a8ceaa9379cf843c1f3d6ea399880493d Mon Sep 17 00:00:00 2001 From: hypevhs <4498312-hypevhs@users.noreply.gitlab.com> Date: Fri, 28 Mar 2025 13:08:59 -0500 Subject: [PATCH 30/82] Fix trailing spaces --- content/docs/fossvr/stardust/_index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/docs/fossvr/stardust/_index.md b/content/docs/fossvr/stardust/_index.md index ea04cb1..7fc8037 100644 --- a/content/docs/fossvr/stardust/_index.md +++ b/content/docs/fossvr/stardust/_index.md @@ -16,16 +16,16 @@ Stardust provides a 3D environment, where anything from 2D windows (including yo ## Setup For full installation instructions and a deeper dive into setting it up with various linux distributions, visit the [Stardust XR website](https://stardustxr.org/docs/get-started/What-is-Stardust) -The quickest way to try out Stardust XR is to install [Telescope](https://stardustxr.org/docs/get-started/Quickstart). It comes with the Stardust XR server, an app launcher called Hexagon Launcher, +The quickest way to try out Stardust XR is to install [Telescope](https://stardustxr.org/docs/get-started/Quickstart). It comes with the Stardust XR server, an app launcher called Hexagon Launcher, and some helpful apps like Flatland to use your 2D apps inside Stardust, and Black Hole to quickly tuck away your objects and apps (kind of like desktop peek on Windows). Note that you'll need to have -the [Terra repository](https://terra.fyralabs.com/) installed. +the [Terra repository](https://terra.fyralabs.com/) installed. ``` -sudo dnf install telescope +sudo dnf install telescope ``` Here's a demo showing some off some of what Stardust XR is like: -The full installation of Stardust XR centers around the Stardust XR server, which can run a variety of clients. For a full list of what is available, -check out the [Github repository](https://github.com/StardustXR). \ No newline at end of file +The full installation of Stardust XR centers around the Stardust XR server, which can run a variety of clients. For a full list of what is available, +check out the [Github repository](https://github.com/StardustXR). From e728202c9a5058724a59a56c0a2bc62814728f5e Mon Sep 17 00:00:00 2001 From: hypevhs <4498312-hypevhs@users.noreply.gitlab.com> Date: Fri, 28 Mar 2025 12:54:55 -0500 Subject: [PATCH 31/82] Remove dead links to vulkan-layers, encourage >=565 --- content/docs/fossvr/wivrn/_index.md | 2 +- content/docs/hardware/_index.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/content/docs/fossvr/wivrn/_index.md b/content/docs/fossvr/wivrn/_index.md index 8408779..e86ea62 100644 --- a/content/docs/fossvr/wivrn/_index.md +++ b/content/docs/fossvr/wivrn/_index.md @@ -29,7 +29,7 @@ systemctl enable --now avahi-daemon If a firewall is installed, make sure ports 5353/UDP and 9757/UDP+TCP are open for Avahi and WiVRn itself, respectively. -If using Nvidia proprietary drivers, have [Monado Vulkan Layers](https://gitlab.freedesktop.org/monado/utilities/vulkan-layers) installed, otherwise games will crash with a segmentation fault. +If using Nvidia proprietary drivers older than 565, install the [Monado Vulkan Layers](https://gitlab.freedesktop.org/monado/utilities/vulkan-layers), otherwise games will crash with a segmentation fault. For audio in WiVRn, you will need to assign applications, or the system as a whole, to output audio to the virtual output "WiVRn" which is created upon connection between the server and the headset. diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index 8c86869..80b6c14 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -11,7 +11,7 @@ title: VR Gear & GPUs | Manufacturer | Driver | VR Support | Reprojection Support | Hybrid Graphics Support | Notes | |--------------|---------------------------|----------------|--------------------------------|-------------------------------|----------------------------------------------------------------------------------------------| -| Nvidia | Nvidia (Closed Source) | Excellent | Excellent | Supported | Requires an implicit [vulkan-layer](https://gitlab.freedesktop.org/monado/utilities/vulkan-layers) to not segfault: [*AUR*](https://aur.archlinux.org/packages/monado-vulkan-layers-git)・[*Fedora*](https://packages.fedoraproject.org/pkgs/monado-vulkan-layers/monado-vulkan-layers/)・[*Ubuntu*](https://gitlab.freedesktop.org/monado/utilities/vulkan-layers/-/jobs/55337949/artifacts/file/incoming/monado-vulkan-layers_0.9.0.29.git.ae43cdc-1~20240221ubuntu2204_amd64.deb)・[*Debian*](https://gitlab.freedesktop.org/monado/utilities/vulkan-layers/-/jobs/55337947/artifacts/file/incoming/monado-vulkan-layers_0.9.0.29.git.ae43cdc-1~20240221bpo11_amd64.deb) | +| Nvidia | Nvidia (Closed Source) | Excellent | Excellent | Supported | Requires driver version 565 or greater | | Nvidia | Nouveau (Open Source) | Functional | Functional | Supported | Lacks DisplayPort audio. | | Intel | i915 (Open Source) | Functional | Unknown | Supported | Relatively old, most likely poor support for newer GPUs. | Intel | Intel/Xe (Open Source) | No wired HMDs | N/A / Unable to drive wired. | Supported | Lacks direct mode implementation in driver, unable to drive wired HMDs. | @@ -23,7 +23,7 @@ title: VR Gear & GPUs - **VR Support**: Indicates how well supported the necessary Vulkan API components are. - **Reprojection Support**: Describes the support and quality of reprojection features for VR. Poor support indicates that the driver is not able to properly handle Vulkan realtime shaders and it will present as visual stutter. Non-robust solutions will suffer stutter under very high GPU load. - **PRIME/ Hybrid GPU Support**: Compatibility with systems using multiple GPUs for render offload. Monado and all clients must be run on a single select GPU due to memory tiling requirements. -- For Nvidia proprietary drivers, the [vulkan-layer](https://gitlab.freedesktop.org/monado/utilities/vulkan-layers) **must** be installed in order to not crash. +- For Nvidia proprietary drivers *older* than 565, (please try to update!), the [vulkan-layers](https://gitlab.freedesktop.org/monado/utilities/vulkan-layers) must be installed in order to not crash: [*AUR*](https://aur.archlinux.org/packages/monado-vulkan-layers-git)・[*Fedora*](https://packages.fedoraproject.org/pkgs/monado-vulkan-layers/monado-vulkan-layers/) - AMD GPUs lower than RDNA generation have functional but less robust reprojection capabilities, expected to be similar to Intel. - Audio over displayport is known to temporarily cut out when new audio sources spring up on pipewire [without a fix to add alsa headroom](https://wiki.archlinux.org/title/PipeWire#Audio_cutting_out_when_multiple_streams_start_playing) - X11 configurations are discouraged but workable, please upgrade your system to Wayland if at all possible. From ba3cf3f3a3221e35d0af9f6935987ae51523772b Mon Sep 17 00:00:00 2001 From: hypevhs <4498312-hypevhs@users.noreply.gitlab.com> Date: Fri, 28 Mar 2025 22:06:17 -0500 Subject: [PATCH 32/82] Remove AdGoBye It's been mostly broken for a while, but a recent VRChat change has made it outright impossible to fix, so the project is dead. See: https://github.com/AdGoBye/AdGoBye/issues/105#issuecomment-2763012736 --- content/docs/vrchat/_index.md | 8 +++++++- content/docs/vrchat/adblocker.md | 16 ---------------- 2 files changed, 7 insertions(+), 17 deletions(-) delete mode 100644 content/docs/vrchat/adblocker.md diff --git a/content/docs/vrchat/_index.md b/content/docs/vrchat/_index.md index 80590f2..22c9564 100644 --- a/content/docs/vrchat/_index.md +++ b/content/docs/vrchat/_index.md @@ -27,5 +27,11 @@ Should the game prompt to exit the game upon an anticheat failure, simply try to Given a [few caveats](video_players/) most video players will work. +## Privacy + VRChat drags quite a tangle of privacy concerns. -Please consider your opsec in relation to all VR API input including poses, all voice communication, unsandboxed code execution, the EAC anticheat system which occasionally probes system proc info and much more, and the game maintaining a memory buffered audio video recording of the window contents tied to the report system. \ No newline at end of file + +Please consider your opsec in relation to all VR API input including poses, all voice communication, unsandboxed code execution, the EAC (anticheat) system which occasionally probes the list of all system processes, the game maintaining a memory-buffered audio/video recording of the window contents tied to the report system, and much more. + +In-game analytics can be blocked at the DNS level. These are often external services the game phones into to deliver usage statistics. Opt-out by blocking this domain list in your network or computer firewall/DNS service: https://github.com/Luois45/VRChatAnalyticsBlocklist + diff --git a/content/docs/vrchat/adblocker.md b/content/docs/vrchat/adblocker.md deleted file mode 100644 index 5ea3d66..0000000 --- a/content/docs/vrchat/adblocker.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -weight: 100 -title: Blocking Ads in VRChat ---- - -Ads are annoying, bloated, and wasteful of your time and attention. -They are found prominently in popular worlds, luckily the prefabs can be blocked by the end user with this handy git project: - -![AdGoBye](https://raw.githubusercontent.com/AdGoBye/AdGoBye/main/Marketing/lsmbeforeafter.webp) - -https://github.com/AdGoBye/AdGoBye - - -In-game analytics can also be blocked at the DNS level, these are often external services the game phones into to deliver usage statistics. Opt out by blocking this domain list in your network or computer firewall/ DNS service. - -https://github.com/Luois45/VRChatAnalyticsBlocklist \ No newline at end of file From 9101358589c34dc871312b9dc041f79942de3216 Mon Sep 17 00:00:00 2001 From: hypevhs <4498312-hypevhs@users.noreply.gitlab.com> Date: Sat, 29 Mar 2025 11:24:06 -0500 Subject: [PATCH 33/82] Index: recommend replug technique --- content/docs/hardware/_index.md | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index 8c86869..8c01829 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -92,23 +92,16 @@ A non-comprehensive table of various VR/XR devices and the drivers that support ## Hardware note -WiVRn PC XR to WiVRn PC client streaming remains mainly for debug use. - -Vive Pro microphones should be set to use 44.1khz sample rates as feeding in 48khz raises the pitch of the audio. - -Vive Pro creates HDMI Output Source after startup of SteamVR/Monado/etc. Use it instead of Vive Pro USB Audio Source, since the audio might appear distorted. - -Valve index audio output should be set to 48khz or no audio will output. - -Vive Pro Eye HMD functional, eyechip WIP. - -Pimax initialization code WIP. Distortion matrix dump work in progress. - -Eyetrack VR and Project Babble will both be implemented through [oscavmgr](https://github.com/galister/oscavmgr) to emit proper unified flexes over OSC. - -Tracking technologies can be mixed Monado/WiVRn by using [motoc](https://github.com/galister/motoc). - -Having Ultraleap packages installed causes Monado to not compile. +- WiVRn PC XR to WiVRn PC client streaming remains mainly for debug use. +- **Vive Pro** microphones should be set to use 44.1khz sample rates as feeding in 48khz raises the pitch of the audio. +- **Vive Pro** creates HDMI Output Source after startup of SteamVR/Monado/etc. Use it instead of Vive Pro USB Audio Source, since the audio might appear distorted. +- **Valve Index** audio output should be set to 48khz or no audio will output. +- **Valve Index** may bug out once per boot, resulting in VR refusing to start, or your DE seeing it as a normal monitor. Just unplug and replug the barrel connector that provides power to the HMD. +- **Vive Pro Eye** HMD functional, eyechip WIP. +- **Pimax** initialization code WIP. Distortion matrix dump work in progress. +- Eyetrack VR and Project Babble will both be implemented through [oscavmgr](https://github.com/galister/oscavmgr) to emit proper unified flexes over OSC. +- Tracking technologies can be mixed Monado/WiVRn by using [motoc](https://github.com/galister/motoc). +- Having Ultraleap packages installed causes Monado to not compile. ## Applying a kernel patch (for Vive Pro 2, Bigscreen Beyond, Pimax) From b3a7600b4d49d97fe0b61d358ef3bd973385e854 Mon Sep 17 00:00:00 2001 From: hypevhs <4498312-hypevhs@users.noreply.gitlab.com> Date: Wed, 2 Apr 2025 22:44:27 -0500 Subject: [PATCH 34/82] Resonite: mention OXR_PARALLEL_VIEWS --- content/docs/resonite/_index.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/content/docs/resonite/_index.md b/content/docs/resonite/_index.md index b1187ae..f256357 100644 --- a/content/docs/resonite/_index.md +++ b/content/docs/resonite/_index.md @@ -27,6 +27,12 @@ OpenComposite should now provide a close-to-flawless experience on most controll There are some minor visual bugs specific to running Resonite on Proton, such as textures taking longer to load and appearing black for a few seconds when close to the player. +## Mirrors look cross-eyed + +When playing Resonite under Monado, the 3D effect of mirrors may appear way off, as if looking through them feels like your eyes are crossed. + +To solve this, prepend `OXR_PARALLEL_VIEWS=1` to Resonite's launch options. + ## Crashes Resonite has been seen causing random SteamVR crashes on Linux before. In some situations the engine also tends to freeze. On OpenComposite, the game will rarely close out on its own without leaving any obvious trace of things going wrong — this is being investigated. From 44ee7490f5b8bf3c2ee6bed11b253b59e1c46382 Mon Sep 17 00:00:00 2001 From: Mhowser Date: Thu, 3 Apr 2025 18:01:50 +0000 Subject: [PATCH 35/82] Added links, helpful info in performance section --- content/docs/resonite/_index.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/content/docs/resonite/_index.md b/content/docs/resonite/_index.md index f256357..3dd1f3a 100644 --- a/content/docs/resonite/_index.md +++ b/content/docs/resonite/_index.md @@ -21,7 +21,7 @@ Make sure you have a compatibility tool selected (e.g. GE-Proton-RTSP) before la The current recommended Proton variant is [**GE-Proton-RTSP**](https://github.com/SpookySkeletons/proton-ge-rtsp/releases). -OpenComposite should now provide a close-to-flawless experience on most controllers and when using hand tracking. +[OpenComposite](https://lvra.gitlab.io/docs/fossvr/opencomposite/) should now provide a close-to-flawless experience on most controllers and when using hand tracking. ## Visual bugs @@ -29,7 +29,7 @@ There are some minor visual bugs specific to running Resonite on Proton, such as ## Mirrors look cross-eyed -When playing Resonite under Monado, the 3D effect of mirrors may appear way off, as if looking through them feels like your eyes are crossed. +When playing Resonite under [Monado](https://lvra.gitlab.io/docs/fossvr/monado/) or [WiVRn](https://lvra.gitlab.io/docs/fossvr/wivrn/), the 3D effect of mirrors may appear way off, as if looking through them feels like your eyes are crossed. This only affects headsets with canted displays (e.g. Valve Index, Pimax). To solve this, prepend `OXR_PARALLEL_VIEWS=1` to Resonite's launch options. @@ -42,10 +42,11 @@ The cause of these issues and whether they are Proton-specific isn't currently k ## Performance In larger sessions Resonite is typically CPU-bound, there isn't much that can be done besides upgrading your CPU. In situations where the GPU is a bottleneck, lowering the resolution (either in the OpenXR runtime or through OpenComposite) may help dramatically. +This can be easily done by prepending `OXR_VIEWPORT_SCALE_PERCENTAGE=75` to Resonite's launch options. Experiment with different values to find your preferred balance between performance and quality. ## Crash on loading into a world with video players -On GE-Proton9-10 (for example), loading into a world with e.g. a YouTube video or live stream can crash the game. Try using the latest GE-Proton-RTSP. +On GE-Proton9-10 (for example), loading into a world with e.g. a YouTube video or live stream can crash the game. Try using the latest GE-Proton-RTSP release. ## Controls busted after switching to desktop From d89f9e3dde75eb0e8e2e3d2d3c0534b94fc21f27 Mon Sep 17 00:00:00 2001 From: hypevhs <4498312-hypevhs@users.noreply.gitlab.com> Date: Thu, 3 Apr 2025 15:16:52 -0500 Subject: [PATCH 36/82] Hardware: install Fedora builddeps --- content/docs/hardware/_index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index e45f08c..351a1ac 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -133,6 +133,9 @@ source=( # replace 41 with your fedora version git switch f41 + # install the build dependencies for the kernel, if you haven't already + sudo dnf builddep kernel.spec + # name this the 'bsb' build sed -i 's/# define buildid .*/%define buildid .bsb/g' kernel.spec ``` From 7672eb111fdfd7828221681743e7c0d4ae2fe1d6 Mon Sep 17 00:00:00 2001 From: Sinus Date: Sat, 5 Apr 2025 15:05:47 +0000 Subject: [PATCH 37/82] Update VRCSDK Patch info --- content/docs/vrchat/unity.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/content/docs/vrchat/unity.md b/content/docs/vrchat/unity.md index d2bdd1e..2128675 100644 --- a/content/docs/vrchat/unity.md +++ b/content/docs/vrchat/unity.md @@ -59,14 +59,20 @@ exec flatpak run com.unity.UnityHub "$@" --> ## World & Avatar SDK +Out of the box, Build & Test doesn't work, for both Avatars and Worlds. Thankfully, we maintain Linux-specific patches, which you can install with ALCOM like any other VCC package. -The VRChat Worlds SDK fails to build the assetbundle and Build and Test doesn't work for either SDK. +{{% hint info %}} + +**Note**: Try to install the latest VRCSDK and the latest LinuxVRChatSDKPatch. +But if you _must_ use VRCSDK version 3.7.5 and below, install LinuxVRChatSDKPatch version 0.0.4. + +{{% /hint %}} > ⚠️ **WARNING** \ > This modifies the VRChat SDK using [Harmony](https://github.com/pardeike/Harmony) to properly work on Linux. \ > This is directly against the VRChat Terms of Service. -Patches for both the Worlds and Avatars SDK are available: https://github.com/BefuddledLabs/LinuxVRChatSDKPatch ([VCC](https://befuddledlabs.github.io/LinuxVRChatSDKPatch/)) +These patches for both the Worlds and Avatars SDK are available through this [LinuxVRChatSDKPatch VCC page](https://befuddledlabs.github.io/LinuxVRChatSDKPatch/), or the [source on GitHub](https://github.com/BefuddledLabs/LinuxVRChatSDKPatch) ## Troubleshooting From 5468b2722e4ab7133c20317c2262d8b234e1270c Mon Sep 17 00:00:00 2001 From: bredo Date: Sat, 5 Apr 2025 14:37:41 +1300 Subject: [PATCH 38/82] resonite: add mention of Linux native build removal --- content/docs/resonite/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/resonite/_index.md b/content/docs/resonite/_index.md index 3dd1f3a..633b459 100644 --- a/content/docs/resonite/_index.md +++ b/content/docs/resonite/_index.md @@ -7,7 +7,7 @@ weight: 50 {{% hint info %}} -**Note**: The Linux-native version of Resonite, amid deprioritization of developer time to fix its numerous issues, was put on indefinite hold in August 2024. This document only covers running under Proton. +**Note**: The Linux-native version of Resonite, amid deprioritization of developer time to fix its numerous issues, was put on indefinite hold in August 2024 and later removed in March 2025. This document only covers running under Proton. {{% /hint %}} From bc19750874ee9d220de049efc6008856897b63dc Mon Sep 17 00:00:00 2001 From: bredo Date: Sat, 5 Apr 2025 14:38:21 +1300 Subject: [PATCH 39/82] resonite: remove mention of linux binary download Steam will now automatically use compatibility tools for Resonite post removal of the Linux native build --- content/docs/resonite/_index.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/content/docs/resonite/_index.md b/content/docs/resonite/_index.md index 633b459..e49601c 100644 --- a/content/docs/resonite/_index.md +++ b/content/docs/resonite/_index.md @@ -11,14 +11,6 @@ weight: 50 {{% /hint %}} -{{% hint warning %}} - -Despite the above deprecation, Steam will still download the native Linux binary by default. - -Make sure you have a compatibility tool selected (e.g. GE-Proton-RTSP) before launching Resonite. - -{{% /hint %}} - The current recommended Proton variant is [**GE-Proton-RTSP**](https://github.com/SpookySkeletons/proton-ge-rtsp/releases). [OpenComposite](https://lvra.gitlab.io/docs/fossvr/opencomposite/) should now provide a close-to-flawless experience on most controllers and when using hand tracking. From ae3dc5372c3d277b0a6c5e84bb6ff1a5f70efb08 Mon Sep 17 00:00:00 2001 From: Sapphire Date: Tue, 8 Apr 2025 21:12:33 +0000 Subject: [PATCH 40/82] Add Monado display troubleshooting --- content/docs/fossvr/monado/_index.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/content/docs/fossvr/monado/_index.md b/content/docs/fossvr/monado/_index.md index 737a817..70dfbbf 100644 --- a/content/docs/fossvr/monado/_index.md +++ b/content/docs/fossvr/monado/_index.md @@ -35,4 +35,16 @@ OpenComposite is REQUIRED to operate Monado in conjunction with Steam games. Pro ## Envision -[Envision](/docs/fossvr/envision/) provides a fairly low-barrier setup and development of both Monado and OpenComposite on most any modern distro. \ No newline at end of file +[Envision](/docs/fossvr/envision/) provides a fairly low-barrier setup and development of both Monado and OpenComposite on most any modern distro. + +# Troubleshooting + +## [NVIDIA-specific] "NVIDIA: No allowlisted displays found!" + +This may be caused by a few different issues: + - NVIDIA driver misnaming the display: If you see a display simply named "NVIDIA" in the output, the NVIDIA driver may be using a fallback name. + This can be worked around by setting the environment variable `XRT_COMPOSITOR_FORCE_NVIDIA_DISPLAY="NVIDIA"`. + - HMD display completely missing from the list: Try unplugging and replugging the power adapter. + +## "vkAcquireXlibDisplayEXT: VK_ERROR_UNKNOWN (0x000058b7a0764a80)" +Try unplugging and replugging the power adapter. \ No newline at end of file From a1bc2b0ad62f956bf64416eb0f5ad8fff8f50e55 Mon Sep 17 00:00:00 2001 From: Sapphire Date: Thu, 10 Apr 2025 18:23:49 -0500 Subject: [PATCH 41/82] fossvr/wivrn: Add SlimeVR section --- content/docs/fossvr/wivrn/_index.md | 38 +++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/content/docs/fossvr/wivrn/_index.md b/content/docs/fossvr/wivrn/_index.md index e86ea62..4ad3376 100644 --- a/content/docs/fossvr/wivrn/_index.md +++ b/content/docs/fossvr/wivrn/_index.md @@ -68,6 +68,44 @@ Manual steps: adb shell am start -a android.intent.action.VIEW -d "wivrn+tcp://127.0.0.1" org.meumeu.wivrn ``` +## WiVRn + SlimeVR trackers + +To use SlimeVR trackers through WiVRn, you currently must use a [fork](https://github.com/notpeelz/WiVRn) of WiVRn: + +### Usage with Envision + +To use this fork within Envision, edit these fields in your profile: +- XR Service Repo: `https://github.com/notpeelz/WiVRn.git` +- XR Service Branch: `solarxr-patches` + +Then save and clean build the profile. + +### NixOS setup +Override the `wivrn` package from nixpkgs with something resembling the following, replacing `[COMMIT HASH HERE]` with the latest commit hash from https://github.com/notpeelz/WiVRn/commits/solarxr-patches and filling in the correct src hash. Do note you may need to adapt this depending on how you install WiVRn: +```nix +{ pkgs, lib, ... }: + +{ + services.wivrn = { + enable = true; + defaultRuntime = true; + package = pkgs.wivrn.overrideAttrs (old: rec { + version = "[COMMIT HASH HERE]"; + src = lib.fetchFromGitHub { + owner = "notpeelz"; + repo = "WiVRn"; + rev = version; + # This will throw an error when evaluating and give you the correct hash - put that here + hash = ""; + }; + cmakeFlags = old.cmakeFlags ++ [ + (lib.cmakeBool "WIVRN_FEATURE_SOLARXR" true) + ]; + }); + }; +} +``` + ## WiVRn + Lighthouse driver This section covers using WiVRn with any Lighthouse-tracked device: Index/Vive controllers, Vive/Tundra trackers, etc. From 3a5d7721278b0851883e3e28931159a61aabd882 Mon Sep 17 00:00:00 2001 From: Sapphire Date: Thu, 10 Apr 2025 19:02:31 -0500 Subject: [PATCH 42/82] fossvr/wivrn: Add NixOS instructions for lighthouse usage --- content/docs/fossvr/wivrn/_index.md | 34 +++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/content/docs/fossvr/wivrn/_index.md b/content/docs/fossvr/wivrn/_index.md index 4ad3376..7e03540 100644 --- a/content/docs/fossvr/wivrn/_index.md +++ b/content/docs/fossvr/wivrn/_index.md @@ -108,13 +108,12 @@ Override the `wivrn` package from nixpkgs with something resembling the followin ## WiVRn + Lighthouse driver -This section covers using WiVRn with any Lighthouse-tracked device: Index/Vive controllers, Vive/Tundra trackers, etc. - -WiVRn version: 0.19+ +This section covers using WiVRn 0.19 and newer with any Lighthouse-tracked device (such as Index/Vive controllers, Vive/Tundra trackers, etc.) You must have SteamVR installed (no need to run it). -In Envision, set WiVRn Profile as such: +### Envision +Set WiVRn Profile as such: - XR Service CMake Flags: - `WIVRN_FEATURE_STEAMVR_LIGHTHOUSE=ON` - Environment Variables: @@ -123,14 +122,31 @@ In Envision, set WiVRn Profile as such: Perform a **Clean Build** after changing the CMake flags! -If not using Envision, simply pass `-DWIVRN_FEATURE_STEAMVR_LIGHTHOUSE=ON` to CMake and export the above environment variables before starting `wivrn-server`. +### NixOS +Override the `wivrn` package: +```nix +{ + services.wivrn = { + enable = true; + defaultRuntime = true; + package = pkgs.wivrn.overrideAttrs (old: { + cmakeFlags = old.cmakeFlags ++ [ + (lib.cmakeBool "WIVRN_FEATURE_STEAMVR_LIGHTHOUSE" true) + ]; + }); + }; +} +``` + +### Manual +Simply pass `-DWIVRN_FEATURE_STEAMVR_LIGHTHOUSE=ON` to CMake and export the above environment variables before starting `wivrn-server`. + +### Usage tips + +Discovery happens only on first connection, so be sure to **have all Lighthouse devices powered on and in line-of-sight of your base stations before connecting the headset!** Once a device is discovered, you may power it off and on at-will. You can use [Motoc](/docs/fossvr/motoc/) to calibrate the two tracking technologies to work together. -Discovery happens only on first connection, so be sure to **have all Lighthouse devices powered on and in line-of-sight of your base stations before connecting the headset!** - -Once a device is discovered, you may power it off and on at-will. - Once video appears in the headset, check `motoc monitor` to make sure your devices all show up. If one or more devices are missing, try: From 6132a72444bc970789f7805a6d5bd61bc9783743 Mon Sep 17 00:00:00 2001 From: Sapphire Date: Thu, 10 Apr 2025 21:09:06 -0500 Subject: [PATCH 43/82] fossvr/wivrn: Add env vars for NixOS lighthouse setup --- content/docs/fossvr/wivrn/_index.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/content/docs/fossvr/wivrn/_index.md b/content/docs/fossvr/wivrn/_index.md index 7e03540..a03909c 100644 --- a/content/docs/fossvr/wivrn/_index.md +++ b/content/docs/fossvr/wivrn/_index.md @@ -123,7 +123,7 @@ Set WiVRn Profile as such: Perform a **Clean Build** after changing the CMake flags! ### NixOS -Override the `wivrn` package: +Override the `wivrn` package and launch wivrn-server with the required environment variables: ```nix { services.wivrn = { @@ -134,6 +134,10 @@ Override the `wivrn` package: (lib.cmakeBool "WIVRN_FEATURE_STEAMVR_LIGHTHOUSE" true) ]; }); + monadoEnvironment = { + WIVRN_USE_STEAMVR_LH = "1"; + LH_DISCOVER_WAIT_MS = "6000"; + }; }; } ``` From 524ea9ee271df386787c0fc0d1935a21e0daba8f Mon Sep 17 00:00:00 2001 From: Mhowser Date: Mon, 14 Apr 2025 17:44:24 +0000 Subject: [PATCH 44/82] Envision: Warn NixOS users --- content/docs/fossvr/envision/_index.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/content/docs/fossvr/envision/_index.md b/content/docs/fossvr/envision/_index.md index 4c84684..54c38b0 100644 --- a/content/docs/fossvr/envision/_index.md +++ b/content/docs/fossvr/envision/_index.md @@ -15,12 +15,16 @@ Envision is a graphical app that acts as an orchestrator to get a full [Monado]( Envision attempts to construct a working runtime with both a native OpenXR and an OpenVR API, provided by [OpenComposite](/docs/fossvr/opencomposite/), for client aplications to utilize. Please note the OpenVR implementation is incomplete and contains only what's necessary to run most games for compatibility. If you plan to implement software, utilize the OpenXR API, specification [here](https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html). -{{% hint danger %}} +{{% hint warning %}} **Warning** Envision is still considered alpha-quality and highly experimental. {{% /hint %}} +{{% hint danger %}} +We recommend **against** using Envision if your distro is NixOS. See [our NixOS page](/docs/distros/nixos/#envision) for more info. +{{% /hint %}} + You can download the latest AppImage snapshot from [GitLab Pipelines](https://gitlab.com/gabmus/envision/-/pipelines?ref=main&status=success). If you are on Arch, You can use the [AUR package](https://aur.archlinux.org/packages/envision-xr-git) `envision-xr-git` From 9a7a5cb6bac8e496000084919e0635c86e42ed82 Mon Sep 17 00:00:00 2001 From: "Romain D." Date: Fri, 21 Feb 2025 12:46:54 +0000 Subject: [PATCH 45/82] SlimeVR: add SolarXR instructions for WiVRn --- content/docs/slimevr/_index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/docs/slimevr/_index.md b/content/docs/slimevr/_index.md index fae1497..d7615d2 100644 --- a/content/docs/slimevr/_index.md +++ b/content/docs/slimevr/_index.md @@ -64,6 +64,8 @@ To use this method, you need to use SlimeVR v0.14.0 or newer and if not availabl For Monado, you need compile this fork: `https://gitlab.freedesktop.org/rcelyte/monado.git`, branch `solarxr-integration`. You can easily build Monado from this specific branch via [Envision](../fossvr/envision/), by modifying "XR Service Repo" and "XR Service Branch" in your build profile accordingly. +For WiVRn, you need to compile this fork: `https://github.com/notpeelz/WiVRn.git`, branch `solarxr-patches`. You also need the `WIVRN_FEATURE_SOLARXR` CMake flag set to `ON`. + **Important**: Make sure to launch SlimeVR first before launching Monado/Envision. **Important note #1**: Do not stop the SlimeVR server during operation, as driver and tracker hot-plugging are not yet supported. From 62e4e41a726d72176014cf4fa7c12bfb6098b6df Mon Sep 17 00:00:00 2001 From: Lennart Kroll <11020083-lkroll@users.noreply.gitlab.com> Date: Fri, 11 Apr 2025 17:48:13 +0200 Subject: [PATCH 46/82] Add specific information for Void Linux --- content/docs/distros/Void_Linux.md | 38 ++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 content/docs/distros/Void_Linux.md diff --git a/content/docs/distros/Void_Linux.md b/content/docs/distros/Void_Linux.md new file mode 100644 index 0000000..4e5f6bc --- /dev/null +++ b/content/docs/distros/Void_Linux.md @@ -0,0 +1,38 @@ +--- +title: Void Linux +--- + +# Void Linux + +## Envision + +The [official Appimage](https://gitlab.com/gabmus/envision#download-envision) is the easiest way to get Envision working on Void Linux. +Just make sure you have all necessary dependencies installed for building your desired profile. +Envision will warn you if some are missing. +Except for OpenXR these are standard packages which can be found in the Void repositories, you may need `-devel` for some packages like `libbsd-devel` for example. +Getting OpenXR can be a bit tricky, but you can follow the instructions for installing OpenXR on this page to get you started. + +## Installing OpenXR + +As of writing (April 2025) OpenXR is not available in the Void Linux repositories, you can however build and install it yourself using `xbps-src`. +There is a pending PR over on the void-packages Github page: https://github.com/void-linux/void-packages/pull/54896. + +In the meantime you can use the OpenXR template from the PR to build and install OpenXR locally. +Just clone the void-packages repo with the OpenXR template and install using the following steps from within the root dir: + +```bash +./xbps-src binary-bootstrap +./xbps-src pkg openxr +xi openxr openxr-devel +``` + +## Building Monado + +Monado may appear to build fine but if you are missing some dependencies only the null compositor will work. +To make a successful build make sure you have the following dependencies installed: + +```bash +sudo xbps-install pkg-config python3 wayland-devel glslang vulkan-loader-devel libglvnd-devel eigen libusb-devel eudev-libudev-devel v4l-utils-devel libxcb-devel wayland-devel libX11-devel hidapi-devel libopencv-devel libjpeg-turbo-devel libbluetooth-devel SDL2-devel cJSON-devel gstreamer1-devel gst-plugins-base1-devel +``` + +There is another [PR](https://github.com/void-linux/void-packages/pull/53279) with templates for xrgears, Monado and libsurvive that you can use, however it is easier and recommended to just use Envision to build everything for you. From ec854e370f4bad754cec1c06c08c5581d053b814 Mon Sep 17 00:00:00 2001 From: stella Date: Mon, 14 Apr 2025 18:18:54 +0000 Subject: [PATCH 47/82] Add troubleshooting step for Valve Index microphone --- content/docs/hardware/_index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index 351a1ac..24e4c5d 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -97,6 +97,7 @@ A non-comprehensive table of various VR/XR devices and the drivers that support - **Vive Pro** creates HDMI Output Source after startup of SteamVR/Monado/etc. Use it instead of Vive Pro USB Audio Source, since the audio might appear distorted. - **Valve Index** audio output should be set to 48khz or no audio will output. - **Valve Index** may bug out once per boot, resulting in VR refusing to start, or your DE seeing it as a normal monitor. Just unplug and replug the barrel connector that provides power to the HMD. +- **Valve Index** may also exhibit unexpected activity with its microphone. If the microphone doesn't transmit at all during regular VR use, consider changing the DisplayPort slot the headset is currently plugged into. Also, as a reminder, the Index mic only works if the headset is actively being used to display something. - **Vive Pro Eye** HMD functional, eyechip WIP. - **Pimax** initialization code WIP. Distortion matrix dump work in progress. - Eyetrack VR and Project Babble will both be implemented through [oscavmgr](https://github.com/galister/oscavmgr) to emit proper unified flexes over OSC. From 515dbf8d0af1fa183ce1302a5b9be038686612fa Mon Sep 17 00:00:00 2001 From: Sapphire Date: Mon, 21 Apr 2025 08:54:52 -0500 Subject: [PATCH 48/82] fossvr/opencomposite: Add non-tracker-device-as-tracker section --- content/docs/fossvr/opencomposite/_index.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/content/docs/fossvr/opencomposite/_index.md b/content/docs/fossvr/opencomposite/_index.md index 28d468c..70d1164 100644 --- a/content/docs/fossvr/opencomposite/_index.md +++ b/content/docs/fossvr/opencomposite/_index.md @@ -17,7 +17,21 @@ OpenComposite is required for Steam Play games to work in VR regardless of API. Contributions to improve the OpenVR to OpenXR mapping are welcome. -## Rebinding Controls +## Forcing additional devices as trackers + +OpenComposite has the environment variable `OPENCOMPOSITE_TRACKER_SERIALS` to allow using non-tracker devices as trackers in SteamVR games. The expected format is as follows: `serial1;serial2` where each 'serial' is a device serial like `LHR-00000000` or `WiVRn HMD`. You can set this on games by setting this launch option in Steam: `env OPENCOMPOSITE_TRACKER_SERIALS="LHR-00000001;LHR-00000002" %command%`. + +To obtain info for lighthouse devices, you may look at the top of the Monado stdout when using steamvr_lh. For other types of devices there are multiple ways of obtaining device serials: + +- OpenComposite log file + + The OpenComposite log file at `~/.local/state/OpenComposite/logs/opencomposite.log` will log all seen devices when checking for trackers, so you can search for `Checking for generic trackers...` in the log file and look below for `Found usable xdev`. + +- motoc + + motoc has the `show` subcommand for viewing all device names, serials, and positions relative to the space origin. + +## Rebinding controls > Changing OpenVR bindings is currently a very manual process. This will change in the future. From d6f6ea0e57cf32b34b3631554bde6b4f3b29efd9 Mon Sep 17 00:00:00 2001 From: Sapphire Date: Tue, 22 Apr 2025 14:56:31 -0500 Subject: [PATCH 49/82] fossvr/monado: Recommend forcing Wayland direct mode on NVIDIA if acquiring display fails --- content/docs/fossvr/monado/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/fossvr/monado/_index.md b/content/docs/fossvr/monado/_index.md index 70dfbbf..36ce9da 100644 --- a/content/docs/fossvr/monado/_index.md +++ b/content/docs/fossvr/monado/_index.md @@ -47,4 +47,4 @@ This may be caused by a few different issues: - HMD display completely missing from the list: Try unplugging and replugging the power adapter. ## "vkAcquireXlibDisplayEXT: VK_ERROR_UNKNOWN (0x000058b7a0764a80)" -Try unplugging and replugging the power adapter. \ No newline at end of file +Try unplugging and replugging the power adapter. If the issue still occurs and you are on a Wayland session, try setting the environment variable `XRT_COMPOSITOR_FORCE_WAYLAND_DIRECT=1`. \ No newline at end of file From 1ed840500e659decb1b0a1ea0a299c4abe186e91 Mon Sep 17 00:00:00 2001 From: Sapphire Date: Tue, 22 Apr 2025 14:50:31 -0500 Subject: [PATCH 50/82] fossvr/wivrn: Fix missing Envision CMake option step for SolarXR --- content/docs/fossvr/wivrn/_index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/docs/fossvr/wivrn/_index.md b/content/docs/fossvr/wivrn/_index.md index a03909c..6a812bb 100644 --- a/content/docs/fossvr/wivrn/_index.md +++ b/content/docs/fossvr/wivrn/_index.md @@ -77,6 +77,7 @@ To use SlimeVR trackers through WiVRn, you currently must use a [fork](https://g To use this fork within Envision, edit these fields in your profile: - XR Service Repo: `https://github.com/notpeelz/WiVRn.git` - XR Service Branch: `solarxr-patches` +- XR Service CMake Flags: Add `WIVRN_FEATURE_SOLARXR=ON` Then save and clean build the profile. From e5276b5b705d0f738fd84856cfa18dedb8b3b795 Mon Sep 17 00:00:00 2001 From: hypevhs <4498312-hypevhs@users.noreply.gitlab.com> Date: Fri, 30 Aug 2024 02:00:39 +0000 Subject: [PATCH 51/82] VRChat EAC: Rewrite EAC startup errors are really rare now. Let's write the article in the past tense. --- content/docs/vrchat/eac.md | 40 +++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/content/docs/vrchat/eac.md b/content/docs/vrchat/eac.md index 6e62018..3134650 100644 --- a/content/docs/vrchat/eac.md +++ b/content/docs/vrchat/eac.md @@ -5,26 +5,58 @@ title: Easy Anti-Cheat # Easy Anti-Cheat -Sometimes, seemingly randomly, you can get an EAC error during the VRChat startup/login screen. It looks like a message box, with the title "Anti-cheat Error", no actual message text, and a single button labeled "Quit". +Running VRChat on Linux *used to be* prone to unwarranted EAC errors. Sometimes, seemingly randomly, you would get an EAC error during the VRChat startup/login screen. It looks like a message box, with the title "Anti-cheat Error", a message referring to a filepath that failed to validate integrity, and a single button labeled "Quit". This would trigger even when all files were unmodified. -## Recommended Workaround +Thankfully, at some point in October or November 2024, **these EAC errors resolved themselves**. While it is still possible to get EAC errors for other reasons, the race condition that made it a coin-flip on startup no longer plagues us. + +If you are running into EAC errors still, try these options: +- Trigger a reinstall of the EAC runtime by moving the [Proton prefix for VRChat](https://www.pcgamingwiki.com/wiki/VRChat#Configuration_file.28s.29_location) somewhere else, forcing Steam to regenerate it on next launch +- Make sure you are not blocking the EAC domains, such as `modules-cdn.eac-prod.on.epicgames.com` +- Do not set `SDL_VIDEODRIVER` env var anywhere - this breaks the splash screen +- Do not use the `VR_OVERRIDE` env var + +The below workaround shouldn't be necessary anymore, but is kept here in case the issue comes back someday. + +## Workaround Wrapper script for starting VRChat: [startvrc.sh on GitHub](https://gist.github.com/galister/ca63a5795694e4c839a8e7f4bb8a35bc) - Set startup options for VRChat: `/path/to/startvrc.sh %command%` If you're using extra env vars, they should go first: `PRESSURE_VESSEL_FILESYSTEMS_RW=/run/user/1000/monado_comp_ipc /path/to/startvrc.sh %command%` + From 394497d81ee1d03babba0e3cceef77de643a0ca6 Mon Sep 17 00:00:00 2001 From: hypevhs <4498312-hypevhs@users.noreply.gitlab.com> Date: Fri, 25 Apr 2025 18:47:52 -0500 Subject: [PATCH 52/82] CI: Ignore PCGamingWiki --- .htmltest.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.htmltest.yml b/.htmltest.yml index d4f1be6..894e641 100644 --- a/.htmltest.yml +++ b/.htmltest.yml @@ -8,6 +8,8 @@ IgnoreURLs: # For "Edit this page" and "Last modified by": - "https://gitlab.com/lvra/lvra.gitlab.io/-/edit" - "https://gitlab.com/lvra/lvra.gitlab.io/-/commit" +# Uses Cloudflare to block bots: +- "https://www.pcgamingwiki.com/" # IgnoreDirs: # - "lib" CacheExpires: "6h" From 1b85369fd8c8fa28c4aae86cd85864ed06eacf73 Mon Sep 17 00:00:00 2001 From: DeltaNeverUsed Date: Mon, 28 Apr 2025 11:13:26 +0200 Subject: [PATCH 53/82] feat: add VRCFaceTracking.Avalonia as an alternative option to OscAvMgr --- content/docs/hardware/_index.md | 4 ++-- content/docs/vrchat/facetracking.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index 24e4c5d..cf4bf53 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -82,8 +82,8 @@ A non-comprehensive table of various VR/XR devices and the drivers that support | **Trackers** | | | | | Vive/Tundra trackers | ✅ (native or spacecal) | ✅ (native or motoc) | ✅ (motoc) | | SlimeVR trackers | ✅ | ✅ (OSC + experimental driver) | ✅ | -| Project Babble | ✅ (oscavmgr) | ✅ (oscavmgr) | ✅ (oscavmgr) | -| Eyetrack VR | ✅ (oscavmgr) | ✅ (oscavmgr) | ✅ (oscavmgr) | +| Project Babble | ✅ ([OscAvMgr](https://github.com/galister/oscavmgr) or [VRCFT.Avalonia](https://github.com/dfgHiatus/VRCFaceTracking.Avalonia)) | ✅ ([OscAvMgr](https://github.com/galister/oscavmgr) or [VRCFT.Avalonia](https://github.com/dfgHiatus/VRCFaceTracking.Avalonia)) | ✅ ([OscAvMgr](https://github.com/galister/oscavmgr) or [VRCFT.Avalonia](https://github.com/dfgHiatus/VRCFaceTracking.Avalonia)) | +| Eyetrack VR | ✅ ([OscAvMgr](https://github.com/galister/oscavmgr) or [VRCFT.Avalonia](https://github.com/dfgHiatus/VRCFaceTracking.Avalonia)) | ✅ ([OscAvMgr](https://github.com/galister/oscavmgr) or [VRCFT.Avalonia](https://github.com/dfgHiatus/VRCFaceTracking.Avalonia)) | ✅ ([OscAvMgr](https://github.com/galister/oscavmgr) or [VRCFT.Avalonia](https://github.com/dfgHiatus/VRCFaceTracking.Avalonia)) | | Mercury Handtrack | 🚧 (Monado SteamVR plugin, win only) | ✅ (survive driver only) | ❌ | | Ultraleap v1 | ? | ✅ (with `openxr-layer-ultraleap`) | ? | | Lucid VR Gloves | ? | ✅ (survive driver only) | ❌ | diff --git a/content/docs/vrchat/facetracking.md b/content/docs/vrchat/facetracking.md index 71f07a7..f75ef8d 100644 --- a/content/docs/vrchat/facetracking.md +++ b/content/docs/vrchat/facetracking.md @@ -5,4 +5,4 @@ title: Face & Eye Tracking # Face & Eye Tracking -If you have a face and/or eye tracking solution and want to use it for social vr, one option is to use [OscAvMgr](https://github.com/galister/oscavmgr), which fills the same role as VRCFT does on Windows. \ No newline at end of file +If you have a face and/or eye tracking solution and want to use it for social vr, one option is to use [OscAvMgr](https://github.com/galister/oscavmgr). Another alternative is the cross-platform port of VRCFT, [VRCFaceTracking.Avalonia](https://github.com/dfgHiatus/VRCFaceTracking.Avalonia). \ No newline at end of file From 26d8780e2568bdb581c9f0024001400d08e7b814 Mon Sep 17 00:00:00 2001 From: Alicja Michalska Date: Sat, 26 Apr 2025 07:55:55 +0200 Subject: [PATCH 54/82] docs/wmr_controllers: Add warning about firmware --- content/docs/fossvr/envision/wmr_controllers_on_arch.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/content/docs/fossvr/envision/wmr_controllers_on_arch.md b/content/docs/fossvr/envision/wmr_controllers_on_arch.md index 6d9aff9..bb9cdf4 100644 --- a/content/docs/fossvr/envision/wmr_controllers_on_arch.md +++ b/content/docs/fossvr/envision/wmr_controllers_on_arch.md @@ -67,3 +67,12 @@ paru -S envision-xr-git - Leave Monado open. - Start the new game. - Always turn on the controllers **before** starting Envision. + +- Update controller firmware while running Windows. It's necessary for controllers to work in Linux, updating them from Linux is currently impossible. +- Make sure that you **don't factory-reset the controllers** (performed by long-pressing the pairing button when controllers are off). This action restores the factory firmware version. +- If monado fails to start with the following error, you likely need to update the firmware in Mixed Reality Portal: + ``` + WARN [wmr_controller_send_fw_cmd] Controller fw read timed out after 250 ms + ERROR [wmr_bt_controller_create] WMR Controller (Bluetooth): Failed to create controller + ERROR [wmr_create_bt_controller] Failed to create WMR controller (Bluetooth) + ``` \ No newline at end of file From 6c9d7d9a67bc1189286b91c4f473e80647241476 Mon Sep 17 00:00:00 2001 From: hypevhs <4498312-hypevhs@users.noreply.gitlab.com> Date: Thu, 1 May 2025 22:00:39 -0500 Subject: [PATCH 55/82] OpenSUSE: SteamVR needs setcap --- content/docs/distros/OpenSUSE_Tumbleweed.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/content/docs/distros/OpenSUSE_Tumbleweed.md b/content/docs/distros/OpenSUSE_Tumbleweed.md index b0a4528..cf48886 100644 --- a/content/docs/distros/OpenSUSE_Tumbleweed.md +++ b/content/docs/distros/OpenSUSE_Tumbleweed.md @@ -8,4 +8,17 @@ title: OpenSUSE Tumbleweed - The OpenXR SDK package can be found in the [hardware:xr](https://build.opensuse.org/package/show/hardware:xr/OpenXR-SDK) [Open Build service](https://en.opensuse.org/openSUSE:Build_Service_FAQ) project. To build [Envision](/docs/fossvr/envision/) profiles, the devel package will also have to be installed. - The set of [Monado Vulkan Layers](/docs/hardware/) is provided by a [community package](https://build.opensuse.org/package/show/home:Etch-9:xr/monado-vulkan-layers-git). -Any other package in hardware:xr is really outdated and should not be used. Additional information on third-party repositories can be found here: [Additional package repositories (opensuse.org)](https://en.opensuse.org/Additional_package_repositories) \ No newline at end of file +Any other package in hardware:xr is really outdated and should not be used. Additional information on third-party repositories can be found here: [Additional package repositories (opensuse.org)](https://en.opensuse.org/Additional_package_repositories) + +## SteamVR + +SteamVR may give you a "SteamVR setup is incomplete" error on OpenSUSE Tumbleweed. +This happens because SteamVR needs to run the `setcap`/`getcap` programs, but can't find them. + +To fix it, run these commands: + +```sh +sudo zypper install libcap-progs +sudo ln -s /sbin/getcap /usr/bin/ +sudo ln -s /sbin/setcap /usr/bin/ +``` \ No newline at end of file From 2f2d97a3eb82f4a6866664ddbec5c75e89d4550a Mon Sep 17 00:00:00 2001 From: xytovl Date: Tue, 6 May 2025 08:03:18 +0000 Subject: [PATCH 56/82] Update WiVRn install recommendation --- content/docs/fossvr/wivrn/_index.md | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/content/docs/fossvr/wivrn/_index.md b/content/docs/fossvr/wivrn/_index.md index 6a812bb..c4bd957 100644 --- a/content/docs/fossvr/wivrn/_index.md +++ b/content/docs/fossvr/wivrn/_index.md @@ -15,9 +15,26 @@ WiVRn is based on [Monado](/docs/fossvr/monado/) and can be used with [OpenCompo ## Installing WiVRn -We recommend using [Envision](/docs/fossvr/envision/) to install and launch WiVRn & OpenComposite. Envision will handle all configuration seamlessly and avoids many of the pitfalls of a manual setup. +We recommend using distribution packages when available or the [WiVRn Flatpak](https://flathub.org/apps/io.github.wivrn.wivrn). -Alternatively, you can use the [WiVRn Flatpak](https://flathub.org/apps/io.github.wivrn.wivrn) which includes OpenComposite as part of it. Processes in Flatpak cannot take advantage of setcap, and so your performance may suffer when compared to Envision. +### Arch Linux + +Packages are available on [AUR](https://wiki.archlinux.org/title/Arch_User_Repository), you will need the following packages: + +* `wivrn-server` and `wivrn-dashboard` for base feature + GUI (latest release), or `wivrn-full-git` for development version +* `opencomposite-git` or `xrizer-git` for compatibility with OpenVR and proton + +### Gentoo Linux + +Packages are available on [Guru](https://wiki.gentoo.org/wiki/Project:GURU), you will need `media-libs/wivrn` and `media-libs/opencomposite` + +### Flatpak (all distributions) + +The [WiVRn Flatpak](https://flathub.org/apps/io.github.wivrn.wivrn) has the latest released version. For development releases, you can download the `wivrn-flatpak-x86_64` artifact from Github [Build](https://github.com/WiVRn/WiVRn/actions/workflows/Build.yml?query=branch%3Amaster) action + +### Envision (guided build) + +You can use [Envision](/docs/fossvr/envision/) to install and launch WiVRn & OpenComposite. ## General WiVRn Notes @@ -25,7 +42,7 @@ WiVRn uses Avahi for network discovery. Ensure it is running with the following ```bash systemctl enable --now avahi-daemon ``` -(If Avahi is not available, the IP address of the server must be entered into the client.) +If Avahi is not available, `--no-publish-service` bypasses it, and the IP address of the server must be entered into the client. If a firewall is installed, make sure ports 5353/UDP and 9757/UDP+TCP are open for Avahi and WiVRn itself, respectively. @@ -52,8 +69,6 @@ flatpak override --user --env=PRESSURE_VESSEL_FILESYSTEMS_RW=/run/user/1000/wivr You can use WiVRn with a cable instead of Wi-Fi. Use a 5Gbps cable & port at the very least. -WiVRn version: 0.19+ - Using Envision: - Connect the headset via USB. - In Envision, click the `Start WiVRn Client (Wired)` button. From 2df747a604c0f590be41ad58ca1b1871f4cf3672 Mon Sep 17 00:00:00 2001 From: Sapphire Date: Tue, 6 May 2025 03:36:09 -0500 Subject: [PATCH 57/82] wivrn: Add more distro packages, revise wired connection section, minor other edits --- content/docs/fossvr/wivrn/_index.md | 48 +++++++++++++++++++---------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/content/docs/fossvr/wivrn/_index.md b/content/docs/fossvr/wivrn/_index.md index c4bd957..67832aa 100644 --- a/content/docs/fossvr/wivrn/_index.md +++ b/content/docs/fossvr/wivrn/_index.md @@ -11,11 +11,11 @@ title: WiVRn > WiVRn wirelessly connects a standalone VR headset to a Linux computer. You can then play PCVR games on the headset while processing is done on the computer. -WiVRn is based on [Monado](/docs/fossvr/monado/) and can be used with [OpenComposite](/docs/fossvr/opencomposite/) to support a majority of titles available for SteamVR. A wide range of standalone headsets are supported. +WiVRn is based on [Monado](/docs/fossvr/monado/) and can be used with [OpenComposite](/docs/fossvr/opencomposite/) or [xrizer](https://github.com/Supreeeme/xrizer) to support a majority of titles available for SteamVR. A wide range of standalone headsets are supported. ## Installing WiVRn -We recommend using distribution packages when available or the [WiVRn Flatpak](https://flathub.org/apps/io.github.wivrn.wivrn). +We recommend using distribution packages when available (see below) or the [WiVRn Flatpak](https://flathub.org/apps/io.github.wivrn.wivrn) when one is unavailable. ### Arch Linux @@ -24,17 +24,29 @@ Packages are available on [AUR](https://wiki.archlinux.org/title/Arch_User_Repos * `wivrn-server` and `wivrn-dashboard` for base feature + GUI (latest release), or `wivrn-full-git` for development version * `opencomposite-git` or `xrizer-git` for compatibility with OpenVR and proton +### Fedora + +The `wivrn` package will automatically pull `wivrn-dashboard` and `opencomposite` as dependencies, it can be installed with `sudo dnf install wivrn`. + +To make use of patented codecs for video encoding like H264/H265, you must [install the codecs from RPMFusion](https://rpmfusion.org/Howto/Multimedia). + ### Gentoo Linux -Packages are available on [Guru](https://wiki.gentoo.org/wiki/Project:GURU), you will need `media-libs/wivrn` and `media-libs/opencomposite` +Packages are available on [Guru](https://wiki.gentoo.org/wiki/Project:GURU), you will need `media-libs/wivrn` and `media-libs/opencomposite`. + +### NixOS + +See [`services.wivrn`](https://search.nixos.org/options?channel=24.11&size=50&sort=relevance&type=packages&query=services.wivrn). ### Flatpak (all distributions) -The [WiVRn Flatpak](https://flathub.org/apps/io.github.wivrn.wivrn) has the latest released version. For development releases, you can download the `wivrn-flatpak-x86_64` artifact from Github [Build](https://github.com/WiVRn/WiVRn/actions/workflows/Build.yml?query=branch%3Amaster) action +The [WiVRn Flatpak](https://flathub.org/apps/io.github.wivrn.wivrn) has the latest released version and can be installed with `flatpak install io.github.wivrn.wivrn` or via your software centre application. + +For development releases, you can download the `wivrn-flatpak-x86_64` artifact from the GitHub [Build](https://github.com/WiVRn/WiVRn/actions/workflows/Build.yml?query=branch%3Amaster) action. ### Envision (guided build) -You can use [Envision](/docs/fossvr/envision/) to install and launch WiVRn & OpenComposite. +You can use [Envision](/docs/fossvr/envision/) to install and launch WiVRn & OpenComposite - this may be the easier route if you use SteamVR Lighthouse-tracked devices or SlimeVR trackers. ## General WiVRn Notes @@ -44,12 +56,14 @@ systemctl enable --now avahi-daemon ``` If Avahi is not available, `--no-publish-service` bypasses it, and the IP address of the server must be entered into the client. -If a firewall is installed, make sure ports 5353/UDP and 9757/UDP+TCP are open for Avahi and WiVRn itself, respectively. +If a firewall is installed, make sure ports 5353/UDP and 9757/UDP+TCP are open for Avahi and WiVRn respectively. If using Nvidia proprietary drivers older than 565, install the [Monado Vulkan Layers](https://gitlab.freedesktop.org/monado/utilities/vulkan-layers), otherwise games will crash with a segmentation fault. For audio in WiVRn, you will need to assign applications, or the system as a whole, to output audio to the virtual output "WiVRn" which is created upon connection between the server and the headset. +## Steam Flatpak + It is possible to use WiVRn Flatpak with Steam Flatpak, though Steam Flatpak isn't generally recommended for VR. If you are using Steam Flatpak, you just need to grant it access to the relevant paths: ```bash @@ -69,19 +83,19 @@ flatpak override --user --env=PRESSURE_VESSEL_FILESYSTEMS_RW=/run/user/1000/wivr You can use WiVRn with a cable instead of Wi-Fi. Use a 5Gbps cable & port at the very least. -Using Envision: +- Install adb on your system - usually the package is named `android-tools` or something similar. - Connect the headset via USB. -- In Envision, click the `Start WiVRn Client (Wired)` button. - - If it's not there, you may need to update Envision. +- Run `adb devices` in your terminal. +- If you have never authorised USB debugging from this computer before, put the headset on shortly and select 'Always allow USB debugging from this computer'. +Then depending on your installation method, follow these steps: -Manual steps: -- Connect the headset via USB. -- If WiVRn is running on the headset, close it now. -- While in the system lobby of the headset, run the following `adb` commands on the PC: - ```bash - adb reverse tcp:9757 tcp:9757 - adb shell am start -a android.intent.action.VIEW -d "wivrn+tcp://127.0.0.1" org.meumeu.wivrn - ``` +Using the dashboard: +- The 'Connect via USB' button under the pairing toggle should have a list of devices - select any one to initiate a wired connection. + +Using Envision: +- Click the `Start WiVRn Client (Wired)` button in Envision. + +Manual steps: See the [README](https://github.com/WiVRn/WiVRn/blob/master/README.md?plain=1#L114). ## WiVRn + SlimeVR trackers From 97cf4665184d55774c5c2a05fcf7acd27662a62f Mon Sep 17 00:00:00 2001 From: Sapphire Date: Tue, 6 May 2025 04:07:24 -0500 Subject: [PATCH 58/82] Add xrizer wiki page --- content/docs/fossvr/_index.md | 2 +- content/docs/fossvr/wivrn/_index.md | 2 +- content/docs/fossvr/xrizer.md | 58 +++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 content/docs/fossvr/xrizer.md diff --git a/content/docs/fossvr/_index.md b/content/docs/fossvr/_index.md index 33fefd2..2d04f97 100644 --- a/content/docs/fossvr/_index.md +++ b/content/docs/fossvr/_index.md @@ -12,7 +12,7 @@ If you want an alternative to SteamVR, there are a few options you can use, depe In either case, here are some related projects you might want to check out: -- [OpenComposite](/docs/fossvr/opencomposite/) allows you to run OpenVR games +- [xrizer](/docs/fossvr/xrizer/) and [OpenComposite](/docs/fossvr/opencomposite/) allow you to run OpenVR games - [Envision](/docs/fossvr/envision/) is a GUI to setup and run either Monado or WiVRn - [Stardust XR](/docs/fossvr/stardust/) is an XR environment to run 2D and (eventually) 3D apps - [WlxOverlay-S](/docs/fossvr/wlxoverlay-s/) is an overlay to access your desktop from VR + playspace mover diff --git a/content/docs/fossvr/wivrn/_index.md b/content/docs/fossvr/wivrn/_index.md index 67832aa..9079c1b 100644 --- a/content/docs/fossvr/wivrn/_index.md +++ b/content/docs/fossvr/wivrn/_index.md @@ -11,7 +11,7 @@ title: WiVRn > WiVRn wirelessly connects a standalone VR headset to a Linux computer. You can then play PCVR games on the headset while processing is done on the computer. -WiVRn is based on [Monado](/docs/fossvr/monado/) and can be used with [OpenComposite](/docs/fossvr/opencomposite/) or [xrizer](https://github.com/Supreeeme/xrizer) to support a majority of titles available for SteamVR. A wide range of standalone headsets are supported. +WiVRn is based on [Monado](/docs/fossvr/monado/) and can be used with [xrizer](/docs/fossvr/xrizer/) or [OpenComposite](/docs/fossvr/opencomposite/) to support a majority of titles available for SteamVR. A wide range of standalone headsets are supported. ## Installing WiVRn diff --git a/content/docs/fossvr/xrizer.md b/content/docs/fossvr/xrizer.md new file mode 100644 index 0000000..ebfce00 --- /dev/null +++ b/content/docs/fossvr/xrizer.md @@ -0,0 +1,58 @@ +--- +weight: 300 +title: xrizer +--- + +# xrizer +- [xrizer Git repository](https://github.com/Supreeeme/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. + +{{% hint warning %}} +**Application 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](https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html). +{{% /hint %}} + +## Using full body trackers + +{{% hint warning %}} +**This branch is a work-in-progress!** Unexpected problems may occur while in use, if you encounter issues while using this fork you should not report it upstream unless reproducible on the `main` branch of xrizer. + +If you would like a battle-tested solution, see [OpenComposite](/docs/fossvr/opencomposite/). +{{% /hint %}} + +Currently xrizer does not support full body tracking, however there is a **work-in-progress** [fork by RinLovesYou](https://github.com/RinLovesYou/xrizer/tree/experimental2) with support while using Monado. + +To use the above fork, follow these steps: + +### Envision +- Click the three dots next to the profile selector and select 'Edit profile' +- If a popup asks if you would like to duplicate the profile, click yes. +- Scroll down to 'OpenVR Compatibility' and set the following fields: + - OpenVR Compatibility Repo: `https://github.com/RinLovesYou/xrizer.git` + - OpenVR Compatibility Branch: `experimental2` +- Clean build your profile from the menu at the top right, or use the Ctrl+F5 keybind. + +### NixOS +Apply an overlay over nixpkgs to override the xrizer src: + +```nix +{ + nixpkgs.overlays = [ + (final: prev: { + xrizer = prev.xrizer.overrideAttrs { + src = final.fetchFromGitHub { + owner = "RinLovesYou"; + repo = "xrizer"; + # IMPORTANT: Fill the below field with the latest commit hash from https://github.com/RinLovesYou/xrizer/commits/experimental2 (click the Copy full SHA button on the right side) + rev = ""; + # IMPORTANT: Replace the below field with the correct hash, the error when building with this empty will give you the expected hash. + hash = ""; + }; + }; + }) + ]; +} +``` + +## Rebinding controls +The process is mostly the same as [OpenComposite](/docs/fossvr/opencomposite/#rebinding-controls), but replace the `OpenComposite` directory name with `xrizer`. From 0a7882de8c717fd04b19f451e8cda2faf820c83c Mon Sep 17 00:00:00 2001 From: Aleksandar Dimitrov Date: Tue, 6 May 2025 14:22:30 +0000 Subject: [PATCH 59/82] Edit Pimax headsets to mention AMD GPUs only --- content/docs/hardware/_index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index cf4bf53..c3d863e 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -49,13 +49,13 @@ A non-comprehensive table of various VR/XR devices and the drivers that support | Varjo VR-1 | ? | ? | ? | | Varjo VR-2 | ? | ? | ? | | Varjo VR-3 | ? | ? | ? | -| Pimax 4K | ❌ (Planned) | 🚧 (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch)) | 🚧 (WiVRn PC-PC stream) | -| Pimax 5K Plus | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch)) | 🚧 (WiVRn PC-PC stream) | -| Pimax 5K XR | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch)) | 🚧 (WiVRn PC-PC stream) | -| Pimax 5K SUPER | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch)) | 🚧 (WiVRn PC-PC stream) | -| Pimax 8K | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch)) | 🚧 (WiVRn PC-PC stream) | -| Pimax Vision 8K X | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch)) | 🚧 (WiVRn PC-PC stream) | -| Pimax Vision 8K PLUS | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch)) | 🚧 (WiVRn PC-PC stream) | +| Pimax 4K | ❌ (Planned) | 🚧 (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch), AMD GPUs only.) | 🚧 (WiVRn PC-PC stream) | +| Pimax 5K Plus | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch), AMD GPUs only.) | 🚧 (WiVRn PC-PC stream) | +| Pimax 5K XR | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch), AMD GPUs only.) | 🚧 (WiVRn PC-PC stream) | +| Pimax 5K SUPER | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch), AMD GPUs only.) | 🚧 (WiVRn PC-PC stream) | +| Pimax 8K | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch), AMD GPUs only.) | 🚧 (WiVRn PC-PC stream) | +| Pimax Vision 8K X | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch), AMD GPUs only.) | 🚧 (WiVRn PC-PC stream) | +| Pimax Vision 8K PLUS | ❌ (Planned) | ✅ (WIP, with [kernel patches](https://gist.githubusercontent.com/TayouVR/60e3ee5f95375827a66a8898bea02bec/raw/c85135c8d8821ebb2fa85629d837a41de57e12ef/pimax.patch), AMD GPUs only.) | 🚧 (WiVRn PC-PC stream) | | Lenovo Explorer | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | 🚧 (WiVRn PC-PC stream) | | Acer AH101 | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | 🚧 (WiVRn PC-PC stream) | | Dell Visor | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | 🚧 (WiVRn PC-PC stream) | From 76358ac97e38e76f476b63293574fd4b26d878dc Mon Sep 17 00:00:00 2001 From: notfranko_ Date: Tue, 6 May 2025 18:31:24 +0300 Subject: [PATCH 60/82] Edit Vive Pro Eye as fully supported Add ReVision link in hardware note --- content/docs/hardware/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index c3d863e..b42d76e 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -40,7 +40,7 @@ A non-comprehensive table of various VR/XR devices and the drivers that support | Valve Index | ✅ | ✅ | 🚧 (WiVRn PC-PC stream) | | HTC Vive | ✅ | ✅ | 🚧 (WiVRn PC-PC stream) | | HTC Vive Pro | ✅ | ✅ | 🚧 (WiVRn PC-PC stream) | -| HTC Vive Pro Eye | ✅ (No eyechip) | ✅ (No eyechip) | 🚧 (WiVRn PC-PC stream) | +| HTC Vive Pro Eye | ✅ | ✅ | 🚧 (WiVRn PC-PC stream) | | HTC Vive Pro 2 | ✅ (custom [driver and patches](https://github.com/CertainLach/VivePro2-Linux-Driver)) | ✅ (With two kernel patches [1](https://github.com/CertainLach/VivePro2-Linux-Driver/blob/master/kernel-patches/0002-drm-edid-parse-DRM-VESA-dsc-bpp-target.patch) [2](https://github.com/CertainLach/VivePro2-Linux-Driver/blob/master/kernel-patches/0003-drm-amd-use-fixed-dsc-bits-per-pixel-from-edid.patch), AMD GPUs only.) | -- | | Bigscreen Beyond | ✅ (with [kernel patch](https://gist.github.com/galister/08cddf10ac18929647d5fb6308df3e4b/raw/0f6417b6cb069f19d6c28b730499c07de06ec413/combined-bsb-6-10.patch), AMD GPUs only.) | ✅ (with [kernel patch](https://gist.github.com/galister/08cddf10ac18929647d5fb6308df3e4b/raw/0f6417b6cb069f19d6c28b730499c07de06ec413/combined-bsb-6-10.patch), AMD GPUs only.) | -- | | Somnium VR1 | ? | ? | ? | @@ -98,7 +98,7 @@ A non-comprehensive table of various VR/XR devices and the drivers that support - **Valve Index** audio output should be set to 48khz or no audio will output. - **Valve Index** may bug out once per boot, resulting in VR refusing to start, or your DE seeing it as a normal monitor. Just unplug and replug the barrel connector that provides power to the HMD. - **Valve Index** may also exhibit unexpected activity with its microphone. If the microphone doesn't transmit at all during regular VR use, consider changing the DisplayPort slot the headset is currently plugged into. Also, as a reminder, the Index mic only works if the headset is actively being used to display something. -- **Vive Pro Eye** HMD functional, eyechip WIP. +- **Vive Pro Eye** HMD functional, eye tracking functionality with [ReVision](https://github.com/Blue-Doggo/ReVision) - **Pimax** initialization code WIP. Distortion matrix dump work in progress. - Eyetrack VR and Project Babble will both be implemented through [oscavmgr](https://github.com/galister/oscavmgr) to emit proper unified flexes over OSC. - Tracking technologies can be mixed Monado/WiVRn by using [motoc](https://github.com/galister/motoc). From 4806289c3577dc59951d887d2bb17b4b978541d8 Mon Sep 17 00:00:00 2001 From: Bones Date: Tue, 6 May 2025 16:13:42 +0000 Subject: [PATCH 61/82] Adjust corectrl info --- content/docs/performance/_index.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/content/docs/performance/_index.md b/content/docs/performance/_index.md index 135deac..c7acae9 100644 --- a/content/docs/performance/_index.md +++ b/content/docs/performance/_index.md @@ -13,9 +13,7 @@ Antialiasing should be avoided when possible and the compositor scale should be AMD GPUs will attempt to power save in between rendering frames, for flatscreen games this is helpful, but for VR this is quite negatively impactful on the VR compositor's ability to timewarp frames so the user's viewport does not stutter or cause sickness. -This is very important to avoid stuttering, do not skip this step if you use AMD. - -You should add a kernel arg for `amdgpu` driven cards. Add `amdgpu.ppfeaturemask=0xffffffff` to your kernel args. [more info](https://gitlab.com/corectrl/corectrl/-/wikis/Setup#full-amd-gpu-controls) +This is step is modestly important to avoid stutter on newer kernels, if you experience stutters under large graphical load please attempt to set this up. ### The simple way: Use CoreCtrl @@ -32,6 +30,14 @@ If you limit yourself to setting the power profile you should be fine, but don't - Set Performance mode to Advanced - Set Power profile to VR +{{% hint danger %}} +Do note that corectrl version 1.4 was not able to separately adjust the GPU performance profile from the speeds. +Your GPU will downclock to absolute minimums after changing your power profile. +To set them back where they should be, adjust the core and memory sliders all the way to the right to obtain your default performance clocks. + +If they present as minimums and maximums in a vertical fashion leave them alone, you are fine. +{{% /hint %}} + ### Enable VR profile using a script ```bash From a7fc2c1016205a083d2170e444c9f41ba96d58a2 Mon Sep 17 00:00:00 2001 From: Bones Date: Tue, 6 May 2025 18:31:09 +0000 Subject: [PATCH 62/82] Warn Nvidia issued on wired headsets --- content/docs/hardware/_index.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index b42d76e..9595100 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -5,13 +5,15 @@ title: VR Gear & GPUs # Hardware - +{{% notice warning %}} +**NVIDIA WIRED VR ISSUES**: Nvidia proprietary drivers currently have a critical issue with DRM lease causing substantial presentation latency for wired VR headsets, resulting in a delayed viewport effect that makes VR uncomfortable. This affects all known driver versions. Wireless VR through WiVRn still works well. Users with Nvidia GPUs should consider wireless options or switching to AMD for the best experience. For details and to report your experience, see [this forum thread](https://forums.developer.nvidia.com/t/substantial-drm-lease-presentation-latency-resulting-in-unusable-vr-hmd-experience/332386). +{{% /notice %}} ## GPU support matrix | Manufacturer | Driver | VR Support | Reprojection Support | Hybrid Graphics Support | Notes | |--------------|---------------------------|----------------|--------------------------------|-------------------------------|----------------------------------------------------------------------------------------------| -| Nvidia | Nvidia (Closed Source) | Excellent | Excellent | Supported | Requires driver version 565 or greater | +| Nvidia | Nvidia (Closed Source) | ⚠️ Limited | ⚠️ Limited | Supported | Requires driver version 565 or greater. [Critical issue with DRM lease causing presentation latency](https://forums.developer.nvidia.com/t/substantial-drm-lease-presentation-latency-resulting-in-unusable-vr-hmd-experience/332386) makes wired VR uncomfortable. Primarily suitable for wireless VR (WiVRn) only. | | Nvidia | Nouveau (Open Source) | Functional | Functional | Supported | Lacks DisplayPort audio. | | Intel | i915 (Open Source) | Functional | Unknown | Supported | Relatively old, most likely poor support for newer GPUs. | Intel | Intel/Xe (Open Source) | No wired HMDs | N/A / Unable to drive wired. | Supported | Lacks direct mode implementation in driver, unable to drive wired HMDs. | @@ -24,6 +26,8 @@ title: VR Gear & GPUs - **Reprojection Support**: Describes the support and quality of reprojection features for VR. Poor support indicates that the driver is not able to properly handle Vulkan realtime shaders and it will present as visual stutter. Non-robust solutions will suffer stutter under very high GPU load. - **PRIME/ Hybrid GPU Support**: Compatibility with systems using multiple GPUs for render offload. Monado and all clients must be run on a single select GPU due to memory tiling requirements. - For Nvidia proprietary drivers *older* than 565, (please try to update!), the [vulkan-layers](https://gitlab.freedesktop.org/monado/utilities/vulkan-layers) must be installed in order to not crash: [*AUR*](https://aur.archlinux.org/packages/monado-vulkan-layers-git)・[*Fedora*](https://packages.fedoraproject.org/pkgs/monado-vulkan-layers/monado-vulkan-layers/) +- **Nvidia Wired VR Workaround**: Some users report setting `U_PACING_COMP_MIN_TIME_MS` to approximately 10 can slightly reduce the latency effect with Nvidia GPUs, but this is only a partial mitigation, not a solution. +- Nvidia GPUs work well for wireless VR through WiVRn, but have significant issues with wired headsets until the DRM lease presentation latency issue is resolved. - AMD GPUs lower than RDNA generation have functional but less robust reprojection capabilities, expected to be similar to Intel. - Audio over displayport is known to temporarily cut out when new audio sources spring up on pipewire [without a fix to add alsa headroom](https://wiki.archlinux.org/title/PipeWire#Audio_cutting_out_when_multiple_streams_start_playing) - X11 configurations are discouraged but workable, please upgrade your system to Wayland if at all possible. @@ -32,7 +36,7 @@ title: VR Gear & GPUs ## XR Devices -A non-comprehensive table of various VR/XR devices and the drivers that support them. +A non-comprehensive table of various VR/XR devices and the drivers that support them. Note that wired headset experiences with Nvidia GPUs will be affected by the [DRM lease presentation latency issue](https://forums.developer.nvidia.com/t/substantial-drm-lease-presentation-latency-resulting-in-unusable-vr-hmd-experience/332386). | Device | [SteamVR](/docs/steamvr/) | [Monado](/docs/fossvr/monado/) | [WiVRn](/docs/fossvr/wivrn/) | |----------------------|:-------------------------------------:|:------------------------------:|:----------------------------:| @@ -92,6 +96,11 @@ A non-comprehensive table of various VR/XR devices and the drivers that support ## Hardware note +- **Nvidia GPU users**: Due to the DRM lease presentation latency issue, wired VR headsets will experience a delayed viewport effect on Nvidia GPUs. This affects all driver versions since 550. Consider these workarounds: + - Use WiVRn or ALVR with standalone headsets for wireless VR (recommended) + - Try setting `U_PACING_COMP_MIN_TIME_MS=10` as an environment variable to slightly reduce the effect + - Consider switching to AMD GPUs for the best wired VR experience + - Monitor the [bug report thread](https://forums.developer.nvidia.com/t/substantial-drm-lease-presentation-latency-resulting-in-unusable-vr-hmd-experience/332386) for updates - WiVRn PC XR to WiVRn PC client streaming remains mainly for debug use. - **Vive Pro** microphones should be set to use 44.1khz sample rates as feeding in 48khz raises the pitch of the audio. - **Vive Pro** creates HDMI Output Source after startup of SteamVR/Monado/etc. Use it instead of Vive Pro USB Audio Source, since the audio might appear distorted. From ce5d3462df826504fd89a1e218caeec93ae77c0d Mon Sep 17 00:00:00 2001 From: BabbleBones Date: Tue, 6 May 2025 15:36:18 -0400 Subject: [PATCH 63/82] Update GPU info --- content/docs/hardware/_index.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index 9595100..60c969e 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -13,13 +13,13 @@ title: VR Gear & GPUs | Manufacturer | Driver | VR Support | Reprojection Support | Hybrid Graphics Support | Notes | |--------------|---------------------------|----------------|--------------------------------|-------------------------------|----------------------------------------------------------------------------------------------| -| Nvidia | Nvidia (Closed Source) | ⚠️ Limited | ⚠️ Limited | Supported | Requires driver version 565 or greater. [Critical issue with DRM lease causing presentation latency](https://forums.developer.nvidia.com/t/substantial-drm-lease-presentation-latency-resulting-in-unusable-vr-hmd-experience/332386) makes wired VR uncomfortable. Primarily suitable for wireless VR (WiVRn) only. | -| Nvidia | Nouveau (Open Source) | Functional | Functional | Supported | Lacks DisplayPort audio. | -| Intel | i915 (Open Source) | Functional | Unknown | Supported | Relatively old, most likely poor support for newer GPUs. -| Intel | Intel/Xe (Open Source) | No wired HMDs | N/A / Unable to drive wired. | Supported | Lacks direct mode implementation in driver, unable to drive wired HMDs. | -| AMD | RADV (Open Source) | Excellent | Robust (RDNA+) | Supported | RDNA generation and up supported with compute tunneling for reprojection. Lower than RDNA are not robust. | -| AMD | AMDVLK (Open Source) | Use RADV | Use RADV | N/A | RADV preferred in all circumstances, unable to drive wired HMDs. Do not use. Do not seek support. | -| AMD | AMDGPU PRO (Closed Source)| Use RADV | Use RADV | N/A | RADV preferred in all circumstances, unable to drive wired HMDs. Do not use. Do not seek support. | +| Nvidia | Nvidia (Closed Source or Open Module) | ⚠️ Limited | ⚠️ Limited | ✅ Supported | Requires driver version 565+. [Critical DRM lease issue](https://forums.developer.nvidia.com/t/substantial-drm-lease-presentation-latency-resulting-in-unusable-vr-hmd-experience/332386) causes uncomfortable latency in wired VR. Best used with wireless solutions (WiVRn). | +| Nvidia | Nouveau (Open Source) | ⚠️ Limited | ❌ Not Viable | ✅ Supported | Cannot reproject due to lack of realtime compute shader support needed by Monado. Lacks DisplayPort audio. Not recommended for VR. | +| AMD | RADV (Open Source) | ✅ Excellent | ✅ Robust (RDNA+) | ✅ Supported | Recommended for wired VR. RDNA generation and newer supported with compute tunneling for reprojection. Pre-RDNA GPUs have functional but less robust reprojection. | +| AMD | AMDVLK (Open Source) | ❌ Not Viable | ❌ Not Viable | ❌ N/A | RADV preferred in all circumstances. Unable to drive wired HMDs. Do not use. Do not seek support. | +| AMD | AMDGPU PRO (Closed Source)| ❌ Not Viable | ❌ Not Viable | ❌ N/A | RADV preferred in all circumstances. Unable to drive wired HMDs. Do not use. Do not seek support. | +| Intel | i915 (Open Source) | ⚡ Functional | ❓ Unknown | ✅ Supported | Relatively old driver, likely poor support for newer GPUs. Limited testing with VR applications. | +| Intel | Intel/Xe (Open Source) | ❌ No wired HMDs | ❌ N/A | ✅ Supported | Lacks direct mode implementation in driver, unable to drive wired HMDs. | **Notes:** - **VR Support**: Indicates how well supported the necessary Vulkan API components are. @@ -67,7 +67,7 @@ A non-comprehensive table of various VR/XR devices and the drivers that support | Samsung Odyssey | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | 🚧 (WiVRn PC-PC stream) | | Asus HC102 | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | 🚧 (WiVRn PC-PC stream) | | Samsung Odyssey+ | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | 🚧 (WiVRn PC-PC stream) | -| HP Reverb | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | 🚧 (WiVRn PC-PC stream) | +| HP Reverb | ✅ (Monado SteamVR plugin, 60Hz only mode on Nvidia) | ✅ (experimental 6dof controllers, 60Hz only mode on Nvidia) | 🚧 (WiVRn PC-PC stream) | | Acer OJO 500 | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | 🚧 (WiVRn PC-PC stream) | | HP Reverb G2 | ✅ (Monado SteamVR plugin) | ✅ (experimental 6dof controllers) | 🚧 (WiVRn PC-PC stream) | | Oculus Rift CV1 | ✅ (OpenHMD SteamVR plugin) | ✅ (OpenHMD plugin based support) | 🚧 (WiVRn PC-PC stream) | @@ -82,7 +82,7 @@ A non-comprehensive table of various VR/XR devices and the drivers that support | HTC Vive Focus 3 | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | | HTC Vive XR Elite | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | | Lynx R1 | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ✅ | -| Apple Vision Pro | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | 🚧 (WIP client) | +| Apple Vision Pro | ✅ (via [ALVR](/docs/steamvr/alvr/)) | -- | ❌ | | **Trackers** | | | | | Vive/Tundra trackers | ✅ (native or spacecal) | ✅ (native or motoc) | ✅ (motoc) | | SlimeVR trackers | ✅ | ✅ (OSC + experimental driver) | ✅ | From 6e63e153c5474fcd4c59bb2ab180e39d83076d90 Mon Sep 17 00:00:00 2001 From: BabbleBones Date: Tue, 6 May 2025 15:42:33 -0400 Subject: [PATCH 64/82] Add snippet about AMDVLK --- content/docs/hardware/_index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index 60c969e..52f6eae 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -101,6 +101,7 @@ A non-comprehensive table of various VR/XR devices and the drivers that support - Try setting `U_PACING_COMP_MIN_TIME_MS=10` as an environment variable to slightly reduce the effect - Consider switching to AMD GPUs for the best wired VR experience - Monitor the [bug report thread](https://forums.developer.nvidia.com/t/substantial-drm-lease-presentation-latency-resulting-in-unusable-vr-hmd-experience/332386) for updates +- **AMD GPU users**: If using WiVRn, make sure you are using the RADV Vulkan driver. A green and broken video stream in WiVRn is a telltale sign that you're using the incompatible AMDVLK driver. Remove AMDVLK and install RADV as AMDVLK is known to be difficult to opt out of as a driver when installed on system. - WiVRn PC XR to WiVRn PC client streaming remains mainly for debug use. - **Vive Pro** microphones should be set to use 44.1khz sample rates as feeding in 48khz raises the pitch of the audio. - **Vive Pro** creates HDMI Output Source after startup of SteamVR/Monado/etc. Use it instead of Vive Pro USB Audio Source, since the audio might appear distorted. From 64310b11ce3c0b5e91afdefcb62d728842ff2ae6 Mon Sep 17 00:00:00 2001 From: Gabriele Musco Date: Wed, 7 May 2025 00:03:37 +0200 Subject: [PATCH 65/82] fix: hint shortcode --- content/docs/hardware/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index 52f6eae..2cc1398 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -5,9 +5,9 @@ title: VR Gear & GPUs # Hardware -{{% notice warning %}} +{{% hint warning %}} **NVIDIA WIRED VR ISSUES**: Nvidia proprietary drivers currently have a critical issue with DRM lease causing substantial presentation latency for wired VR headsets, resulting in a delayed viewport effect that makes VR uncomfortable. This affects all known driver versions. Wireless VR through WiVRn still works well. Users with Nvidia GPUs should consider wireless options or switching to AMD for the best experience. For details and to report your experience, see [this forum thread](https://forums.developer.nvidia.com/t/substantial-drm-lease-presentation-latency-resulting-in-unusable-vr-hmd-experience/332386). -{{% /notice %}} +{{% /hint %}} ## GPU support matrix From fde61e26376ccfaf6158b01bc2c97962e198a1ac Mon Sep 17 00:00:00 2001 From: Gabriele Musco Date: Wed, 7 May 2025 00:04:00 +0200 Subject: [PATCH 66/82] fix: update theme --- themes/hugo-book | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/hugo-book b/themes/hugo-book index 7c78a39..9405c4c 160000 --- a/themes/hugo-book +++ b/themes/hugo-book @@ -1 +1 @@ -Subproject commit 7c78a39c531aa2492ed7e92f2ce9dfb2c8c0d3fa +Subproject commit 9405c4c3d7c7d81ae5be06589982691efedac3ea From 8d7e2fb8ad29504661703fe0abfa8b5f714c5682 Mon Sep 17 00:00:00 2001 From: Sapphire Date: Fri, 9 May 2025 13:04:35 -0500 Subject: [PATCH 67/82] fossvr/envision: Add instructions for using Envision with Steam Flatpak Co-authored-by: Shiloh Fen Signed-off-by: Sapphire --- content/docs/fossvr/envision/_index.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/content/docs/fossvr/envision/_index.md b/content/docs/fossvr/envision/_index.md index 54c38b0..3c050ee 100644 --- a/content/docs/fossvr/envision/_index.md +++ b/content/docs/fossvr/envision/_index.md @@ -83,6 +83,19 @@ Please *uninstall* AppImageLauncher. It intercepts the normal AppImage starting You can tell if you are affected if, when you run the WlxOverlay-S AppImage in terminal (whether in plugin form in `~/.local/share/envision/plugins`, or downloaded directly from GitHub), you only get the output `execv error: No such file or directory`. +## Steam Flatpak + +To use Envision with the Flatpak version of Steam, you'll need to add the following filesystem overrides to Steam using an application like Flatseal: +- `xdg-data/envision:ro` +- `xdg-run/monado_comp_ipc` +- `xdg-config/openxr:ro` +- `xdg-config/openvr:ro` + +Alternatively, you can use the following command: +```shell +flatpak override --filesystem="xdg-data/envision:ro" --filesystem="xdg-run/monado_comp_ipc" --filesystem="xdg-config/openxr:ro" --filesystem="xdg-config/openvr:ro" com.valvesoftware.Steam +``` + ## Experimental feature settings The following resources can be entered into your Envision profile repo and branch settings to enable early access to code before it's fully upstream in Monado itself. To enable these feature sets, simply clone your profile, edit it with these settings, then build. From 07c1ce5940e9877f8e59c08a6fec8f49ac122b96 Mon Sep 17 00:00:00 2001 From: Mhowser Date: Fri, 9 May 2025 07:20:34 +0000 Subject: [PATCH 68/82] Remove proton warning, add info for fixed bindings --- content/docs/games/outer-wilds-vr-mod/_index.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/content/docs/games/outer-wilds-vr-mod/_index.md b/content/docs/games/outer-wilds-vr-mod/_index.md index 52ce940..08490bc 100644 --- a/content/docs/games/outer-wilds-vr-mod/_index.md +++ b/content/docs/games/outer-wilds-vr-mod/_index.md @@ -5,12 +5,6 @@ weight: 50 # Outer Wilds -{{% hint warning %}} - -You must use Proton 8 as any other version will not work! - -{{% /hint %}} - [Outer Wilds](https://store.steampowered.com/app/753640/Outer_Wilds/) is a flat screen game by design. However, there is a VR mod available to bring greater immersion into the gameplay. To play Outer Wilds in VR, you need to install [NomaiVR](https://github.com/Raicuparta/nomai-vr). @@ -24,3 +18,8 @@ Since Outer Wilds was not designed or optimized to be a VR game, performance wil ## Bugs While in VR, if you have mods that add extra items in the main menu, they will be rotated at an odd angle as well as any UIs. + +### Default Quest/Pico 4 controller bindings only partially work with XRizer + +When plaing the game with [XRizer](/docs/fossvr/xrizer/) and you use Quest or Pico 4 Controllers, it is recommended to use [this custom bindings file](https://github.com/user-attachments/files/19900420/oculustouch.json) ([more info here](https://github.com/Raicuparta/nomai-vr/issues/558#issue-3018649448)). +Simply create a directory called `xrizer` inside of the Outer Wilds game folder and place the bindings file in `xrizer`. This will override the default bindings and should provide a better gameplay experience. \ No newline at end of file From 9588d49e0bfd8cbc9ff888a7ef4b650fdb13906e Mon Sep 17 00:00:00 2001 From: Mhowser Date: Tue, 13 May 2025 23:24:20 +0000 Subject: [PATCH 69/82] Add info for HaritoraX trackers / Slimetora --- content/docs/slimevr/slimetora/.gitkeep | 0 content/docs/slimevr/slimetora/_index.md | 30 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 content/docs/slimevr/slimetora/.gitkeep create mode 100644 content/docs/slimevr/slimetora/_index.md diff --git a/content/docs/slimevr/slimetora/.gitkeep b/content/docs/slimevr/slimetora/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/content/docs/slimevr/slimetora/_index.md b/content/docs/slimevr/slimetora/_index.md new file mode 100644 index 0000000..d696d61 --- /dev/null +++ b/content/docs/slimevr/slimetora/_index.md @@ -0,0 +1,30 @@ +--- +title: HaritoraX Trackers +weight: 50 +--- + +# HaritoraX Trackers + +{{% hint info %}} + +For a better full-body experience on Linux, it is recommended to buy the Official SlimeVR Trackers. This article is not an endorsement and is intended for users who have already acquired the hardware and are looking for compatible software. + +{{% /hint %}} + +- [Product website](https://en.shiftall.net/our-products) + +HaritoraX trackers are IMU-based positional trackers. + +## SlimeTora + +- [Project repo](https://github.com/OCSYT/SlimeTora) +- [Project Wiki](https://github.com/OCSYT/SlimeTora/wiki) + +SlimeTora is a program that connects the HaritoraX trackers to the [SlimeVR server](https://docs.slimevr.dev/server/index.html), supporting both the HaritoraX Wireless and HaritoraX Wired (1.1b/1.1/1.0). Supports Bluetooth (low energy), Bluetooth (classic) (w/ COM), and the GX(6/2) communication dongles (w/ COM). + +### HaritoraX Interpreter + +- [Project repo](https://github.com/JovannMC/haritorax-interpreter) +- [NodeJS package](https://www.npmjs.com/package/haritorax-interpreter) + +HaritoraX Interpreter is a Node.js package that enables communication with the HaritoraX FBT trackers to read/write data to the trackers. No HaritoraConfigurator/VR Manager software needed (mostly)! From c92f3ca972b319a0222d54da5d3bc2bdb0640dcc Mon Sep 17 00:00:00 2001 From: Mhowser Date: Wed, 14 May 2025 08:21:18 +0000 Subject: [PATCH 70/82] Minor restructuring to Outer Wilds section (cherry picked from commit 811d920b93f09fde5bdf093ea1ff0b5000c4eec5) Co-authored-by: Mhowser --- content/docs/games/outer-wilds-vr-mod/_index.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/content/docs/games/outer-wilds-vr-mod/_index.md b/content/docs/games/outer-wilds-vr-mod/_index.md index 08490bc..16db472 100644 --- a/content/docs/games/outer-wilds-vr-mod/_index.md +++ b/content/docs/games/outer-wilds-vr-mod/_index.md @@ -11,15 +11,19 @@ To play Outer Wilds in VR, you need to install [NomaiVR](https://github.com/Raic It is recommended to use the [Outer Wilds Mod Manager](https://outerwildsmods.com/mod-manager/) to install NomaiVR along with any additional mods you choose. +[XRizer](/docs/fossvr/xrizer/) is the preferred choice for this game if you do not want to use [SteamVR](/docs/steamvr/). + ## Performance Since Outer Wilds was not designed or optimized to be a VR game, performance will be degraded. Expect low framerates in most scenes. +Prepending `OXR_VIEWPORT_SCALE_PERCENTAGE=60` to the game's launch options can greatly benefit frametimes at the cost of resolution, experiment with the percentage amount to find a balance that suits your needs. + ## Bugs While in VR, if you have mods that add extra items in the main menu, they will be rotated at an odd angle as well as any UIs. ### Default Quest/Pico 4 controller bindings only partially work with XRizer -When plaing the game with [XRizer](/docs/fossvr/xrizer/) and you use Quest or Pico 4 Controllers, it is recommended to use [this custom bindings file](https://github.com/user-attachments/files/19900420/oculustouch.json) ([more info here](https://github.com/Raicuparta/nomai-vr/issues/558#issue-3018649448)). +When playing the game with XRizer and you use Quest or Pico 4 Controllers, it is recommended to use [this custom bindings file](https://github.com/user-attachments/files/19900420/oculustouch.json) ([more info here](https://github.com/Raicuparta/nomai-vr/issues/558#issue-3018649448)). Simply create a directory called `xrizer` inside of the Outer Wilds game folder and place the bindings file in `xrizer`. This will override the default bindings and should provide a better gameplay experience. \ No newline at end of file From da178790c88860cdda4616ad8d244be992e35711 Mon Sep 17 00:00:00 2001 From: Marcus Howser Date: Wed, 14 May 2025 01:26:50 -0700 Subject: [PATCH 71/82] gorp --- content/docs/games/outer-wilds-vr-mod/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/games/outer-wilds-vr-mod/_index.md b/content/docs/games/outer-wilds-vr-mod/_index.md index 16db472..95312c4 100644 --- a/content/docs/games/outer-wilds-vr-mod/_index.md +++ b/content/docs/games/outer-wilds-vr-mod/_index.md @@ -17,7 +17,7 @@ It is recommended to use the [Outer Wilds Mod Manager](https://outerwildsmods.co Since Outer Wilds was not designed or optimized to be a VR game, performance will be degraded. Expect low framerates in most scenes. -Prepending `OXR_VIEWPORT_SCALE_PERCENTAGE=60` to the game's launch options can greatly benefit frametimes at the cost of resolution, experiment with the percentage amount to find a balance that suits your needs. +Prepending `OXR_VIEWPORT_SCALE_PERCENTAGE=60` to the game's launch options can greatly benefit frametimes at the cost of resolution, experiment with the percentage amount to find a balance that suits your needs. ## Bugs From 8186224b018ccccf374b2b1f66e3442dbe8efe79 Mon Sep 17 00:00:00 2001 From: Marcus Howser Date: Wed, 14 May 2025 14:44:53 -0700 Subject: [PATCH 72/82] Add info for LVRA DB website --- content/docs/games/_index.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/content/docs/games/_index.md b/content/docs/games/_index.md index b4dccde..d0b94c5 100644 --- a/content/docs/games/_index.md +++ b/content/docs/games/_index.md @@ -2,3 +2,11 @@ title: More VR Games weight: 60 --- + +# Linux VR Adventure Database + +- [Website](https://db.vronlinux.org/) + +- [Git repository](https://github.com/Respuit/VRDB) + +Here, you can find or report information about various VR games running on Linux. This website is a community-driven effort to provide an open database that helps users determine which games are compatible with Linux and potentially discover solutions or workarounds for specific issues. \ No newline at end of file From b90587e8575bc4d5880ccd6c36341d039ae700fe Mon Sep 17 00:00:00 2001 From: Marcus Howser Date: Wed, 14 May 2025 14:46:46 -0700 Subject: [PATCH 73/82] restructure, add modding info in Resonite section --- content/docs/resonite/_index.md | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/content/docs/resonite/_index.md b/content/docs/resonite/_index.md index e49601c..b360157 100644 --- a/content/docs/resonite/_index.md +++ b/content/docs/resonite/_index.md @@ -25,18 +25,34 @@ When playing Resonite under [Monado](https://lvra.gitlab.io/docs/fossvr/monado/) To solve this, prepend `OXR_PARALLEL_VIEWS=1` to Resonite's launch options. +## Performance + +In larger sessions Resonite is typically CPU-bound, there isn't much that can be done besides upgrading your CPU. In situations where the GPU is a bottleneck, lowering the resolution (either in the OpenXR runtime or through OpenComposite) may help dramatically. +This can be easily done by prepending `OXR_VIEWPORT_SCALE_PERCENTAGE=75` to Resonite's launch options. Experiment with different values to find your preferred balance between performance and quality. + +## Mods + +Much unlike [VRChat](/docs/vrchat/), Resonite has a thriving modding community with an abundance of [mods](https://wiki.resonite.com/Mods) that offer greater user experience, optimizatons and new features. + +Currently there are 2 mod loaders: + +- [ResoniteModLoader (RML)](https://github.com/resonite-modding-group/ResoniteModLoader) + +- [MonkeyLoader](https://github.com/ResoniteModdingGroup/MonkeyLoader.GamePacks.Resonite) + +You can load RML mods with MonkeyLoader but not the other way around. + +### Resonite randomly gets stuck on initial loading screen when using RML + +The exact cause of this is currently unknown. Consider using MonkeyLoader if you encounter such issues starting the game as it seems to not cause the same problem. + ## Crashes Resonite has been seen causing random SteamVR crashes on Linux before. In some situations the engine also tends to freeze. On OpenComposite, the game will rarely close out on its own without leaving any obvious trace of things going wrong — this is being investigated. The cause of these issues and whether they are Proton-specific isn't currently known. -## Performance - -In larger sessions Resonite is typically CPU-bound, there isn't much that can be done besides upgrading your CPU. In situations where the GPU is a bottleneck, lowering the resolution (either in the OpenXR runtime or through OpenComposite) may help dramatically. -This can be easily done by prepending `OXR_VIEWPORT_SCALE_PERCENTAGE=75` to Resonite's launch options. Experiment with different values to find your preferred balance between performance and quality. - -## Crash on loading into a world with video players +### Crash on loading into a world with video players On GE-Proton9-10 (for example), loading into a world with e.g. a YouTube video or live stream can crash the game. Try using the latest GE-Proton-RTSP release. From 1142eddd7f290d17a97c89ca6857e2979b90b5e4 Mon Sep 17 00:00:00 2001 From: Theo Date: Wed, 14 May 2025 21:49:42 +0000 Subject: [PATCH 74/82] Remove experimental warning about Envision --- content/docs/fossvr/envision/_index.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/content/docs/fossvr/envision/_index.md b/content/docs/fossvr/envision/_index.md index 3c050ee..c86ba6f 100644 --- a/content/docs/fossvr/envision/_index.md +++ b/content/docs/fossvr/envision/_index.md @@ -15,12 +15,6 @@ Envision is a graphical app that acts as an orchestrator to get a full [Monado]( Envision attempts to construct a working runtime with both a native OpenXR and an OpenVR API, provided by [OpenComposite](/docs/fossvr/opencomposite/), for client aplications to utilize. Please note the OpenVR implementation is incomplete and contains only what's necessary to run most games for compatibility. If you plan to implement software, utilize the OpenXR API, specification [here](https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html). -{{% hint warning %}} -**Warning** - -Envision is still considered alpha-quality and highly experimental. -{{% /hint %}} - {{% hint danger %}} We recommend **against** using Envision if your distro is NixOS. See [our NixOS page](/docs/distros/nixos/#envision) for more info. {{% /hint %}} From 2b6a31520a4602fc15884331e3f5e58cbb7038ae Mon Sep 17 00:00:00 2001 From: Mandle Rex Date: Fri, 16 May 2025 06:05:28 +0000 Subject: [PATCH 75/82] Update 2 files - /content/docs/fossvr/envision/_index.md - /content/docs/fossvr/monado/_index.md --- content/docs/fossvr/envision/_index.md | 6 ++++++ content/docs/fossvr/monado/_index.md | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/content/docs/fossvr/envision/_index.md b/content/docs/fossvr/envision/_index.md index c86ba6f..5cecdce 100644 --- a/content/docs/fossvr/envision/_index.md +++ b/content/docs/fossvr/envision/_index.md @@ -128,3 +128,9 @@ The Oculus Rift CV1 is supported on the OpenHMD profile of Envision. Start the profile with your headset placed on the floor in clear view of all bases to generate this file as your calibrated playspace origin first run and delete it to reset the configuration. A calibration of base stations will be saved to disk at `~/.config/openhmd/rift-room-config.json`. + +### Fix View + +In Steam OpenVR games, the eye's are not calibrated properly, and result in double vision or cross eye effect. + +You can add "OXR_PARALLEL_VIEWS=1 %command%" to the launch options to fix this. diff --git a/content/docs/fossvr/monado/_index.md b/content/docs/fossvr/monado/_index.md index 36ce9da..24026d9 100644 --- a/content/docs/fossvr/monado/_index.md +++ b/content/docs/fossvr/monado/_index.md @@ -33,6 +33,12 @@ In order to use the SteamVR lighthouse driver in Monado, you just need to set th OpenComposite is REQUIRED to operate Monado in conjunction with Steam games. Proton requires a functional OpenVR API to utilize OpenXR at all and Proton itself is required for VR to function as normal wine does not carry any of the needed patches nor does "protonified" wine something like Lutris would provide. +### Fix View + +In Steam OpenVR games, the eye's are not calibrated properly, and result in double vision or cross eye effect. + +You can add "OXR_PARALLEL_VIEWS=1 %command%" to the launch options to fix this. + ## Envision [Envision](/docs/fossvr/envision/) provides a fairly low-barrier setup and development of both Monado and OpenComposite on most any modern distro. From b7a6cc9be39d4f3980967d9d7c8677cdf5dd1422 Mon Sep 17 00:00:00 2001 From: Marcus Howser Date: Sun, 18 May 2025 00:34:53 -0700 Subject: [PATCH 76/82] add more info in performance section, add section for ResonitePlatformSpoof --- content/docs/resonite/_index.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/content/docs/resonite/_index.md b/content/docs/resonite/_index.md index b360157..036cd6d 100644 --- a/content/docs/resonite/_index.md +++ b/content/docs/resonite/_index.md @@ -13,7 +13,8 @@ weight: 50 The current recommended Proton variant is [**GE-Proton-RTSP**](https://github.com/SpookySkeletons/proton-ge-rtsp/releases). -[OpenComposite](https://lvra.gitlab.io/docs/fossvr/opencomposite/) should now provide a close-to-flawless experience on most controllers and when using hand tracking. +[XRizer](/docs/fossvr/xrizer/) should now provide a close-to-flawless experience on most controllers and when using hand tracking. If you encounter any major issues you can fallback to [OpenComposite](/docs/fossvr/opencomposite/). + ## Visual bugs @@ -27,6 +28,10 @@ To solve this, prepend `OXR_PARALLEL_VIEWS=1` to Resonite's launch options. ## Performance +Resonite currently runs under an extremely old version of Mono runtime required by Unity, which has very poor Garbage Collection causing frequent lag spikes and frame hitching during asset loading and unloading. Very soon, Resonite will be updated to use .NET 9, a far more modern and bespoke runtime, with Unity running on a separate thread only for rendering the game. Eventually Unity will be replaced by a custom rendering engine as well. + +The main developer and owner of Resonite goes into more detail [here](https://youtu.be/9cx2-VtL_LM&t=16). + In larger sessions Resonite is typically CPU-bound, there isn't much that can be done besides upgrading your CPU. In situations where the GPU is a bottleneck, lowering the resolution (either in the OpenXR runtime or through OpenComposite) may help dramatically. This can be easily done by prepending `OXR_VIEWPORT_SCALE_PERCENTAGE=75` to Resonite's launch options. Experiment with different values to find your preferred balance between performance and quality. @@ -46,6 +51,20 @@ You can load RML mods with MonkeyLoader but not the other way around. The exact cause of this is currently unknown. Consider using MonkeyLoader if you encounter such issues starting the game as it seems to not cause the same problem. +### ResonitePlatformSpoof + +- [Mod Repo](https://github.com/isovel/ResonitePlatformSpoof) +- [Link to working version](https://github.com/isovel/ResonitePlatformSpoof/issues/2#issuecomment-2439588723) + + +{{ hint info }} + +See [issue #2745](https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/2745#issuecomment-2573574108) for more context as to why the Linux badge isn't available for Proton users. + +{{ /hint }} + +When the native Linux build of Resonite was still available, players are given a Linux badge to show others that they are running the native build of the client. When Proton is used to play the windows build of the game, you will not get the Linux badge. However, ResonitePlatformSpoof lets you 'spoof' your platform to the Linux native build and allows proton users to get the Linux badge. + ## Crashes Resonite has been seen causing random SteamVR crashes on Linux before. In some situations the engine also tends to freeze. On OpenComposite, the game will rarely close out on its own without leaving any obvious trace of things going wrong — this is being investigated. From bc7668259defa096ad66f6429311e97535eb5d63 Mon Sep 17 00:00:00 2001 From: coolGi Date: Sun, 18 May 2025 18:30:47 +0930 Subject: [PATCH 77/82] Noted on an issue with Outer Wilds NomaiVR with proton 9+ --- content/docs/games/outer-wilds-vr-mod/_index.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/content/docs/games/outer-wilds-vr-mod/_index.md b/content/docs/games/outer-wilds-vr-mod/_index.md index 95312c4..97511ac 100644 --- a/content/docs/games/outer-wilds-vr-mod/_index.md +++ b/content/docs/games/outer-wilds-vr-mod/_index.md @@ -23,6 +23,13 @@ Prepending `OXR_VIEWPORT_SCALE_PERCENTAGE=60` to the game's launch options can g While in VR, if you have mods that add extra items in the main menu, they will be rotated at an odd angle as well as any UIs. +### Immediate crash with Proton 9+ + +Currently, Proton 9 and above has an issue ([#8409](https://github.com/ValveSoftware/Proton/issues/8409)) causing NomaiVR to instantly crash on startup, only rendering the game window for a split second.\ +The workaround is to just use Proton 8. + +Do note that as Proton GE-RTSP is using the latest releases of Proton upstream, it will also not work until this issue is patched. + ### Default Quest/Pico 4 controller bindings only partially work with XRizer When playing the game with XRizer and you use Quest or Pico 4 Controllers, it is recommended to use [this custom bindings file](https://github.com/user-attachments/files/19900420/oculustouch.json) ([more info here](https://github.com/Raicuparta/nomai-vr/issues/558#issue-3018649448)). From ebffb5163729964a64c2bb519fc45881b5b3e480 Mon Sep 17 00:00:00 2001 From: Mhowser Date: Tue, 13 May 2025 05:36:57 +0000 Subject: [PATCH 78/82] Resonite: Fix info highlight --- content/docs/resonite/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/resonite/_index.md b/content/docs/resonite/_index.md index 036cd6d..736cf92 100644 --- a/content/docs/resonite/_index.md +++ b/content/docs/resonite/_index.md @@ -57,11 +57,11 @@ The exact cause of this is currently unknown. Consider using MonkeyLoader if you - [Link to working version](https://github.com/isovel/ResonitePlatformSpoof/issues/2#issuecomment-2439588723) -{{ hint info }} +{{% hint info %}} See [issue #2745](https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/2745#issuecomment-2573574108) for more context as to why the Linux badge isn't available for Proton users. -{{ /hint }} +{{% /hint %}} When the native Linux build of Resonite was still available, players are given a Linux badge to show others that they are running the native build of the client. When Proton is used to play the windows build of the game, you will not get the Linux badge. However, ResonitePlatformSpoof lets you 'spoof' your platform to the Linux native build and allows proton users to get the Linux badge. From b1ea3c3671055d5bc8715ca194bd0654e589e23d Mon Sep 17 00:00:00 2001 From: Adam Gausmann Date: Tue, 20 May 2025 22:36:48 +0000 Subject: [PATCH 79/82] Update instructions for Void Linux: OpenXR is now available --- content/docs/distros/Void_Linux.md | 35 ++++++++++++------------------ 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/content/docs/distros/Void_Linux.md b/content/docs/distros/Void_Linux.md index 4e5f6bc..f25fe01 100644 --- a/content/docs/distros/Void_Linux.md +++ b/content/docs/distros/Void_Linux.md @@ -6,33 +6,26 @@ title: Void Linux ## Envision -The [official Appimage](https://gitlab.com/gabmus/envision#download-envision) is the easiest way to get Envision working on Void Linux. -Just make sure you have all necessary dependencies installed for building your desired profile. -Envision will warn you if some are missing. -Except for OpenXR these are standard packages which can be found in the Void repositories, you may need `-devel` for some packages like `libbsd-devel` for example. -Getting OpenXR can be a bit tricky, but you can follow the instructions for installing OpenXR on this page to get you started. +The [official Appimage](https://gitlab.com/gabmus/envision#download-envision) +is the easiest way to get Envision working on Void Linux. -## Installing OpenXR +Just make sure you have all necessary dependencies installed for building your +desired profile. For Monado, all of the dependencies can be found in the Void +repositories - see the following section [Building Monado](#building-monado) +for the full list. -As of writing (April 2025) OpenXR is not available in the Void Linux repositories, you can however build and install it yourself using `xbps-src`. -There is a pending PR over on the void-packages Github page: https://github.com/void-linux/void-packages/pull/54896. - -In the meantime you can use the OpenXR template from the PR to build and install OpenXR locally. -Just clone the void-packages repo with the OpenXR template and install using the following steps from within the root dir: - -```bash -./xbps-src binary-bootstrap -./xbps-src pkg openxr -xi openxr openxr-devel -``` +Envision may warn you about other missing dependencies. They can usually be +found in the Void repositories; you may also need `-devel` for some packages, +for example: `libbsd-devel` ## Building Monado -Monado may appear to build fine but if you are missing some dependencies only the null compositor will work. -To make a successful build make sure you have the following dependencies installed: +Monado may appear to build fine but if you are missing some dependencies only +the null compositor will work. To make a successful build make sure you have +the following dependencies installed: ```bash -sudo xbps-install pkg-config python3 wayland-devel glslang vulkan-loader-devel libglvnd-devel eigen libusb-devel eudev-libudev-devel v4l-utils-devel libxcb-devel wayland-devel libX11-devel hidapi-devel libopencv-devel libjpeg-turbo-devel libbluetooth-devel SDL2-devel cJSON-devel gstreamer1-devel gst-plugins-base1-devel +sudo xbps-install pkg-config python3 wayland-devel glslang vulkan-loader-devel libglvnd-devel eigen libusb-devel eudev-libudev-devel v4l-utils-devel libxcb-devel wayland-devel libX11-devel hidapi-devel libopencv-devel libjpeg-turbo-devel libbluetooth-devel SDL2-devel cJSON-devel gstreamer1-devel gst-plugins-base1-devel libbsd-devel openxr-devel ``` -There is another [PR](https://github.com/void-linux/void-packages/pull/53279) with templates for xrgears, Monado and libsurvive that you can use, however it is easier and recommended to just use Envision to build everything for you. +There is a [void-packages PR](https://github.com/void-linux/void-packages/pull/53279) with templates for xrgears, Monado and libsurvive that you can use, however it is easier and recommended to just use Envision to build everything for you. From 0e4d5510ec186d29e801b3c459405a4c9d1a82a8 Mon Sep 17 00:00:00 2001 From: Bones Date: Wed, 21 May 2025 05:56:19 +0000 Subject: [PATCH 80/82] Update landing page for WiVRN bin dist --- content/_index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/content/_index.md b/content/_index.md index e1b2565..6fed770 100644 --- a/content/_index.md +++ b/content/_index.md @@ -12,4 +12,6 @@ Feel free to contribute to this wiki yourself if you find anything useful that y You can start with the [hardware table](/docs/hardware/). -After which you may want to take a look at the [Envision](/docs/fossvr/envision/) application for quick setup and compatibility with your PC Steam games. \ No newline at end of file +For wireless/android/standalone headsets visit the [WiVRn](/docs/fossvr/wivrn/) page for installation instructions. + +For wired headsets similar to Valve Lighthouse/WMR/Oculus/Rift use [Envision](/docs/fossvr/envision/) application for quick setup and compatibility with your PC Steam games. From 0efd5352ee757a9b2fb3778e0f60611433e10707 Mon Sep 17 00:00:00 2001 From: Beyley Cardellio Date: Thu, 22 May 2025 04:56:36 +0000 Subject: [PATCH 81/82] Mark support for the Razer Hydra. --- content/docs/hardware/_index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/docs/hardware/_index.md b/content/docs/hardware/_index.md index 2cc1398..7ec6619 100644 --- a/content/docs/hardware/_index.md +++ b/content/docs/hardware/_index.md @@ -93,6 +93,7 @@ A non-comprehensive table of various VR/XR devices and the drivers that support | Lucid VR Gloves | ? | ✅ (survive driver only) | ❌ | | Kinect FBT | ✅ | ✅ (experimental) | 🚧 | | Standable FBT | ❌ | ❌ | ❌ | +| Razer Hydra | ✅ (Monado SteamVR plugin) | ✅ | ❌ | ## Hardware note From df6ced6f10cdf0843000da473f47cafdd41ab9a6 Mon Sep 17 00:00:00 2001 From: Glax Date: Fri, 23 May 2025 21:48:36 +0000 Subject: [PATCH 82/82] Edit _index.md EyetrackVR --- content/docs/EyeTrackVR/_index.md | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/content/docs/EyeTrackVR/_index.md b/content/docs/EyeTrackVR/_index.md index 5682fc0..b28c585 100644 --- a/content/docs/EyeTrackVR/_index.md +++ b/content/docs/EyeTrackVR/_index.md @@ -7,21 +7,25 @@ weight: 250 DIY eye tracking for any headset. Here are the steps to get the software working on linux. +## Prerequisites + +- tkinter `pacman -S tk` +- Python 3.11 available through the [AUR](https://aur.archlinux.org/packages/python311), build yourself! Otherwise tk will not work! + - Build after installing tkinter, otherwise it will not be included +- [poetry](https://python-poetry.org/docs/#installing-with-the-official-installer) + ## EyeTrackApp -`git clone https://github.com/EyeTrackVR/EyeTrackVR.git` +```bash +git clone https://github.com/EyeTrackVR/EyeTrackVR.git +cd EyeTrackVR +poetry install --no-root +cd EyeTrackApp +poetry run pyinstaller eyetrackapp.spec +``` -`cd EyeTrackVR` +and bada bing bada boom you now should now have a fully functional eyetrack app in directory `dist` -`git checkout v2.0-beta-feature-branch` - -`poetry install --no-root` - -`cd EyeTrackApp` - -and bada bing bada boom you now should now have a fully functional eyetrack app when you run: - -`poetry run python3 eyetrackapp.py` ## VRChat Native Eyetracking