This script automates the process of switching your primary monitor with a dummy monitor using MultiMonitorTool. This is useful for users of Sunshine (a screen sharing software) who experience issues with sharing their primary monitor.
Open up MultiMonitorTool and click on File -> Save Monitors Configuration
and save it in the current folder this script is located in with the name of primary.cfg
.
Repeat the same steps of step 1, except save it with the name of dummy.cfg
.
Open up the dummy.cfg
file and set every parameter related to your primary monitor's position, refresh rate, etc. to 0
. For example:
Name=\\.\DISPLAY1
MonitorID=MONITOR\GSMC0C8\{4d36e96e-e325-11ce-bfc1-08002be10318}\0009
SerialNumber=LGTV
BitsPerPixel=0
Width=0
Height=0
DisplayFlags=0
DisplayFrequency=0
DisplayOrientation=0
PositionX=0
Name=\\.\DISPLAY11
MonitorID=MONITOR\XMD29831\{4d36e96e-e325-11ce-bfc1-08002be10318}\0007
SerialNumber=DUMMY
BitsPerPixel=32
Width=3840
Height=2160
DisplayFlags=0
DisplayFrequency=120
DisplayOrientation=0
PositionX=0
In the example above, every numerical value has been set to 0, which lets the script know that the display should be turned off. Also take note in the example, that my dummy display should have values configured to let it know that it should be turned on.
Verify that the dummy.cfg
file has only one display that contains values for the BitsPerPixel
, Width
, Height
, and so on.
4a. For the primary.cfg file
, it does not matter if there are other displays enabled, but you would want to make sure your dummy is "zeroed out" so you don't end up with an invisible monitor.
Basically, primary will "zero out" the dummy plug, and dummy will "zero out" the main display. This will automatically transfer games and windows back to the primary monitor if setup this way.
In the dummy.cfg
file, locate your dummy MonitorId
and copy and paste it to the dummyMonitorId
key in the settings.json file. Make sure to escape the backslashes.
Validate you have escaped the backslashes, below is an example of a valid settings.json file.
{
"startDelay": 2,
"gracePeriod": 60,
"configSaveLocation": "%TEMP%",
"dummyMonitorId": "MONITOR\\XMD009A\\{4d36e96e-e325-11ce-bfc1-08002be10318}\\0010"
}
Install the script by double clicking the Install.bat file, you may get a smart-screen warning... this is normal.
You will be prompted for administrator rights, as modifying Sunshine configuration will require admin rights in the coming future.
If there are no error messages presented on the screen, the script successfully installed and you can close the terminal.
The paths referenced above will vary on your machine.
If you encounter issues with the script, you can try the following:
Check that your dummy monitor MonitorId
matches the value in the dummyMonitorId
variable in the settings.json
file.
Check that you have escaped the backslashes for dummyMonitorId in the settings.json
file.
Valid: MONITOR\\GSMC0C8\\{4d36e96e-e325-11ce-bfc1-08002be10318}\\0009
Invalid: MONITOR\GSMC0C8{4d36e96e-e325-11ce-bfc1-08002be10318}\0009
Check that you have set every parameter related to the primary monitor's resolution in the dummy.cfg
file to 0
.
Check that you have set every parameter related to the dummy monitor's resolution in the primary.cfg
file to 0
.
Check that you have at least one monitor not "zeroed out" in both the primary.cfg and dummy.cfg files.
Ensure that you have followed the requirements for Sunshine users as listed above.
Increase the startDelay in the settings file if you're experiencing the script only works intermitently.
If you are still experiencing issues, try uninstalling and installing it again.
Check the logs to see if they claim the primary monitor was successfully restored. If it was, enable enableStrictRestoration
in the settings.json
file by setting it to true
. If the logs do not show it restored, it probably was closed out before the script could finish (in the case of reboots). In such cases, you can't do much to resolve it other than ensuring you do not reboot before returning to your machine.
dummyMonitorId
in the settings.json
file. This way, the script doesn't attempt to restore monitor profiles that are already active.