Windows 10, Windows Server

Headless Display Emulator | Black Screen Fix



INTRO

After using some RMM solutions over the years such as Datto RMM, ConnectWise Automate, others may include Dualmon, Teamviewer, or AnyDesk, sometimes I run into an endpoint where when I remotely connect the screen is black. These are always computers with no monitor attached but the issue does not occur for every endpoint without a monitor.

I’ve noticed this usually occurs with certain drivers where a generic monitor driver is not used when no monitor is attached, or configurations where the on-board integrated graphics controller is disabled in the BIOS for the primary use of a dedicated graphics card.

HARDWARE SOLUTION

To solve this issues with a hardware solution one could use a different BIOS configuration that solves the issue, or purchase a monitor emulator device like the one here. This little device makes the Windows OS believe there is a monitor attached and thus the black screen issue when remoting to the device is fixed.

SOFTWARE SOLUTION

There can be cases where the physical location of the endpoint makes the hardware solution not a fast resolution. This led me to research a possible software solution and I did find one. I created a script that will accomplish this fix but it will not stick after a reboot. The only way to get it to stick after a reboot would be to configure the script to run at Windows startup with either Group Policy, Task Scheduler, or the Startup folder.

The software solution also allows you to run the script multiple times to have more than one monitor available when remoting which for some may be very helpful when working remotely. The script pulls down a file and extracts it, then runs the arguments to the program to implement the fix.

POWERSHELL SCRIPT

PowerShell
# Define the URL of the file to download
$URL = "https://www.amyuni.com/downloads/usbmmidd_v2.zip"

# Make directory
$Destination = "C:\TEMP"
New-Item -Path $Destination -ItemType Directory -Force -ErrorAction SilentlyContinue | Out-Null

# Download the file from the URL
$DownloadPath = Join-Path $Destination "usbmmidd_v2.zip"
Invoke-WebRequest -Uri $URL -OutFile $DownloadPath

# Extract file downloaded from URL
$ExtractPath = Join-Path $Destination "usbmmidd_v2"
Expand-Archive -LiteralPath $DownloadPath -DestinationPath $ExtractPath -Force -ErrorAction SilentlyContinue

# Change directory to the extracted folder
Set-Location -Path "C:\TEMP\usbmmidd_v2\usbmmidd_v2"

# Determine processor architecture and execute appropriate commands
$Architecture = $env:PROCESSOR_ARCHITECTURE

if ($Architecture -eq "AMD64") {
    Start-Process -FilePath ".\deviceinstaller64.exe" -ArgumentList "install usbmmidd.inf usbmmidd" -Wait
    Start-Process -FilePath ".\deviceinstaller64.exe" -ArgumentList "enableidd 1" -Wait
} elseif ($Architecture -eq "x86") {
    Start-Process -FilePath ".\deviceinstaller.exe" -ArgumentList "install usbmmidd.inf usbmmidd" -Wait
    Start-Process -FilePath ".\deviceinstaller.exe" -ArgumentList "enableidd 1" -Wait
} else {
    Write-Host "Unsupported architecture: $Architecture"
}

To uninstall simply change the value of enableidd 1 to enableidd 0 to remove the fake monitor

CONCLUSION

I hope this helps someone out there that gets irritated when this happens. Another workaround for this issue is to use Remote Desktop to the device. Datto RMM and the ConnectWise Automate thick client have the ability to interface and RDP to the computers if this issue were to occur.

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *