The Problem: Why is your CPU always ‘gasping for air’ when you watch movies?
The sight of a CPU hitting 100% while streaming a 4K movie on Plex or Jellyfin is all too familiar to Homelab enthusiasts. I once ran a Lab setup with 12 VMs, and every time a family member started an HEVC movie, all other web and production services would lag significantly. Having the CPU handle the entire video decoding process (Software Transcoding) is a massive waste of resources.
The solution lies right within the Intel chip you’re already using. Most modern Intel CPUs integrate a graphics core (iGPU) with Intel QuickSync technology. By “passing through” this iGPU into a VM or LXC, I reduced the CPU load on an i5-10500 from 95% to less than 5%. Movies play smoothly, and the server stays cool.
QuickSync and Passthrough: Understanding it right to do it right
Before typing any commands, you need to distinguish between these two mechanisms to choose the right approach:
- Intel QuickSync: A specialized hardware accelerator for video. It processes much faster and is more power-efficient than a CPU.
- LXC Passthrough: This allows sharing the iGPU from the Host to a Container. The biggest advantage is that you can share a single iGPU among multiple LXCs simultaneously (e.g., both Plex and Handbrake).
- VM Passthrough (PCI Passthrough): Hard-assigns the iGPU to a single virtual machine. Once assigned, the Proxmox Host and other VMs will be completely ‘blind’ to this device.
Pro tip from experience: Prioritize LXC. It’s lightweight, consumes fewer resources, and configuring passthrough is much less of a headache compared to a VM.
Part 1: Checking the Foundation on the Proxmox Host
The first step is to confirm that Proxmox recognizes your ‘weapon’. Access the Console and enter:
ls -l /dev/dri
Do you see card0 and renderD128? Your hardware is ready to go. If nothing appears, check your BIOS and ensure Internal Graphics is set to Enabled instead of Auto.
To monitor performance later, install the following toolkit:
apt update && apt install intel-gpu-tools -y
The intel_gpu_top command will be your ‘eye in the sky’ to see if the iGPU is actually working.
Part 2: Configuring iGPU for LXC (The Optimal Method)
Assuming your Jellyfin container ID is 101. We will perform the assignment of graphics device permissions.
Step 1: Find the Driver’s Group ID
Run the following command on the host:
ls -n /dev/dri/renderD128
The result will look like: crw-rw---- 1 0 104 .... Note down the number 104 (this number may vary depending on the machine, such as 44 or 105). This is the key to permission mapping.
Step 2: Edit the LXC Configuration File
Open the configuration file with the command:
nano /etc/pve/lxc/101.conf
Paste the following code at the end of the file, replacing 104 with the ID you just found:
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
lxc.idmap: u 0 100000 65536
lxc.idmap: g 0 100000 104
lxc.idmap: g 104 104 1
lxc.idmap: g 105 100105 65431
These idmap lines are extremely important. They allow users inside the LXC to ‘borrow’ the driver from the Host for graphics processing.
Step 3: Install Drivers in the LXC
Start the LXC, enter its console, and install the runtime environment:
apt update && apt install va-driver-all-dev mesa-va-drivers -y
Check again with ls -l /dev/dri inside the LXC. If the device appears, you are 90% of the way there.
Part 3: Configuring for VMs (Full PCI Passthrough)
If you are running a Windows Media Server, you must use this method. This process requires Proxmox to completely ‘sacrifice’ the iGPU to the virtual machine.
Step 1: Enable IOMMU
Edit the GRUB file to open hardware communication gates:
nano /etc/default/grub
Update the following configuration line:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
Then run update-grub and restart the server.
Step 2: Blacklist Drivers on the Host
For the VM to seize the iGPU, the Proxmox Host must not be allowed to ‘touch’ it. Add the driver to the blacklist:
echo "blacklist i915" >> /etc/modprobe.d/blacklist.conf
update-initramfs -u -k all
Step 3: Assign the Device via Web UI
Go to the Proxmox Web UI, select your VM -> Hardware -> Add -> PCI Device. Find the device named 0000:00:02.0 (usually the iGPU). Don’t forget to check All Functions to fully recognize all sub-components.
Checking the Results: Don’t Just Look at the CPU
To know if QuickSync is ‘carrying the team’, open the console on the Host and run intel_gpu_top. Next, open a 4K movie on Jellyfin and force it to transcode to 720p 4Mbps.
If the Video column in the monitoring table shows activity (e.g., 15-30%), it means the iGPU is working perfectly. The CPU at this point will be very relaxed, usually hovering at just a few percent.
Small tip for Jellyfin users: Don’t forget to go to Dashboard -> Playback and select Hardware acceleration: Intel QuickSync (QSV). Make sure to check codecs like H264 and HEVC so the hardware knows what to process.
Conclusion
Configuring iGPU Passthrough is the most ‘bang for your buck’ upgrade for anyone running a Homelab. It not only makes the system run smoother but also extends hardware life by avoiding thermal overload. If you encounter a “Permission denied” error, carefully re-check the idmap step in LXC—that’s where 80% of people run into trouble.

