Puteți folosi open-sourceusbipd-winproiect pentru a accesa dispozitivele USB fizice ale unui computer din subsistemul Windows pentru Linux (WSL2) sau mașina virtuală Hyper-V. Acest instrument vă permite să treceți printr-un dispozitiv USB extern conectat la gazda Windows la orice distribuție Linux (care rulează ca WSL) sau la o mașină virtuală. Acest lucru permite efectuarea oricăror acțiuni cu dispozitive USB din mașini virtuale sau din mediul Linux (flashing dispozitive Android, utilizarea ADB și Fastboot, accesarea smart card-urilor, lucrul cu hardware Arduino etc.).
Usbipd-win utilizează protocolul TCP/IP pentru a redirecționa traficul dispozitivului USB printr-o interfață de rețea virtuală între VM/WSL și sistemul de operare Windows gazdă. Mai întâi, vom arăta cum să instalați serverul usbipd-win pe o gazdă Windows, apoi vom instala un client USB/IP pe Linux (WSL) și vom atașa un dispozitiv USB partajat la Linux VM (WSL).
Usbipd-win acceptă Windows 8.1 x64 și Windows Server 2012 R2 (și mai târziu) și permite partajarea dispozitivelor USB locale pe Windows cu alte mașini virtuale (inclusiv sistemele de operare invitate WSL2 și Linux pe Hyper-V). Anterior, pe Hyper-V, era posibil doar redirecționarea unităților USB către mașini virtuale sau alte tipuri de dispozitive USB prin modul de sesiune îmbunătățit destul de limitat.
LEGATE:Cum să remediați erorile de gazdă a protocolului de căutare Windows
Proiectul Usbipd-win este disponibil pe GitHub (https://github.com/dorssel/usbipd-win). Îl puteți descărca și instala manual (un fișier de instalare MSI este disponibil), dar este mult mai rapid să îl instalați folosind managerul de pachete Winget încorporat.
winget install --interactive --exact dorssel.usbipd-win

Programul va crea un separatusbipd (gazdă dispozitiv USB)serviciu pe Windows:"C:Program Filesusbipd-winusbipd.exe"care ascultă pe portul TCP 3240


O regulă suplimentară a fost creată în Windows Defender Firewall pentru usbipd.exe pentru a permite accesul la portul TCP 3240 de la computerele din rețeaua locală.
Acum să configuram suportul USBIP în subsistemul Windows pentru mediul Linux. Asigurați-vă că versiunea de kernel din imaginea dvs. este cel puțin 5.10.60.1 (exemplul nostru demonstrativ folosește WSL 2 cu o imagine Ubuntu 22.04 LTS):
$ uname -a
Acum trebuie să instalați instrumentele USB/IP și baza de ID hardware USB.
$ sudo apt install linux-tools-virtual hwdata
$ sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20


Utilizați următoarea comandă în imaginea Debian WSL:
$ sudo apt-get install usbip hwdata usbutils
Instalați instrumente USB/IP într-o imagine WSL bazată pe rpm (CentOS/Oracle Linux):
$ sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
$ sudo rpm -ivh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
$ sudo yum install kmod-usbip
$ sudo yum install usbip-utils
$ sudo yum install hwdata
Acum deschideți un prompt de comandă ridicat pe computerul gazdă Windows și enumerați dispozitivele USB:
usbipd wsl list
După cum puteți vedea, niciunul dintre dispozitivele USB nu este partajat (Nepartajat). Puteți partaja dispozitivul USB prin BUSID-ul său. În exemplul meu, aș dori să trec prinDispozitiv de stocare în masă USBcu BUISID 4-2 în WSL.
usbipd wsl attach --busid 4-2


- Dacă utilizați WSL 1 (nu este acceptat de usbip) veți primi o eroare.
sbipd: error: The specified WSL distribution is using WSL 1, but WSL 2 is required. Learn how to upgrade at https://docs.microsoft.com/windows/wsl/basic-commands#set-wsl-version-to-1-or-2.
- Dacă apare o eroare:
usbipd: error: WSL kernel is not USBIP capable, actualizați sistemul WSL cu următoarea comandă:wsl --update
Verificați dacă unitatea flash USB este conectată la WSL:
$ dmesg | tail
$ lsusb


Dacă doriți să partajați dispozitivul USB cu un alt computer care rulează Linux prin rețea (poate fi o mașină virtuală cu un invitat Linux pe Hyper-V sau orice alt hypervisor), mai întâi listați dispozitivele USB disponibile pe o gazdă Windows la distanță:
$ usbip list --remote=192.168.13.21
Acum puteți monta dispozitivul USB necesar după ID-ul său:
$ sudo usbip attach -remote=192.168.13.21 --busid=4-2
În acest exemplu, este specificată adresa IP a gazdei Windows pe care rulează serverul usbipd-win.
Dispozitivul USB partajat ar trebui să fie acum vizibil pentru instrumentele dvs. Linux.
Pentru a dezactiva partajarea dispozitivelor USB în Windows:
usbipd wsl detach --busid 4-2
Vă rugăm să rețineți că unitățile USB conectate în acest mod nu sunt recunoscute ca dispozitive bloc în WSL. Verificați acest lucru folosindlsblkcomanda. Cert este că nucleul WSL nu are un driver pentru unitățile USB (pentru a le adăuga, va trebui să reconstruiți nucleul).
Veți putea monta sistemul de fișiere al unităților USB partajate în mod standard pe distribuțiile Linux.
Prin urmare, trebuie să utilizați următoarele comenzi pentru a monta o unitate flash USB externă, o dischetă sau un card SD în WSL:
$ sudo mkdir /mnt/f
$ sudo mount -t drvfs f: /mnt/f


Unități de montare WSL FAT, ExFAT, ReFs sau NTFS, precum și imagini VHD.
Astfel, usbipd-win poate fi folosit pentru a trece prin intermediul dispozitivelor USB fizice de la o gazdă fizică Windows la computere WSL, mașini virtuale sau Linux printr-o rețea folosind protocolul USBOverIP.
De asemenea, vă poate fi util să citiți articolul despre cum să mutați WSL pe o altă unitate.












