[SOLVED] Black Screen on Windows 11 VM After Intel iGPU Passthrough (MiniSforum MS-01)

arunkumarns96

New Member
Oct 14, 2025
2
0
1
Hi everyone


I’m setting up GPU passthrough on my MiniSforum MS-01 running Proxmox VE, and while the passthrough seems partially successful, I’m stuck with a black screen output on my monitor. I’d love some insights from the community.




⚙️ Setup Overview​


  • Host: MiniSforum MS-01
  • CPU: Intel Alder Lake-P (with integrated Intel UHD Graphics)
  • Hypervisor: Proxmox VE
  • Guest OS: Windows 11
  • Goal: PCIe passthrough of the iGPU to the Windows 11 VM for direct HDMI/DisplayPort output



✅ What’s Working​


  • Passthrough initializes — the Windows 11 VM boots successfully.
  • The iGPU shows up in Device Manager inside the VM.

⚠️ What’s Not Working​


  • External display stays black (no signal).
  • In Device Manager, Intel UHD Graphics shows a yellow triangle (Error 43).

VM Configuration​


/etc/pve/qemu-server/100.conf


bios: ovmf
boot: order=ide0;net0
cores: 2
cpu: host,hidden=1,flags=+pcid
efidisk0: local-lvm:vm-100-disk-0,efitype=4m,pre-enrolled-keys=1,size=4M
hostpci0: 0000:00:02,pcie=1,x-vga=1
ide0: local-lvm:vm-100-disk-1,size=250G
machine: q35
memory: 10240
meta: creation-qemu=9.2.0,ctime=1751543459
name: Windows-11
net0: virtio=BC:24:11:78:EC:46,bridge=vmbr0,firewall=1
numa: 0
ostype: win11
scsihw: virtio-scsi-pci
smbios1: uuid=939d069a-e5f8-41a7-a333-1d0036ee8695
sockets: 1
tpmstate0: local-lvm:vm-100-disk-2,size=4M,version=v2.0




Grub Configuration​


/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off video=vesafb:off video=simplefb:off kvm.ignore_msrs=1"



Kernel Modules​


/etc/modules

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd




lspci Output​



00:02.0 VGA compatible controller: Intel Corporation Alder Lake-P Integrated Graphics Controller (rev 0c)




BIOS Settings​


  • Primary Display: IGFX
  • Integrated Graphics: Enabled
  • VT-d: Enabled



Inside the Windows 11 VM​


  • Intel UHD Graphics shows in Device Manager with ⚠️ Error 43.
  • Display connected to HDMI/DP shows black screen (no output).
  • Tried both manual and automatic driver installations — driver installs, but issue persists.



What I’ve Tried​


  • Verified IOMMU and VFIO modules load correctly.
  • Disabled framebuffer devices (efifb, vesafb, simplefb).
  • Enabled cpu: host,hidden=1 to hide virtualization from the guest.
  • Updated Proxmox to the latest kernel.
  • Tested both HDMI and DisplayPort outputs.



Looking for Help / Suggestions​


  1. Any special flags or parameters needed for Intel Alder Lake iGPU passthrough?
    (e.g. multifunction=on, x-igd-opregion=on, kvm=off?)
  2. Does anyone have a working configuration for Intel iGPU passthrough to Windows 11?
  3. Is there a reliable workaround for Error 43 in this scenario?
  4. Any BIOS tweaks specific to MiniSforum MS-01 that might help?



Any insights, working configs, or troubleshooting ideas would be greatly appreciated


Thanks in advance!
— Arun Kumar
 

Attachments

  • Graphics.png
    Graphics.png
    156.3 KB · Views: 2
  1. Any special flags or parameters needed for Intel Alder Lake iGPU passthrough?
    (e.g. multifunction=on, x-igd-opregion=on, kvm=off?)

You need to make settings that match the computer you are using.

pve8
Code:
qm set 629 -args '-set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x0 -set device.hostpci0.x-igd-opregion=on'

pve9
Code:
qm set 629 -args '-set device.hostpci0.bus=pcie.0 -set device.hostpci0.addr=0x02.0 -set device.hostpci0.x-igd-gms=0x0 -set device.hostpci0.x-igd-opregion=on'

  1. Does anyone have a working configuration for Intel iGPU passthrough to Windows 11?

pve8
https://forum.proxmox.com/threads/u...stopped-working-on-windows.169296/post-788880

pve9
https://forum.proxmox.com/threads/u...stopped-working-on-windows.169296/post-803806

  1. Is there a reliable workaround for Error 43 in this scenario?

I have a configuration that is working on my N100.
We can't provide something that works out of the box in your environment.

  1. Any BIOS tweaks specific to MiniSforum MS-01 that might help?

Settings such as VT-d are required

Code:
hostpci0: 0000:00:02,pcie=1,x-vga=1

bios must be specified

romfile=xxxx.rom

Code:
vfio_virqfd

No need to configure

Code:
video=efifb:off video=vesafb:off video=simplefb:off

Should not be used in current kernels
*This was the setting before 5.15.64-1, but you should only specify what you need to avoid issues.

Code:
initcall_blacklist=sysfb_init

5.15.64-1-pve and later use this
*If I were to add it, I would use a setting like this, but I don't think this setting is necessarily necessary for igpu passthrough.
 
Last edited:
You need to make settings that match the computer you are using.

pve8
Code:
qm set 629 -args '-set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x0 -set device.hostpci0.x-igd-opregion=on'

pve9
Code:
qm set 629 -args '-set device.hostpci0.bus=pcie.0 -set device.hostpci0.addr=0x02.0 -set device.hostpci0.x-igd-gms=0x0 -set device.hostpci0.x-igd-opregion=on'



pve8
https://forum.proxmox.com/threads/u...stopped-working-on-windows.169296/post-788880

pve9
https://forum.proxmox.com/threads/u...stopped-working-on-windows.169296/post-803806



I have a configuration that is working on my N100.
We can't provide something that works out of the box in your environment.



Settings such as VT-d are required

Code:
hostpci0: 0000:00:02,pcie=1,x-vga=1

bios must be specified

romfile=xxxx.rom

Code:
vfio_virqfd

No need to configure

Code:
video=efifb:off video=vesafb:off video=simplefb:off

Should not be used in current kernels
*This was the setting before 5.15.64-1, but you should only specify what you need to avoid issues.

Code:
initcall_blacklist=sysfb_init

5.15.64-1-pve and later use this
*If I were to add it, I would use a setting like this, but I don't think this setting is necessarily necessary for igpu passthrough.
o cool...I can make it working with Q35 using part of your modification.

But may I know what is the following for? I didn't put in the hookscript but seems still working. (I am not using HDMI output, is it the reason why?)

Code:
nano /var/lib/vz/snippets/intel_igpu_reset.sh

---
#!/bin/bash
phase="$2"
echo "Phase is $phase"
if [ "$phase" == "pre-start" ]; then
    # Unbind gpu from i915
    echo "0000:00:02.0" > /sys/bus/pci/drivers/i915/unbind 2>/dev/null
    sleep 5
elif [ "$phase" == "post-stop" ]; then
    # Unbind gpu from vfio-pci
    sleep 5
    echo "0000:00:02.0" > /sys/bus/pci/drivers/vfio-pci/unbind 2>/dev/null
    sleep 2
    # Bind i915
    echo "0000:00:02.0" > /sys/bus/pci/drivers/i915/bind 2>/dev/null
    sleep 2
fi
---

chmod +x /var/lib/vz/snippets/intel_igpu_reset.sh
qm set 629 -hookscript local:snippets/intel_igpu_reset.sh

Also, if the following modification inside Windows guest doing the same thing as hookscript? I also didnt add this but still works?

Code:
pnputil /disable-device /class Display /bus PCI /connected && pnputil /enable-device /class Display /bus PCI /connected
 
Last edited:
But may I know what is the following for? I didn't put in the hookscript but seems still working. (I am not using HDMI output, is it the reason why?)

If you're using blacklisting or early binding, you don't need hook scripts.
*I prefer to display the console while the VM is stopped (using the standard driver instead of vfio-pci), so I simply configured it that way.

Also, if the following modification inside Windows guest doing the same thing as hookscript? I also didnt add this but still works?

If the screen appears distorted, you may need to disable and re-enable the device in Windows (using pnputil). However, if there are no display issues, this setting is unnecessary.
*In my setup, block noise appeared on the HDMI output, but it disappeared after disabling and then re-enabling the device in Windows.

As long as it's working, any settings are fine.

*Rather, I was saved by you telling me it works with the patched VBIOS.
 
Last edited:
If you're using blacklisting or early binding, you don't need hook scripts.
*I prefer to display the console while the VM is stopped (using the standard driver instead of vfio-pci), so I simply configured it that way.



If the screen appears distorted, you may need to disable and re-enable the device in Windows (using pnputil). However, if there are no display issues, this setting is unnecessary.
*In my setup, block noise appeared on the HDMI output, but it disappeared after disabling and then re-enabling the device in Windows.

As long as it's working, any settings are fine.

*Rather, I was saved by you telling me it works with the patched VBIOS.
Thanks, very clear explained....appreciated.

And yes, not sure how Windows taking up the devices. Linux indeed no need using VBIOS at all
 
  • Like
Reactions: uzumo
Thank you Uzumo, With the below config my Black screen got resolved. Much appreciated

I'm using PVE8 and the below config worked

1. grub

Code:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

The grub configuration is correct.

2. /etc/modules

Code:
vfio
vfio_iommu_type1
vfio_pci

The modules configuration is correct.

3. /etc/pve/qemu-server/100.conf

Code:
#args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x0 -set device.hostpci0.x-igd-opregion=on
hostpci0: 0000:00:02.0,pcie=on,x-vga=on
cpu: host
bios: ovmf
machine: q35

Replace all of the above content with the following command.
Download the file using the following command and replace it with the command below.
After confirming normal operation, add `x-vga=on`.

Code:
wget -P /usr/share/kvm/ https://github.com/lixiaoliu666/intel6-14rom/releases/download/v2.0-20250622-100999/6-14-qemu10.rom
qm set 100 -args '-set device.hostpci0.bus=pcie.0 -set device.hostpci0.addr=0x02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on'
qm set 100 -hostpci0 0000:00:02.0,romfile=6-14-qemu10.rom
qm set 100 -cpu host,hidden=1
qm set 100 -bios ovmf
qm set 100 -machine pc-q35-9.2+pve1


4. /etc/modprobe.d/vfio.conf

Code:
options vfio-pci ids=8086:4626,8086:51c8 disable_vga=1

I don't know because I don't use the settings in /etc/modprobe.d/vfio.conf.
You can achieve the same result using the following method, so please delete vfio.conf.

Code:
rm /etc/modprobe.d/vfio.conf
mkdir /var/lib/vz/snippets/
nano /var/lib/vz/snippets/intel_igpu_reset.sh
---
#!/bin/bash
phase="$2"
echo "Phase is $phase"
if [ "$phase" == "pre-start" ]; then
    # Unbind gpu from i915
    echo "0000:00:02.0" > /sys/bus/pci/drivers/i915/unbind 2>/dev/null
    sleep 5
elif [ "$phase" == "post-stop" ]; then
    # Unbind gpu from vfio-pci
    sleep 5
    echo "0000:00:02.0" > /sys/bus/pci/drivers/vfio-pci/unbind 2>/dev/null
    sleep 2
    # Bind i915
    echo "0000:00:02.0" > /sys/bus/pci/drivers/i915/bind 2>/dev/null
    sleep 2
fi
---
chmod +x /var/lib/vz/snippets/intel_igpu_reset.sh
qm set 100 -hookscript local:snippets/intel_igpu_reset.sh
update-initramfs -u -k all
proxmox-boot-tool refresh
update-grub
reboot
 
I respected you, but I'm starting to feel disappointed in you for not respecting others.

It feels like you're saying I'm completely untrustworthy, and that's unpleasant.
 
You may have achieved something remarkable by extracting information about ROM extraction from Intel and Red Hat, but you're spreading that information around to promote your own accomplishments more than necessary regarding a resolved issue.

Furthermore, it appears you are disparaging the content of past respondents.

It's not about digging up countless threads that have already sunk just to prove you're right.
 
  • Like
Reactions: LongQT-sea