A dummy driver is useful for launching SteamVR for testing without any actual VR equipment.
The dummy driver is defined in /home/<user>/.local/share/Steam/config/steamvr.vrsettings
.
Here is an example of a working dummy driver configuration:
{
"jsonid" : "vrsettings",
"steamvr" : {
// "ipd": 0.0635,
// "forcedDriver": "null",
// "forcedHmd": "",
// "requireHmd": false,
// "displayDebug": false,
// "enableDistortion": true,
// "displayDebugX": 0,
// "displayDebugY": 0,
// "sendSystemButtonToAllApps": false,
// "loglevel": 3,
// "background": "backgrounds/image_%d.png", (now requires fully qualified path)
// "backgroundCameraHeight": 1.6,
// "backgroundDomeRadius": 10.0, (0.0 == Infinite)
// "directMode": false,
// "usingSpeakers": true, (only works in some Unity games current)
// "speakersForwardYawOffsetDegrees": 90.0,
// "renderTargetMultiplier": 1.0
// ^ Make sure your last entry does not include a trailing comma (use jslint when in doubt to verify format).
},
"driver_lighthouse": {
// "disableimu": false,
// "usedisambiguation": "tdm",
// "disambiguationdebug": 0,
// "primarybasestation": 0,
// "lighthousename": "",
// "maxincidenceangledegrees": 60.0,
// "uselighthousedirect": true,
// "dbhistory": false
},
"driver_null" : {
// drivers are searched in alphabetical order, so you may need steamvr.forcedDriver="null" as well
"enable": true,
"id": "Null Driver",
"serialNumber": "Null 4711",
"modelNumber": "Null Model Number",
"windowX": 100,
"windowY": 100,
"windowWidth": 1920,
"windowHeight": 1080,
"renderWidth": 1344,
"renderHeight": 1512,
"secondsFromVsyncToPhotons": 0.1,
"displayFrequency": 90
},
"version" : "1"
}
Valve notes:
If you have other steamvr plugins intalled, e.g. the osvr plugin in
/usr/lib/openvr/osvr/
, remove it temporarily to avoid with annoying behavior like slow osvr startup:~/.local/share/Steam/SteamApps/common/SteamVR/bin/linux64/vrpathreg removedriver /usr/lib/openvr/osvr
If you do want to use it later, enable it again:
~/.local/share/Steam/SteamApps/common/SteamVR/bin/linux64/vrpathreg adddriver /usr/lib/openvr/osvr
Christoph Haag warns:
Do NOT follow the comment and uncomment
"forcedDriver": "null"
. It will result in error 126 for some reason.
Log files have been written to: /data/src/haskell/Simula/.stack-work/logs/ -- While building custom Setup.hs for package Simula-0.0.0 using: /data/.stack/setup-exe-cache/x86_64-linux-nix/Cabal-simple_mPHDZzAJ_2.0.1.0_ghc-8.2.2 --builddir=.stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0 build lib:Simula exe:simulavr --ghc-options " -ddump-hi -ddump-to-file -fdiagnostics-color=always" Process exited with code: ExitFailure 1 Logs have been written to: /data/src/haskell/Simula/.stack-work/logs/Simula-0.0.0.log Configuring Simula-0.0.0... Preprocessing library for Simula-0.0.0.. Building library for Simula-0.0.0.. [ 1 of 20] Compiling Paths_Simula ( .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/autogen/Paths_Simula.hs, .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/Paths_Simula.o ) [flags changed] [ 2 of 20] Compiling Simula.BaseCompositor.Event[boot] ( src/Simula/BaseCompositor/Event.hs-boot, .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/Simula/BaseCompositor/Event.o-boot ) [flags changed] [ 3 of 20] Compiling Simula.BaseCompositor.SceneGraph[boot] ( src/Simula/BaseCompositor/SceneGraph.hs-boot, .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/Simula/BaseCompositor/SceneGraph.o-boot ) [flags changed] [ 4 of 20] Compiling Simula.BaseCompositor.Types ( src/Simula/BaseCompositor/Types.hs, .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/Simula/BaseCompositor/Types.o ) [flags changed] [ 5 of 20] Compiling Simula.BaseCompositor.SceneGraph.Wayland[boot] ( src/Simula/BaseCompositor/SceneGraph/Wayland.hs-boot, .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/Simula/BaseCompositor/SceneGraph/Wayland.o-boot ) [flags changed] [ 6 of 20] Compiling Simula.BaseCompositor.Geometry ( src/Simula/BaseCompositor/Geometry.hs, .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/Simula/BaseCompositor/Geometry.o ) [flags changed] <command line>: can't load .so/.DLL for: libopenvr_api.so (libopenvr_api.so: cannot open shared object file: No such file or directory)
export NIXPKGS_ALLOW_UNFREE=1
find . -name ".stack-work" -type d -exec rm -r {} + 2>/dev/null
stack --nix clean
stack --nix-pure build
Error output:
VR Path Registry node config is not an array VR Path Registry node log is not an array
In your /home/<user>/.config/openvr/openvrpaths.vrpath
file you will find something like this:
{
"config" : null, (ref:config)
"external_drivers" : null,
"jsonid" : "vrpathreg",
"log" : null, (ref:log)
"runtime" : [ "/home/<user>/.local/share/Steam/steamapps/common/SteamVR/" ],
"version" : 1
}
There you’ll need to change "config"
to
"config" : [ "/home/<user>/.steam/steam/config" ],
and "log"
to
"log" : [ "/home/<user>/.steam/steam/logs" ],
Error output:
/home/<user>/.local/share/Steam/steamapps/common/SteamVR/bin/linux64/vrstartup: error while loading shared libraries: libopenvr_api.so: cannot open shared object file: No such file or directory
N/A. The cause of this is uncertain.
The issue was resolved later on for mysterious reasons.
Error output:
Unable to read VR Path Registry from /home/<user>/.config/openvr/openvrpaths.vrpath
N/A. Reason for error is unknown. Disappeared later on for me.
Error output:
/home/ludvig/.local/share/Steam/steamapps/common/SteamVR/bin/linux32/vrserver: error while loading shared libraries: libsteam_api.so: cannot open shared object file: No such file or directory sh: pidof: command not found Failed to execute process '/home/ludvig/.local/share/Steam/steamapps/common/SteamVR/bin/vrcompositor': 2
~/.steam/steam/ubuntu12_32/steam-runtime/run.sh
is missing on NixOS and should contain:
#!/bin/bash # # This is a script which runs programs in the Steam runtime # The top level of the runtime tree TOP=$(cd "${0%/*}" && echo ${PWD}) # Make sure we have something to run if [ "$1" = "" ]; then echo "Usage: $0 program [args]" exit 1 fi # Note that we put the Steam runtime first # If ldd on a program shows any library in the system path, then that program # may not run in the Steam runtime. export STEAM_RUNTIME="${TOP}" host_library_paths= if [ "${STEAM_RUNTIME_PREFER_HOST_LIBRARIES-}" != "0" ]; then while read -r line; do # If line starts with a leading / and contains :, it's a new path prefix if [[ "$line" =~ ^/.*: ]] then library_path_prefix=`echo $line | cut -d: -f1` host_library_paths=$host_library_paths$library_path_prefix: fi done <<< "$(/sbin/ldconfig -XNv 2> /dev/null)" host_library_paths="$STEAM_RUNTIME/pinned_libs_32:$STEAM_RUNTIME/pinned_libs_64:$host_library_paths" fi steam_runtime_library_paths="$host_library_paths$STEAM_RUNTIME/i386/lib/i386-linux-gnu:$STEAM_RUNTIME/i386/lib:$STEAM_RUNTIME/i386/usr/lib/i386-linux-gnu:$STEAM_RUNTIME/i386/usr/lib:$STEAM_RUNTIME/amd64/lib/x86_64-linux-gnu:$STEAM_RUNTIME/amd64/lib:$STEAM_RUNTIME/amd64/usr/lib/x86_64-linux-gnu:$STEAM_RUNTIME/amd64/usr/lib" if [ "$1" = "--print-steam-runtime-library-paths" ]; then echo "$steam_runtime_library_paths" exit 0 fi export LD_LIBRARY_PATH="$steam_runtime_library_paths:${LD_LIBRARY_PATH-}" exec "$@" # vi: ts=4 sw=4 expandtab
nix-shell -p bash lsb-release usbutils procps --run 'steam-run bash -c "export PATH=$PATH ; ~/.local/share/Steam/steamapps/common/SteamVR/bin/vrmonitor.sh"'
Error output:
Loading module '/nix/store/by05skki8asv19dqd4q5nawcl29sxsm2-weston-3.0.0/lib/libweston-3/x11-backend.so' Loading module '/nix/store/by05skki8asv19dqd4q5nawcl29sxsm2-weston-3.0.0/lib/libweston-3/gl-renderer.so' EGL client extensions: EGL_EXT_client_extensions EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_KHR_debug EGL_EXT_platform_wayland EGL_EXT_platform_x11 EGL_MESA_platform_gbm libEGL warning: DRI2: failed to authenticate libEGL warning: DRI2: failed to open swrast (search paths /run/opengl-driver/lib/dri) libEGL warning: DRI2: failed to open swrast (search paths /run/opengl-driver/lib/dri) failed to initialize display EGL error state: EGL_NOT_INITIALIZED (0x3001) sh: lsusb: command not found sh: lsusb: command not found sh: lsusb: command not found sh: lsusb: command not found sh: lsusb: command not found sh: lsusb: command not found sh: lsusb: command not found sh: pidof: command not found Failed to execute process '/home/<user>/.local/share/Steam/steamapps/common/SteamVR/bin/linux64/vrserver': 2 sh: pidof: command not found Failed to execute process '/home/<user>/.local/share/Steam/steamapps/common/SteamVR/bin/linux64/vrmonitor': 2 simulavr: VRInitError_IPC_ConnectFailedAfterMultipleAttempts CallStack (from HasCallStack): error, called at src/Simula/ViveCompositor/ViveCompositor.hs:416:41 in Simula-0.0.0-9QaZeZwgKYRCbbXYyycaaz:Simula.ViveCompositor.ViveCompositor
Good solution TBD. A hacky and risky way of solving this is running:
sudo rm -r /run/opengl-driver
./swrast.sh
This solution may ruin your system (until reebot?)
Error output:
Loading module '/nix/store/by05skki8asv19dqd4q5nawcl29sxsm2-weston-3.0.0/lib/libweston-3/x11-backend.so' Loading module '/nix/store/by05skki8asv19dqd4q5nawcl29sxsm2-weston-3.0.0/lib/libweston-3/gl-renderer.so' EGL client extensions: EGL_EXT_client_extensions EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_KHR_debug EGL_EXT_platform_wayland EGL_EXT_platform_x11 EGL_MESA_platform_gbm libEGL warning: DRI2: failed to authenticate warning: EGL_EXT_buffer_age not supported. Performance could be affected. warning: neither EGL_EXT_swap_buffers_with_damage or EGL_KHR_swap_buffers_with_damage is supported. Performance could be affected. EGL_KHR_surfaceless_context available EGL version: 1.4 (DRI2) EGL vendor: Mesa Project EGL client APIs: OpenGL OpenGL_ES EGL extensions: EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image_base EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image GL version: OpenGL ES 3.0 Mesa 17.3.3 GLSL version: OpenGL ES GLSL ES 3.00 GL vendor: VMware, Inc. GL renderer: llvmpipe (LLVM 5.0, 128 bits) GL extensions: GL_EXT_blend_minmax GL_EXT_multi_draw_arrays GL_EXT_texture_compression_dxt1 GL_EXT_texture_format_BGRA8888 GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_stencil8 GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_half_float GL_EXT_texture_sRGB_decode GL_OES_EGL_image GL_OES_depth_texture GL_OES_packed_depth_stencil GL_EXT_texture_type_2_10_10_10_REV GL_OES_get_program_binary GL_APPLE_texture_max_level GL_EXT_discard_framebuffer GL_EXT_read_format_bgra GL_EXT_frag_depth GL_NV_fbo_color_attachments GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_array_object GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_EXT_texture_rg GL_EXT_unpack_subimage GL_NV_draw_buffers GL_NV_read_buffer GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_EXT_draw_buffers GL_EXT_map_buffer_range GL_KHR_debug GL_OES_depth_texture_cube_map GL_OES_required_internalformat GL_OES_surfaceless_context GL_EXT_color_buffer_float GL_EXT_separate_shader_objects GL_EXT_shader_integer_mix GL_EXT_base_instance GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_copy_image GL_EXT_draw_buffers_indexed GL_EXT_draw_elements_base_vertex GL_EXT_polygon_offset_clamp GL_EXT_texture_border_clamp GL_KHR_context_flush_control GL_OES_copy_image GL_OES_draw_buffers_indexed GL_OES_draw_elements_base_vertex GL_OES_texture_border_clamp GL_OES_texture_stencil8 GL_EXT_blend_func_extended GL_KHR_no_error GL_EXT_clip_cull_distance GL_MESA_shader_integer_functions GL ES 2 renderer features: read-back format: BGRA wl_shm sub-image to texture: yes EGL Wayland extension: no Using gl renderer creating a keymap file for 55494 bytes failed: No such file or directory Failed to create X11 input sh: lsusb: command not found sh: lsusb: command not found sh: lsusb: command not found sh: lsusb: command not found sh: lsusb: command not found sh: lsusb: command not found sh: lsusb: command not found sh: pidof: command not found Failed to execute process '/home/<user>/.local/share/Steam/steamapps/common/SteamVR/bin/linux64/vrserver': 2 sh: pidof: command not found Failed to execute process '/home/<user>/.local/share/Steam/steamapps/common/SteamVR/bin/linux64/vrmonitor': 2 simulavr: VRInitError_IPC_ConnectFailedAfterMultipleAttempts CallStack (from HasCallStack): error, called at src/Simula/ViveCompositor/ViveCompositor.hs:416:41 in Simula-0.0.0-9QaZeZwgKYRCbbXYyycaaz:Simula.ViveCompositor.ViveCompositor
WIP.