Source:
https://github.com/LongQT-sea/intel-igpu-passthru
ROM file backup:
It works in Legacy mode with the All Gens – No UEFI GOP file.
Requirements
- Intel CPU with integrated graphics (2nd generation or newer)
- BIOS/UEFI settings:
- UEFI-only boot mode (Disable Legacy/CSM in BIOS/UEFI settings)2
- VGA OpROM set to UEFI (usually disabling Legacy/CSM is enough)
- Enable Intel VT-d (Intel Virtualization for Directed I/O)
- Initial/Primary graphics adapter set to IGD / iGPU / Integrated
- Host OS:
- Proxmox VE 9.1 or newer
- Modern Linux distributions (kernel 6.8 or newer)
- IOMMU enabled (enabled by default in Proxmox VE 8.2 and newer)
- Optional:
blacklist i915may be required to enable maximum supported resolution and refresh rate
- Guest OS:
- Use OVMF firmware.
- For a headless setup, ensure the guest OS is already installed and has remote access configured (RDP or VNC).
Important
Make sure disable_vga=1 is not set anywhere in /etc/modprobe.d/vfio.conf or in your kernel parameters (/etc/default/grub). If it is, remove it, then run update-grub, update-initramfs -u and reboot.
Important
Meteor Lake, Arrow Lake, Lunar Lake and future Intel iGPU require QEMU 10.1+ (kvm --version)3.
Tip
With Proxmox VE 8.2 and newer, this works without following PCI passthrough guides such as Proxmox PCI Passthrough.
Note
macOS requires additional configuration: macOS_README.md
Setup Instructions
1. ROM File Selection
Choose the appropriate ROM file for your Intel CPU and download/copy it to /usr/share/kvm/
- For example, if you have an i7-8700K (Coffee Lake CPU), right-click
CFL_CML_GOPv9.1_igd.romand select “Copy link address” - Then, open the Proxmox VE shell and run the following command to save it as
igd.romin/usr/share/kvm/:
Replace <ROM_URL> with the link you just copied
curl -L <ROM_URL> -o /usr/share/kvm/igd.rom
| Intel Generation | ROM File | GOP Version | Supported CPUs |
|---|---|---|---|
| Sandy Bridge (2nd gen) | SNB_GOPv2_igd.rom | v2 | Core i3/i5/i7 2xxx |
| Ivy Bridge (3rd gen) | IVB_GOPv3_igd.rom | v3 | Core i3/i5/i7 3xxx |
| Haswell/Broadwell (4th/5th gen) | HSW_BDW_GOPv5_igd.rom | v5 | Core i3/i5/i7 4xxx-5xxx |
| Skylake to Comet Lake (6/7/8/9/10th gen) | SKL_CML_GOPv9_igd.rom | v9 | Core i3/i5/i7/i9 6xxx-10xxx |
| Coffee/Comet Lake (8/9/10th gen) | CFL_CML_GOPv9.1_igd.rom | v9.1 | Core i3/i5/i7/i9 8xxx-10xxx |
| Gemini Lake (Low-end Pentium/Celeron) | GLK_GOPv13_igd.rom | v13 | Pentium/Celeron J/N 4xxx/5xxx |
| Ice Lake (10th gen mobile) | ICL_GOPv14_igd.rom | v14 | Core i3/i5/i7 10xxG1/G4/G7 |
| Rocket/Tiger/Alder/Raptor Lake (11/12/13/14th gen) | RKL_TGL_ADL_RPL_GOPv17_igd.rom | v17 | Core i3/i5/i7/i9 11xxx-14xxx |
| Rocket/Tiger/Alder/Raptor Lake (11/12/13/14th gen) | RKL_TGL_ADL_RPL_GOPv17.1_igd.rom | v17.1 | Core i3/i5/i7/i9 11xxx-14xxx |
| Jasper Lake (Low-end Pentium/Celeron) | JSL_GOPv18_igd.rom | v18 | Pentium/Celeron N 4xxx/5xxx/6xxx |
| Alder Lake-H/P/U / Raptor Lake-H/P/U (12/13/14th gen mobile) | ADL-H_RPL-H_GOPv21_igd.rom | v21 | Core i3/i5/i7/i9 12xxx-14xxx H/P/U |
| Alder Lake-N / Twin Lake (N-series) | ADL-N_TWL_GOPv21_igd.rom | v21 | N95/N97/N1xx/N2xx/N3xx |
| Arrow Lake / Meteor Lake | ARL_MTL_GOPv22_igd.rom | v22 | Core Ultra series |
| Lunar Lake | LNL_GOPv2X_igd.rom | (unknown) | Core Ultra series |
| All Gens – No UEFI GOP | Universal_noGOP_igd.rom | (none) | All Intel CPUs with iGPU4 |
Note
Use Universal_noGOP_igd.rom as a last resort if other ROMs cause issues. This Universal ROM does not include the Intel GOP driver (UEFI Graphics Output Protocol), display output will only work after the guest VM drivers are fully loaded.
sha256sum: Release page
2. VM Configuration
Proxmox VE
Choose a mode: This determines how display outputs (HDMI, eDP, DVI, DisplayPort) behave.
- Legacy Mode (Recommended): Display output becomes active as soon as the VM starts.
- UPT Mode: Display output becomes active only after the guest OS drivers have loaded.
Legacy Mode
- Open Proxmox VE Shell and run:
Replace
[VMID]with your real VM ID.
qm set [VMID] --machine pc \
--vga none \
--bios ovmf \
--hostpci0 0000:00:02.0,legacy-igd=1,romfile=igd.rom
Important
Ice Lake, Rocket Lake, Tiger Lake, Alder Lake, and newer CPUs require additional QEMU argument5:
qm set [VMID] --args "-set device.hostpci0.x-igd-lpc=on"
Tip
In legacy mode passthrough, these custom args are not needed:
-set device.hostpci0.bus=pci.0 -set device.hostpci0.addr=2.0 -set device.hostpci0.x-igd-opregion=on -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-vga=on
UPT Mode
- Open Proxmox VE Shell and run:
Replace
[VMID]with your real VM ID.
qm set [VMID] --bios ovmf \
--hostpci0 0000:00:02.0,romfile=igd.rom \
--args "-set device.hostpci0.bus=pci.0 -set device.hostpci0.addr=2.0 -set device.hostpci0.x-igd-opregion=on"
Tip
You should use Universal_noGOP_igd.rom in UPT mode.