usbipd-win: USB-Geräte mit Hyper-V-Gästen und WSL teilen


    Tags: , ,

    Memory-StickUsbipd-win ist eine freie Soft­ware, die USB-Geräte für andere PCs frei­geben 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 ent­halten ist, herrscht bei Win­dows noch ein Mangel. Der Zugriff auf USB-Geräte erfolgt über das Netz­­werk 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.

    usbipd-win unter Windows 11 mit winget installieren

    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.

    Die vom Setup erstellte Firewall-Regel usbipd lässt sich auf bestimmte Adressen einschränken

    Wenn Sie nun die Konsole für Windows-Dienste öffnen, dann sollten Sie den neu installierten USBIP Device Host Service sehen.

     Anzeigen des usbipd-win-Dienstes nach der Installation

    Führen Sie das Kommando­zeilen­programm usbipd ohne Argumente aus, um alle verfügbaren Parameter und Optionen angezeigt zu bekommen.

    Das usbipd-Utility gibt den Hilfetext aus, wenn man es ohne Parameter startet.

    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

    Verfügbare USB-Geräte anzeigen

    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>

    Den Befehl usbipd bind ausführen, um ein Gerät freizugeben

    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

    Anzeigen, welche USB-Geräte aus dem Host-System in WSL eingebunden wurden

    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

    Die Client-Komponente über das Paket linux-tools-5.4.0-77-generic hinzufügen

    Anschließend ergänzen wir in der sudoers-Datei den secure_path um /usr/lib/linux-tools/5.4.0-77-generic.

    Secure path in der sudoers-Datei um den Pfad zu den linux-tools-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"

    Fehlermeldung beim Versuch, das USB-Gerät in WSL zu nutzen

    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.

    usbip attach innerhalb von WSL2 ausführen

    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öglicher­weise 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

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Brandon Lee

    Brandon Lee ist seit mehr als 18 Jahren in der IT-Branche tätig und konzen­triert sich auf Networking und Virtua­lisie­rung. Er ver­öffent­licht auf ver­schie­denen Blogs und ver­fasst tech­nische Doku­men­ta­tionen, haupt­sächlich auf Virtualizationhowto.com.
    // Kontakt: Web, E-Mail, LinkedIn //

    Ähnliche Beiträge

    Weitere Links