Intel vGPU Passthrough unter Proxmox

Proxmox vGPU Passthrough

Ergänzende Anleitung zum Video auf YouTube

In diesem Blogbeitrag erkläre ich dir Schritt für Schritt, wie du in Proxmox die Intel Iris XE vGPU-Passthrough-Funktion unter Proxmox VE einrichtest. Dabei gehe ich besonders auf die Bedeutung der einzelnen Befehle ein, damit du genau verstehst, was bei der Konfiguration passiert.

Aber keine Angst, das durchreichen der iGPU ist sehr einfach, es funktioniert im Grunde einfach nur per Copy&Past, es sind keine besonderen Vorkenntnisse notwendig, einfach an die Reihenfolge halten und ohne Hektik alle abarbeiten. Mehr wie 5-10minuten sind in der Regel nicht notwendig.

Kurze Vorgeschichte zur Anleitung:
Bevor ich auf meinen neuen MinisForum-PC umgestiegen bin, hatte ich bereits die interne GPU meines alten Rechners erfolgreich an eine Windows 11 VM durchgereicht. Damals handelte es sich um einen Intel i7-9700K mit integrierter UHD Graphics 630 – und soweit ich mich erinnere, war die Einrichtung relativ unkompliziert.
Daher wollte ich das gleiche Prinzip auch auf dem NAB9 Plus mit Intel Iris XE anwenden – allerdings ohne Erfolg. In Windows erhielt ich im Gerätemanager stets den Fehlercode 43 (Grafikkarte Code 43).
Bei der Suche nach einer Lösung bin ich schließlich auf Derek Seaman’s Tech Blog gestoßen, in dem er beschreibt, wie man die GPU korrekt durchreichen kann und den Fehler behebt.
Mein Artikel basiert auf der Vorgehensweise, die er in seinem Blog beschreibt.

👉 Hinweis: Diese Anleitung ist Teil des zugehörigen Videos auf YouTube. Damit alles reibungslos funktioniert, solltest du Blog und Video gemeinsam verwenden – so bekommst du sowohl die visuelle Unterstützung als auch die technischen Details im Überblick.

⚠️ Wichtig: Diese Vorgehensweise funktioniert – soweit mir bekannt – nur mit Intel Iris Grafikkarten. Bei älteren Onboard-Grafiklösungen war die Vorgehensweise anders und kann hier vermutlich nicht direkt übernommen werden (nicht getestet).

Hinweis 2:
Die Grafikkarte kann ausschließlich über Remote-Tools wie Remote DesktopTeamViewer oder vergleichbare Anwendungen genutzt werden. Eine direkte Verwendung über die Proxmox-Konsole ist nicht möglich, da hierfür die Grafikausgabe in Proxmox deaktiviert werden muss – nur so wird die Karte korrekt angesprochen.

Aber keine Sorge: Sollte TeamViewer oder ein anderes Tool einmal nicht verfügbar sein, lässt sich die Umschaltung schnell und unkompliziert vornehmen.

💡 Getestet wurde das Ganze auf einem MinisForum NAB 9 Plus mit einem Intel i9-12900HK und Proxmox 8.4 & 9.0.3 (Kernel 6.14.8-2) Stand 09.08.2025.
Dieser kompakte PC ist bei mir als Proxmox-Server im Einsatz und eignet sich hervorragend für diese Konfiguration.

📌 Bevor du loslegst:

  • Lies dir den gesamten Beitrag aufmerksam durch.
  • Versuche, die Schritte und Hintergründe so gut wie möglich zu verstehen.
  • Erstelle Backups aller VMs und LXCs, um auf der sicheren Seite zu sein.
  • Dokumentiere alle Änderungen, die du am Proxmox Host vornimmst – wie in diesem YouTube Video (Proxmox Installieren + Umzug auf MinisForum NAB9 Plus) erwähnt.
  • Beachte: Die Änderungen betreffen direkt den Proxmox Host. Im schlimmsten Fall kann es nötig sein, den gesamten Host neu aufzusetzen, falls etwas schiefgeht, aber die Wahrscheinlichkeit ist äußerst gering!

Ich habe die Prozedur zum Durchreichen der Grafikkarte mittlerweile dreimal erfolgreich durchgeführt, ohne dass es zu Problemen gekommen ist. Dennoch besteht ein gewisses Risiko – daher: erst lesen und verstehen, dann Backup erstellen, und erst dann loslegen.

Voraussetzungen und Grundlagen

Intel Iris GPU muss verbaut sein.

Hinweis: Standardinstallationen von Proxmox verwenden den GRUB-Bootloader.
Wenn du diesen verwendest, kannst du der Anleitung in diesem Blogbeitrag folgen.

Falls du jedoch ZFS oder eine andere Konfiguration nutzt, die den systemd-Bootloader verwendet, funktioniert die hier beschriebene Vorgehensweise nicht. In diesem Fall solltest du dich nach einer passenden Anleitung für systemd-Bootloader umsehen, da die Schritte und Konfigurationsdateien sich zum Teil unterscheiden.
Weitere Infos dazu findest du weiter unten in diesem Blogbeitrag.

BIOS-Einstellungen

  • Intel VT-d/IOMMU: Muss im BIOS aktiviert sein
    Ohne diese Einstellungen erscheint der Fehler „NO IOMMU detected“ beim Hinzufügen von PCI-Geräten

1. Vorbereitung des Proxmox-Kernels

Kernel-Pinning entfernen

proxmox-boot-tool kernel unpin
reboot

Proxmox ermöglicht das „Pinnen“ eines bestimmten Kernels, damit dieser bei Updates nicht geändert wird. Dieser Befehl entfernt diese Festlegung, sodass wir mit dem aktuellsten Kernel arbeiten können. Im Normalfall sollte es nicht nötig sein, aber sicher ist sicher.


2. Installation notwendiger Pakete

Grundlegende Pakete installieren

apt update && apt install git sysfsutils pve-headers mokutil -y

Als nächstes müssen werden einige Pakete installieren, die wir im Verlauf dieser Anleitung benötigen.

  • git: Wird benötigt, um das DKMS-Repository zu klonen
  • sysfsutils: Tools für SysFS-Zugriff (wichtig für GPU-Konfiguration)
  • pve-headers: Kernel-Header für Proxmox (notwendig für DKMS)
  • mokutil: Tool für Secure Boot Management (UEFI/MOK)

Alte DKMS-Module bereinigen

rm -rf /usr/src/i915-sriov-dkms-*
rm -rf /var/lib/dkms/i915-sriov-dkms
rm -rf ~/i915-sriov-dkms*
find /lib/modules -regex ".*/updates/dkms/i915.ko" -delete

rm -rf /usr/src/i915-sriov-dkms-*
→ Löscht rekursiv und ohne Rückfrage alle Verzeichnisse und Dateien, die mit i915-sriov-dkms- im Pfad /usr/src/ beginnen – typischerweise Quellcode oder Build-Dateien eines DKMS-Moduls.

rm -rf /var/lib/dkms/i915-sriov-dkms
→ Entfernt das DKMS-Modul i915-sriov-dkms vollständig aus dem DKMS-Verzeichnis, inklusive aller Versionen und Build-Informationen.

rm -rf ~/i915-sriov-dkms*
→ Löscht alle Dateien oder Ordner im Home-Verzeichnis des aktuellen Benutzers, die mit i915-sriov-dkms beginnen – meist heruntergeladene oder entpackte Quellpakete.

find /lib/modules -regex ".*/updates/dkms/i915.ko" -delete
→ Sucht im Verzeichnis /lib/modules nach dem Kernel-Modul i915.ko, das im updates/dkms-Pfad liegt, und löscht es – das entfernt die vom DKMS installierte Version des Moduls.

3. DKMS-Modul kompilieren und installieren

Repository klonen und DKMS einrichten

In Proxmox (und allgemein unter Linux) steht DKMS für Dynamic Kernel Module Support. Es handelt sich um ein Framework, das dafür sorgt, dass Kernel-Module automatisch neu kompiliert und installiert werden, wenn ein neuer Kernel installiert wird. Wenn du z. B. einen Treiber (wie für eine spezielle Netzwerkkarte oder GPU) installierst, der nicht Teil des Standard-Kernels ist, kann dieser bei einem Kernel-Update plötzlich nicht mehr funktionieren. DKMS löst dieses Problem.

cd ~
git clone https://github.com/strongtz/i915-sriov-dkms.git
apt install build-essential dkms
cd ~/i915-sriov-dkms
dkms add .
  1. Der Quellcode des vGPU-Treibers wird heruntergeladen
  2. build-essential installiert Compiler-Tools
  3. dkms add . registriert das Modul im DKMS-System

Modul kompilieren und installieren

VERSION=$(dkms status -m i915-sriov-dkms | cut -d':' -f1)
dkms install -m $VERSION --force
dkms status
  • dkms status zeigt die aktuelle Version des Moduls, da es noch nicht installiert ist, sollte die Ausgabe leer bleiben
  • dkms install kompiliert und installiert das Modul
  • --force erzwingt die Installation (falls nötig)

Der Befehl „dkms status“ sollte als Ausgabe „i915-sriov-dkms…… installed“ enthalten

image 1

4. Secure Boot vorbereiten (ab Proxmox 8.1)

MOK-Schlüssel importieren

MOK steht für Machine Owner Key und ist ein Teil des Secure Boot-Mechanismus, der von modernen UEFI-Systemen unterstützt wird. MOK kommt ins Spiel, wenn du unter Linux (z. B. bei Proxmox oder Ubuntu) Kernel-Module oder Treiber installieren möchtest, die nicht von Microsoft signiert sind – was bei Secure Boot normalerweise blockiert wird.
Secure Boot erlaubt nur die Ausführung von signierter Software, um das System vor Malware zu schützen. Wenn du z. B. ein DKMS-Modul oder einen benutzerdefinierten Treiber installierst, musst du diesen signieren, damit er beim Booten geladen werden darf. Hier kommt MOK ins Spiel.

mokutil --import /var/lib/dkms/mok.pub

Jetzt wird man aufgefordert ein Passwort zu vergeben (Passwort deiner Wahl).
Wichtig:
Bei Secure Boot müssen selbstkompilierte Kernelmodule signiert werden. Dieser Befehl importiert den Signaturschlüssel. Beim nächsten Reboot musst du das Passwort eingeben, um den Schlüssel zu bestätigen.


5. GRUB-Bootloader konfigurieren

Backup der GRUB-Konfiguration erstellen

Falls du GRUB als Bootloader nicht verwenden solltest, beachte bitte die Infos am Ende dieses Blogbeitrags.

Was GRUB genau macht:

  • Startmenü anzeigen: Wenn mehrere Betriebssysteme installiert sind (z. B. Linux und Windows), zeigt GRUB ein Auswahlmenü an.
  • Kernel laden: GRUB lädt den Linux-Kernel in den Arbeitsspeicher und übergibt die Kontrolle an ihn.
  • Parameter übergeben: Es kann dem Kernel Startparameter mitgeben (z. B. für Debugging oder spezielle Hardwareeinstellungen).
  • Fallback-Optionen: Wenn ein Kernel nicht startet, kann GRUB automatisch eine andere Version starten.

GRUB ist also ein zentrales Bindeglied zwischen BIOS/UEFI und dem eigentlichen Betriebssystem.

cp -a /etc/default/grub{,.bak}

Der Befehl erstellt eine 1:1-Kopie der Datei /etc/default/grub als /etc/default/grub.bak. Die -a Option behält alle Dateiattribute bei.

Boot-Parameter anpassen

sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT/c\GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7"' /etc/default/grub

Parameter-Erklärung:

  • intel_iommu=on: Aktiviert IOMMU für PCI-Passthrough
  • iommu=pt: „Pass-Through“ Modus für bessere Kompatibilität
  • i915.enable_guc=3: Aktiviert GuC (Graphics micro Controller)
  • i915.max_vfs=7: Maximale Anzahl virtueller GPUs

Bootloader und Initramfs aktualisieren

update-grub
update-initramfs -u -k all
  • update-grub: Schreibt die geänderten Boot-Parameter in die GRUB-Konfiguration
  • update-initramfs -u -k all: Aktualisiert alle Initramfs-Images (notwendig für Kernel-Module)

6. PCI-Konfiguration und vGPU-Einrichtung

Anzahl virtueller GPUs festlegen

Als Nächstes müssen wir herausfinden, über welchen PCIe-Bus die Grafikkarte angebunden ist.
In vielen Fällen ist das die Adresse 00:02.0. falls die Adresse bei euch abweichen sollte, müsst ihr den zweiten Befehl anpassen.

lspci | grep VGA
echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 7" > /etc/sysfs.conf
reboot

Der Befehl schreibt eine Konfiguration in /etc/sysfs.conf, die beim Systemstart automatisch angewendet wird. Damit werden für das PCIe-Gerät 0000:00:02.0 sieben SR-IOV Virtual Functions aktiviert.

reboot: Während des Neustarts erscheint ein Fenster zur MOK-Verwaltung, in dem du das zuvor gesetzte Passwort eingeben und den Schlüssel bestätigen musst.
Falls du dieses Fenster beim Neustart verpasst, musst du den mokutil-Befehl erneut ausführen und den Host nochmals neu starten.
Das DKMS-Modul wird erst geladen, wenn du die MOK-Einrichtung vollständig abgeschlossen hast.

👉 Wichtig: Vor dem Neustart solltest du sicherstellen, dass ein Bildschirm direkt am Proxmox-Host angeschlossen ist, da du sonst das MOK-Passwort nicht eingeben kannst und die Einrichtung fehlschlägt.

Enroll MOK, Continue, Yes, <password>, Reboot

Proxmox MOK
Proxmox MOK

Überprüfung nach dem Reboot

lspci | grep VGA
dmesg | grep i915

Öffne die Shell auf dem Proxmox-Host und führe die Befehle aus – der erste Befehl sollte acht PCIe-Geräte (VGA compatible controller) anzeigen.

image 3

Die Ausgabe des zweiten Befehls (dmesg) ist recht umfangreich.
Wenn alles korrekt eingerichtet ist, sollte die Ausgabe mit „Enabled 7 VFs“ enden – das bedeutet, dass 7 virtuelle GPUs erfolgreich erstellt wurden.

image 4

Jetzt ist die Einrichtung abgeschlossen und die GPU kann in Windows wie gewünscht konfiguriert und genutzt werden.


7. Windows 11 VM einrichten

https://www.microsoft.com/de-de/software-download/windows11
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
https://www.intel.de/content/www/de/de/download-center.html
https://etcher.balena.io/#download-etcher

Als nächstes müssen wir einige Parameter für die Windows 11-VM in Proxmox konfigurieren.
Wechselt dazu zur entsprechenden VM, öffnet den Reiter „Hardware“ und klickt auf „Hinzufügen (ADD)”. Die folgenden Einstellungen sollten nun wie beschrieben vorgenommen werden:

  • „Raw Device“ auswählen und eine vGPU auswählen
    Niemals die Root-GPU (00:02.0) auswählen!
  • „Primary GPU“ aktivieren
  • „All Functions“ deaktiviert lassen
image 7

Als nächstes öffnet ihr den Reiter „Display“ in der Konfiguration der Windows 11-VM und setzt die Anzeigeoption auf „None“.
Dadurch wird die grafische Ausgabe über die Proxmox-Konsole deaktiviert – was bedeutet, dass ein direkter Zugriff über diese Konsole nicht mehr möglich ist. Dieser Schritt ist jedoch notwendig, damit die virtuelle GPU (vGPU) korrekt erkannt und von Windows 11 genutzt werden kann. Der Zugriff erfolgt dann per Windows RemotedesktopTeamViewer oder ähnliche Tools.

Wichtig:
Bevor ihr diese Einstellung vornehmt, stellt bitte sicher, dass Remote-Zugriffsmöglichkeiten wie Remotedesktop oder TeamViewer bereits installiert und funktionsfähig sind – andernfalls ist nach der Umstellung kein Zugriff mehr über die Konsole möglich.

Tipp:
Du kannst die Display-Ausgabe jederzeit wieder auf „Default“ zurücksetzen, um über die Proxmox-Konsole bzw. VNC direkt auf die Windows-VM zuzugreifen. Diese Möglichkeit ist besonders hilfreich, falls der Remote-Zugriff über TeamViewer oder Remote Desktop einmal nicht verfügbar sein sollte.

Jetzt kannst du die Windows-VM starten.
Sobald das System läuft, lade den aktuellen Treiber für die integrierte Grafikeinheit (iGPU) direkt von der offiziellen Intel-Website herunter und installiere ihn wie gewohnt.
Ob die Einrichtung erfolgreich war, kannst du ganz einfach überprüfen:
Öffne den Task-Manager – dort sollte die GPU nun unter der Registerkarte „Leistung“ sichtbar sein.
Zusätzlich kannst du in der Systemsteuerung unter „Geräte-Manager“ → „Grafikkarten“ nachsehen: Dort sollte die virtuelle GPU ebenfalls korrekt angezeigt werden.


ZFS und systemd-Bootloader

🔗 Als Vorlage für diesen Blogbeitrag und das Video habe ich mich an der Vorgehensweise auf folgender Website orientiert: derekseaman.com

Dort findest du auch weiterführende Informationen zu Themen wie vGPU, ZFS und dem systemd-Bootloader.
Falls du ZFS oder einen anderen Bootloader verwendest, lohnt sich ein Blick auf die Seite – dort findest du möglicherweise die passende Lösung.


Fazit

Diese Anleitung führt dich durch den kompletten Einrichtungsprozess der Intel vGPU-Passthrough-Funktion unter Proxmox VE. Durch die detaillierten Erklärungen der Befehle solltest du genau verstehen, was bei jedem Schritt passiert.

Bei Fragen oder Problemen hinterlasse gerne einen Kommentar unter dem Video!


Viel Erfolg bei der Einrichtung! 🚀

⚠️ Hinweis zu Affiliate-Links:
Alle Links zu Produkten auf dieser Website sind Affiliate-Links. Durch das Anklicken dieser Links unterstützt du meine Arbeit und hilfst mir, diese Website zu finanzieren.
Für dich entstehen dabei keine zusätzlichen Kosten – der Preis bleibt gleich.
Ich erhalte lediglich eine kleine Provision vom Händler oder Amazon. Vielen Dank für deine Unterstützung! 🙏