Tags: Hyper-V, Hardware, Linux
Usbipd-win ist eine freie Software, die USB-Geräte für andere PCs freigeben kann. Als Clients kommen auch Hyper-V-Gäste und das Windows Subsystem für Linux in Frage. Während ein Linux-Client in gängigen Paketen enthalten ist, herrscht bei Windows noch ein Mangel. Der Zugriff auf USB-Geräte erfolgt über das Netzwerk auf TCP-Port 3240.
Wenn man eine aktuelle Version von Ubuntu auf einem physischen PC oder in einer VM ausführt, dann ist dafür der Client bereits im Paket linux-tools-generic enthalten. In Debian könnte man ihn über dieses Package hinzufügen:
sudo apt install usbip hwdata usbutils
Die gute Linux-Unterstützung kann man sich auch zunutze machen, um USB-Geräte in das Windows Subsystem for Linux (WSL) einzubinden, nachdem man diese zuvor am Windows-Host freigegeben hat. Da das Subsystem für Linux 2 (WSL2) in einer Utilty-VM läuft, handelt es sich dabei im Prinzip nur um einen Sonderfall des USB-Sharings mit einem Hyper-V-Gast.
Für Windows existiert ein Client aus einem anderen USB/IP-Projekt, von dem aber unklar ist, ob er mit usbipd-win funktioniert und wie gut dieser für einen produktiven Einsatz geeignet ist. Ansonsten muss man sich mit den beschränkten Mitteln der USB-Unterstützung von Hyper-V begnügen. Für den Zugriff auf USB-Laufwerke kann man zudem die Möglichkeiten des erweiterten Sitzungsmodus nutzen.
Die folgende Anleitung zeigt, wie man USB-Geräte unter Windows freigibt und in WSL einbindet. Das Vorgehen wäre bei einer anderen "regulären" Linux-VM das gleiche.
usbipd-win installieren
Die Installation von usbipd-win ist unkompliziert, wobei sich dafür zwei Möglichkeiten bieten:
- Ausführen einer .msi-Datei, die auf der usbipd-win Github-Seite zum Download bereitsteht
- winget, das die Software direkt aus dem Online-Repository bezieht:
winget install --interactive --exact dorssel.usbipd-win
Die empfohlene Installation mit winget erfordert den Schalter interactive, um einen unerwarteten Neustart des Rechners zu verhindern. Das Verhalten der interaktiven Sitzung ist identisch mit dem manuellen Starten der .msi-Datei.
Bei der Installation von usbipd-win wird eine Firewall-Regel namens usbipd erstellt, die es Geräten in allen lokalen Subnetzen erlaubt, sich mit dem Dienst zu verbinden. Diese Regel kann man jedoch modifizieren, um den Zugriff granular anzupassen.
Wenn Sie nun die Konsole für Windows-Dienste öffnen, dann sollten Sie den neu installierten USBIP Device Host Service sehen.
Führen Sie das Kommandozeilenprogramm usbipd ohne Argumente aus, um alle verfügbaren Parameter und Optionen angezeigt zu bekommen.
USB-Geräte anzeigen und freigeben
Mit dem Befehlszeilen-Tool usbipd können wir die verfügbaren USB-Geräte auflisten und diese freigeben. Zuerst verwenden wir dazu den Befehl:
usbipd list
Mit Hilfe der BUSID, die das Programm für jedes USB-Gerät anzeigt, können Sie es mit dem folgenden Befehl freigeben:
usbipd bind --busid <busid>
Freigegebenes USB-Gerät in WSL2 einbinden
Das Dienstprogramm usbipd enthält eigene Befehle, um ein USB-Laufwerk an eine WSL-Instanz anzuschließen. Ich verwende hier WSL2 mit einer Ubuntu-Distribution. Sie können die an WSL eingebundenen USB-Geräte so auflisten:
usbipd wsl list
Sie müssen nun ein paar zusätzliche Schritte innerhalb Ihrer WSL2-Instanz ausführen. Dies betrifft zum einen die Installation des USB/IP-Clients über das Paket linux-tools-generic:
sudo apt install linux-tools-5.4.0-77-generic hwdata
Anschließend ergänzen wir in der sudoers-Datei den secure_path um /usr/lib/linux-tools/5.4.0-77-generic.
Beim Versuch, das zuvor am Host freigegebene USB-Gerät mit dem Befehl
usbipd wsl attach --busid 4-2
einzubinden, trat folgender Fehler auf:
"WSL distribution cannot be reached via the WSL virtual switch"
Die hier beschriebene Abhilfe bestand in meinem Fall darin, den Befehl unter Linux auszuführen:
sudo usbip attach -remote=192.168.1.234 --busid=4-2
Die IP-Adresse im obigen Befehl ist jene meiner Host-Workstation. Nach der Ausführung des Kommandos zeigte lsusb die erfolgreiche Integration von "SanDisk Corp. Ultra USB 3.0" an.
Systemanforderungen
Der USB/IP-Server benötigt Windows 8 oder höher sowie von Windows Server ab 2012. Wie oben erwähnt, ist der Client für Ubuntu Teil des Pakets linux-tools-generic. Andere Distributionen erfordern möglicherweise eine eigene Methode zur Installation des Clients.
Fazit
Das Dienstprogramm usbipd-win ist eine Open-Source-Lösung für die Probleme, die mit dem Zugriff auf USB-Geräte unter Hyper-V verbunden sind. Es eignet sich aber primär für WSL und Linux-Gäste in virtuellen Maschinen.
Für Windows wird man eher auf die Möglichkeiten setzen, die der RDP-Zugriff in diesem Zusammenhang bietet. Diese sind jedoch auf Laufwerke beschränkt, andere Gerätetypen wie Kameras bleiben damit außer Reichweite.
Wie hier gezeigt, können Sie USB-Geräte, die an den Windows-Host angeschlossen sind, recht unkompliziert in eine WSL2-Umgebung einbinden. Obwohl ich bei der Implementierung auf einige Probleme gestoßen bin, waren die Workarounds einfach.
Täglich Know-how für IT-Pros mit unserem Newsletter
Ähnliche Beiträge
Weitere Links