Skip to content

SteamVR has VR_Init vrserver internal error (124) if you try to have 16 monitors on Windows 11 and then turn on controllers #1887

Open
@Cigam-HFden

Description

@Cigam-HFden

I had 2 physical monitors and 14 virtual monitors via a driver. Steam VR would open with just the headset, but as soon as I turned on a controller (either one) it would crash with the 124 error:

VR_Init error, exiting: vrserver internal error (124)

Some info in some of the logs were:

Sun Mar 09 2025 23:26:48.031 [Error] - [Controller Setup] CreateOrUpdateControllerType failed. Input profile somehow got through OnDeviceActivated with no controller type

 {
   "controller_type" : null
}

and

Sun Mar 09 2025 23:26:47.009 [Info] - Error! EventWriteString Severe: [NvAPI] Invalid refresh: 0    
Sun Mar 09 2025 23:26:47.009 [Info] - Error! EventWriteString Severe: [Compositor] NvAPI::WaitForPresent failed!    
Sun Mar 09 2025 23:26:47.575 [Info] - [NvAPI] HOTPLUG: 1
Sun Mar 09 2025 23:26:47.682 [Info] - Connecting client (VR_CompositorPipe_11016) app container status: 1
Sun Mar 09 2025 23:26:47.682 [Info] - External connection from C:\Program Files (x86)\Steam\steamapps\common\SteamVR\bin\win64\vrmonitor.exe 14124
Sun Mar 09 2025 23:26:47.812 [Info] - Connecting client (VR_CompositorPipe_11016) app container status: 1
Sun Mar 09 2025 23:26:47.812 [Info] - External connection from C:\Program Files (x86)\Steam\steamapps\common\SteamVR\bin\vrwebhelper\win64\vrwebhelper.exe 14360

I tried various solutions for the 124 issues, of clearing out the steamvr config files, removing and reinstalling completely, deleted the whole steam folder and reinstalled, even tried repairing the controlers, but nothing was fixing it. Then decided to try removing a monitor down to 15 and it worked.

So not sure what kind of bug that is, but 15 monitors works, whereas 16 will make it have the error and crash steamVR. I currently have reduced my system down to 10 monitors, but wanted to report this as well encase there was something to investigate with it.

For completeness the virtual monitors I am using is this one:
https://github.com/VirtualDisplay/Virtual-Display-Driver

However I am not using it in the way they tell you to, because it has SUPER lag if you do. They normally tell you to adjust the config file to specify the number of monitors, but that makes some weird lag by trying to replicate some replication of a monitor.

So instead just install it without the helper app or script. Then in the folder it puts in the C drive adjust the vdd_settings.xml and comment out the resolutions you do not need. I just need 1920x1080 at 60 so have:

<?xml version='1.0' encoding='utf-8'?>
<vdd_settings>
    <monitors>
        <count>1</count>
    </monitors>
    <gpu>
        <friendlyname>NVIDIA GeForce RTX 3070</friendlyname>
    </gpu>
	<global>
		<!--These are global refreshrates, any you add in here, will be replicated to all resolutions-->
		<g_refresh_rate>60</g_refresh_rate>
		<!-- <g_refresh_rate>90</g_refresh_rate>
		<g_refresh_rate>120</g_refresh_rate>
		<g_refresh_rate>144</g_refresh_rate>
		<g_refresh_rate>165</g_refresh_rate>
		<g_refresh_rate>244</g_refresh_rate> -->
	</global>
    <resolutions>
        <!-- <resolution>
            <width>800</width>
            <height>600</height>
            <refresh_rate>30</refresh_rate>
        </resolution>
        <resolution>
            <width>1366</width>
            <height>768</height>
            <refresh_rate>30</refresh_rate>
        </resolution> -->
        <resolution>
            <width>1920</width>
            <height>1080</height>
            <refresh_rate>60</refresh_rate>
        </resolution>
        <!-- <resolution>
            <width>2560</width>
            <height>1440</height>
            <refresh_rate>30</refresh_rate>
        </resolution>
        <resolution>
            <width>3840</width>
            <height>2160</height>
            <refresh_rate>30</refresh_rate>
        </resolution> -->
    </resolutions>
    <options>
		<CustomEdid>false</CustomEdid> <!-- Custom Edid should be named "user_edid.bin"! This does not support emulating resolutions!-->
		<PreventSpoof>false</PreventSpoof> <!--Enable this to prevent manufacturer spoofing when using custom edid. Please only do so if you need to!-->
		<EdidCeaOverride>false</EdidCeaOverride> <!--Enable this to override or add hard coded cea-extension block to custom Edid support allowing you to enable HDR-->
		<HardwareCursor>true</HardwareCursor>
		<SDR10bit>false</SDR10bit>
		<HDRPlus>false</HDRPlus> <!-- If you have SDR10 bit enabled, HDRPlus wont work - there’s a conflict because the display system cannot simultaneously handle both high dynamic range 12-bit and standard dynamic range 10-bit settings. -->
		<logging>false</logging>
        <!-- DEBUG LOGGING FOR EXPERTS ONLY!-->
        <debuglogging>false</debuglogging> 
        <!-- DEBUG LOGS CAN GENERATE 1000+ LINES-->
		<!-- Warning: Leaving logging on too long can lead to excessive filesize. Especially DebugLogging, which should only be used for short periods to log errors. -->
		<!-- Logging: Useful to troubleshoot and determine which GPUs are being used, and if displays are working as intended.-->
		<!-- Debug Logging: Logs local system information with every driver function/event/process. Useful for GitHub Help Tickets.-->
	</options>
</vdd_settings>

Then after adjusting that, goto device manager and add legacy driver picking this new driver by mike. Have to add them manually multiple times until you reach the amount you want. After that reboot the machine so that the numbers for the displays get corrected.

On windows 11 it does not seem to keep the window positions nicely so had to write a script to move them accordingly. This is my setup for my 10 monitor setup. You can adjust as needed for the 16 monitor one. You will need 2 apps:
multimonitortool from here:
https://www.nirsoft.net/utils/multi_monitor_tool.html

This script will get you the name of the monitors:

MultiMonitorTool.exe /scomma monitors.csv

This one will set them in a 5x2 grid for my 10 monitor setup, when I had the 16 monitor setup I was using a 4x4 setup. I do not have my old script:

@echo off
setlocal
set MMT_PATH="MultiMonitorTool.exe"
DisplaySwitch.exe /extend
timeout /t 12
DisplaySwitch.exe /extend
timeout /t 12
%MMT_PATH% /SetMonitors "Name=\\.\DISPLAY1 Width=1920 Height=1080 PositionX=0 PositionY=0 DisplayFrequency=60" "Name=\\.\DISPLAY2 Width=1920 Height=1080 PositionX=1920 PositionY=0 DisplayFrequency=60" "Name=\\.\DISPLAY5 Width=1920 Height=1080 PositionX=3840 PositionY=0 DisplayFrequency=60" "Name=\\.\DISPLAY6 Width=1920 Height=1080 PositionX=5760 PositionY=0 DisplayFrequency=60" "Name=\\.\DISPLAY7 Width=1920 Height=1080 PositionX=7680 PositionY=0 DisplayFrequency=60" "Name=\\.\DISPLAY8 Width=1920 Height=1080 PositionX=0 PositionY=-1080 DisplayFrequency=60" "Name=\\.\DISPLAY9 Width=1920 Height=1080 PositionX=1920 PositionY=-1080 DisplayFrequency=60" "Name=\\.\DISPLAY10 Width=1920 Height=1080 PositionX=3840 PositionY=-1080 DisplayFrequency=60" "Name=\\.\DISPLAY11 Width=1920 Height=1080 PositionX=5760 PositionY=-1080 DisplayFrequency=60" "Name=\\.\DISPLAY12 Width=1920 Height=1080 PositionX=7680 PositionY=-1080 DisplayFrequency=60"
endlocal

I am using that with Desktop+ to see all of the monitor displays, but the crash would happen even with that app not open.

Hope that helps. Cheers!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions