So verwenden Sie usbipd-win zum Freigeben von USB-Geräten mit WSL2- oder Hyper-V-VMs
Wenn Sie unter Windows mit USB-Geräten experimentieren und diese in einer Linux-Umgebung unter WSL2 oder einer virtuellen Maschine einbinden möchten, ist usbipd-win eine echte Hilfe – die korrekte Einrichtung kann jedoch etwas knifflig sein. Ich kenne das Problem: Man versucht, einen einfachen USB-Stick oder ein Arduino-Board anzuschließen, nur um festzustellen, dass die Treiberunterstützung oder die Konfigurationen zunächst nicht funktionieren. Diese Anleitung soll die grundlegenden Schritte und häufige Stolpersteine verdeutlichen. Die Grundidee: Sie installieren usbipd-win unter Windows, geben die Hardware in Ihrer Linux-Umgebung (per Befehl) frei, und schon wird Ihr Gerät unter Linux angezeigt. Nicht immer ganz einfach, insbesondere unter WSL1, aber mit etwas Geduld funktioniert es einwandfrei.
Wie man die USB-Gerätepassthrough-Funktion in WSL2 / Hyper-V mit usbipd-win behebt
Stellen Sie sicher, dass Ihr System und Ihr Kernel kompatibel sind.
Dies ist sozusagen der Ausgangspunkt, denn wenn Ihre WSL-Version nicht mindestens 2 ist oder der Kernel nicht aktuell genug ist, funktioniert die gesamte Verbindung nicht. Führen Sie auf Ihrer WSL-Distribution folgenden Befehl aus: $ uname -a und suchen Sie nach einer Kernel-Version von mindestens 5.10.60.1 – bei älteren Versionen fehlt möglicherweise die Unterstützung für usbip. Falls Ihre Kernel-Version nicht aktuell ist, aktualisieren Sie WSL: $ wsl --update Manchmal ist nach einem Update ein Neustart erforderlich, und es dauert einen Moment, bis alle Funktionen wirksam werden.
Installieren Sie usbipd-win unter Windows
Laden Sie sich zunächst die Software herunter. Sie finden sie im offiziellen GitHub- Projekt „usbipd-win“. Sie können die MSI-Datei direkt herunterladen, aber ehrlich gesagt geht es meist schneller mit Winget.
winget install --interactive --exact dorssel.usbipd-win
Dadurch wird der Dienst installiert und so konfiguriert, dass er beim Systemstart ausgeführt wird.Überprüfen Sie nach der Installation im Task-Manager oder in den Diensten, ob usbipd (USBIP Device Host) ausgeführt wird. Dieser Dienst lauscht auf TCP-Port 3240 und erstellt in der Regel automatisch eine Firewall-Regel.
Vergewissern Sie sich, dass das USB-Gerät erkannt wird und freigegeben werden kann.
Führen Sie in PowerShell oder der Eingabeaufforderung mit Administratorrechten folgenden Befehl aus:
usbipd wsl list
Hier werden alle angeschlossenen USB-Geräte angezeigt und ob sie freigegeben sind oder nicht. Falls Ihr Gerät (z. B.ein USB-Stick oder ein Sensor) nicht als freigegeben aufgeführt ist, suchen Sie nach seiner BUSID – diese sieht beispielsweise so aus: „4-2“ oder „3-1“.Um es freizugeben, verwenden Sie:
usbipd wsl attach --busid 4-2
Dadurch sollte das Gerät mit WSL verbunden werden. Achtung: Unter WSL 1 funktioniert dies nicht, da WSL 1 usbipd nicht direkt unterstützt. Unter WSL 2 benötigen Sie mindestens Kernel 5.10 oder höher und ein korrekt aktualisiertes WSL2. Manchmal benötigt Windows einen kleinen Anstoß: Falls die Freigabe nicht funktioniert oder Fehler auftreten, starten Sie den usbipd-Dienst neu.
Stop-Service usbipd Start-Service usbipd
Oder starten Sie Windows zur Sicherheit einfach neu.
Überprüfen Sie das Gerät innerhalb von WSL
Führen Sie in Ihrem Linux-Terminal folgenden Befehl aus:
$ dmesg | tail
Und:
$ lsusb
Das freigegebene Gerät sollte in der Liste erscheinen. Falls nicht, überprüfen Sie die BUSID und den Freigabestatus. Hinweis: Windows hostet das Gerät. WSL erkennt es als Netzwerk-USB-Gerät und nicht als Blockgerät, daher ist die Einbindung etwas anders. Zum Zugriff erstellen Sie einen Mountpunkt und verbinden das Gerät manuell.
$ sudo mkdir /mnt/f $ sudo mount -t drvfs f: /mnt/f
Ersetzen Sie „f:“ durch den Laufwerksbuchstaben Ihres USB-Laufwerks. Wenn das Gerät in lsusb angezeigt wird, Sie es aber nicht direkt einbinden können (da es unter Windows als Dateisystem und nicht direkt unter Linux erkannt wird), ist dies normal. Verwenden Sie die Windows-Dateifreigabe (über drvfs), um auf die Daten zuzugreifen.
Für die Netzwerkfreigabe: USB-Geräte per Fernzugriff anschließen
Wenn Sie ein Gerät drahtlos von einem Windows-Host auf einen anderen Linux-Rechner übertragen möchten, führen Sie auf dem Host folgenden Befehl aus:
$ usbip list --remote=192.168.13.21
und das Gerät unter Linux anschließen:
$ sudo usbip attach -remote=192.168.13.21 --busid 4-2
Sie müssen die IP-Adresse durch die IP-Adresse Ihres Hostsystems ersetzen. Nun kann Ihr Linux-Kollege, sofern der Port geöffnet und das Gerät freigegeben ist, auf das Gerät zugreifen.
Die gemeinsame Nutzung des Geräts beenden, sobald dies erledigt ist.
So trennen Sie USB-Geräte:
usbipd wsl detach --busid 4-2
Beachten Sie, dass Sie möglicherweise Berechtigungen anpassen oder die Gerätefreigabe deaktivieren müssen, wenn Konflikte auftreten oder Sie ein Gerät schnell trennen möchten.
Hüten Sie sich vor häufigen Fallstricken
– Falls eine Fehlermeldung wie „Die angegebene WSL-Distribution verwendet WSL 1“ erscheint, wechseln Sie zu WSL 2:
wsl --set-version 2
– Falls der Kernel nicht USBIP-fähig ist, führen Sie Folgendes aus:
wsl --update
– Bei WSL 1 ist die Unterstützung von usbipd praktisch nicht möglich – ein Upgrade ist daher unerlässlich.
Zusammenfassung
Die Einbindung von USB-Geräten in WSL2- oder Hyper-V-VMs mit usbipd-win ist nicht ganz einfach, aber sobald es funktioniert, revolutioniert es den Hardwarezugriff, ohne dass Dual-Boot-Konfigurationen oder USB-Switches umständlich konfiguriert werden müssen. Achten Sie lediglich auf Ihre Kernel-Version, den WSL-Modus und die Geräteberechtigungen.
- Überprüfen Sie Ihre WSL-Version, bevor Sie beginnen.
- Installieren Sie usbipd-win über Winget oder manuell
- Gerät mit usbipd-Befehlen freigeben
- Unter Linux mit lsusb und dmesg bestätigen.
- Nach Gebrauch die Verbindung trennen, um Sauberkeit zu gewährleisten.
Hoffentlich erspart das jemandem ein paar Stunden Frust. Es ist etwas knifflig, aber durchaus machbar.