A step-by-step look at enabling integrated GPU passthrough for Ubuntu VMs in Proxmox — and the tricky parts to watch out for.
If you’ve been tinkering with virtualization and want to boost your media server’s performance, you might have heard about iGPU passthrough. It’s a method that lets you assign your system’s integrated GPU directly to a virtual machine, so you can use hardware acceleration for workloads like video transcoding in Jellyfin. I recently dove into this myself using Proxmox and an Ubuntu VM, hoping to speed up my Jellyfin transcoding. Here’s what I learned, along with some steps and pitfalls to watch out for.
What is iGPU Passthrough, Anyway?
In simple terms, iGPU passthrough means giving your virtual machine direct control over your computer’s integrated graphics processor, usually found on Intel CPUs. This lets software running inside the VM utilize the GPU just like it would on a physical machine, which can speed up tasks like video encoding.
Why Try iGPU Passthrough in Proxmox?
Virtual machines are flexible but often lack access to hardware acceleration. By passing the integrated GPU through to your VM, you potentially enable faster and more efficient transcoding inside Docker stacks like Jellyfin’s. It’s fantastic in theory but can get pretty complex in practice.
How I Approached Setting up iGPU Passthrough
I followed a method that starts with adjusting the boot parameters and kernel modules on the Proxmox host. Here’s a breakdown:
- Step 1: Edit the GRUB config to enable IOMMU and GPU virtualization features with the intel_iommu and i915.enable_gvt kernel parameters.
- Step 2: Run
update-grubto apply the new boot settings. - Step 3: Add
vfiokernel modules — these help with safe GPU passthrough. - Step 4: Configure unsafe interrupt allowances and kernel module options for smooth virtualization.
- Step 5: Blacklist default GPU drivers (like Radeon, nouveau, Nvidia) so the passthrough driver can take control.
- Step 6: Identify your GPU’s PCI IDs using
lspci, then assign them to thevfio-pcidriver. - Step 7: Update initramfs and reboot your Proxmox node.
This sequence has become a common baseline for enabling passthrough, leveraging Intel’s GVT-g technology for virtual GPU sharing. If you want more details on these steps, the Arch Linux wiki offers a great resource.
Where Things Can Get Tricky
Once the host is configured, the next step is assigning the GPU to your VM. I made sure to enable the iGPU in the BIOS — it was set to ‘auto,’ which can cause conflicts — and added the device to the VM’s hardware list. However, setting it as the primary GPU lead to boot errors, so I left it as secondary.
Inside the VM, I expected to see /dev/dri/renderD128, which is the device node that enables GPU tasks. But it never appeared. That’s when the frustrations started. This device is crucial for Docker containers like Jellyfin to use the GPU for transcoding. Without it, the VM can’t leverage hardware acceleration.
What Could Be Wrong?
Some challenges with iGPU passthrough on systems like the Intel N150 chipset include:
- Firmware and BIOS quirks — the iGPU may not expose virtualization-friendly interfaces or might require odd BIOS settings.
- IOMMU groupings — sometimes the integrated GPU shares interrupt groups with other devices, complicating isolation.
- Driver support inside the VM — the Linux kernel needs the right drivers for the passed-through GPU.
Given that /dev/dri/renderD128 was missing, I suspected the VM kernel didn’t properly recognize the GVT-g virtual GPU.
Alternatives and Tips
If iGPU passthrough is being stubborn, here are a few things to consider:
- Use dedicated GPU passthrough: Sometimes a discrete GPU is simpler to passthrough and gives better results.
- Check BIOS updates: Manufacturers sometimes improve virtualization support over time.
- Try different kernel versions: Some Linux kernels have better support for GPU virtualization.
- Look into software transcoding: Though CPU-intensive, it might be a fallback option.
For deep diving and troubleshooting, NVIDIA and Intel’s official virtualization docs can be helpful:
– Intel GVT-g documentation: https://01.org/graphics/gvt-g
– Proxmox forums offer practical advice from users working on similar setups.
Wrapping Up
iGPU passthrough in a Proxmox Ubuntu VM setup can unlock excellent performance boosts for media servers like Jellyfin. But it’s not always straightforward—especially on newer chipsets like the Intel N150 that might have quirks to work through.
If you try this, be patient, take notes, and don’t be afraid to peek into your system’s PCI device groups and kernel logs to understand what’s happening under the hood. And if it doesn’t work perfectly, there are always workarounds.
Hope this helps anyone looking to get more out of their home media virtualization setup!
