Conexión de dispositivos USB host a WSL o Hyper-V VM

Puedes usar el código abierto.usbipd-winproyecto para acceder a los dispositivos USB físicos de una computadora desde el Subsistema de Windows para Linux (WSL2) o la máquina virtual Hyper-V. Esta herramienta le permite pasar un dispositivo USB externo conectado al host de Windows a cualquier distribución de Linux (que se ejecuta como WSL) o a una máquina virtual. Esto permite realizar cualquier acción con dispositivos USB desde máquinas virtuales o entorno Linux (flashear dispositivos Android, usar ADB y Fastboot, acceder a tarjetas inteligentes, trabajar con hardware Arduino, etc.).

Usbipd-win utiliza el protocolo TCP/IP para reenviar el tráfico del dispositivo USB a través de una interfaz de red virtual entre VM/WSL y el sistema operativo Windows host. Primero, mostraremos cómo instalar el servidor usbipd-win en un host de Windows, luego instalaremos un cliente USB/IP en Linux (WSL) y conectaremos un dispositivo USB compartido a la máquina virtual Linux (WSL).

Usbipd-win es compatible con Windows 8.1 x64 y Windows Server 2012 R2 (y posteriores) y permite compartir dispositivos USB locales en Windows con otras máquinas virtuales (incluidos los sistemas operativos invitados WSL2 y Linux en Hyper-V). Anteriormente, en Hyper-V, solo era posible redirigir unidades USB a máquinas virtuales u otros tipos de dispositivos USB a través del modo de sesión mejorado, bastante limitado.

RELACIONADO:Cómo solucionar errores del host del protocolo de búsqueda de Windows

El proyecto usbipd-win está disponible en GitHub (https://github.com/dorssel/usbipd-win). Puede descargarlo e instalarlo manualmente (hay un archivo de instalación MSI disponible), pero es mucho más rápido instalarlo utilizando el administrador de paquetes integrado de Winget.

winget install --interactive --exact dorssel.usbipd-win

El programa creará un separadousbipd (host del dispositivo USBIP)servicio en Windows:"C:Program Filesusbipd-winusbipd.exe"que escucha en el puerto TCP 3240

Se ha creado una regla adicional en el Firewall de Windows Defender para usbipd.exe para permitir el acceso al puerto TCP 3240 desde computadoras en la red local.

Ahora configuremos la compatibilidad con USBIP en el subsistema de Windows para el entorno Linux. Asegúrese de que la versión del kernel en su imagen sea al menos 5.10.60.1 (nuestro ejemplo de demostración usa WSL 2 con una imagen de Ubuntu 22.04 LTS):

$ uname -a

Ahora necesita instalar las herramientas USB/IP y la base de identificación de 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

Utilice el siguiente comando en la imagen WSL de Debian:

$ sudo apt-get install usbip hwdata usbutils
Instale herramientas USB/IP en una imagen WSL basada en 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

Ahora abra un símbolo del sistema elevado en la computadora host con Windows y enumere los dispositivos USB:

usbipd wsl list

Como puede ver, ninguno de los dispositivos USB es compartido (No compartido). Puede compartir el dispositivo USB por su BUSID. En mi ejemplo, me gustaría pasar por elDispositivo de almacenamiento masivo USBcon BUISID 4-2 en WSL.

usbipd wsl attach --busid 4-2

  • Si está utilizando WSL 1 (no compatible con usbip), obtendrá un error.
    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.
  • Si aparece un error:usbipd: error: WSL kernel is not USBIP capable, actualice el sistema WSL con el siguiente comando:
    wsl --update

Verifique que su unidad flash USB esté conectada a WSL:

$ dmesg | tail
$ lsusb

Si desea compartir su dispositivo USB con otra computadora que ejecuta Linux a través de la red (puede ser una máquina virtual con un invitado Linux en Hyper-V o cualquier otro hipervisor), primero enumere los dispositivos USB disponibles en un host remoto de Windows:

$ usbip list --remote=192.168.13.21

Ahora puede montar el dispositivo USB requerido por su ID:

$ sudo usbip attach -remote=192.168.13.21 --busid=4-2

En este ejemplo, se especifica la dirección IP del host de Windows en el que se ejecuta el servidor usbipd-win.

El dispositivo USB compartido ahora debería ser visible para sus herramientas de Linux.

Para desactivar el uso compartido de dispositivos USB en Windows:

usbipd wsl detach --busid 4-2

Tenga en cuenta que las unidades USB conectadas de esta manera no se reconocen como dispositivos de bloque en WSL. Verifique esto usando ellsblkdominio. El hecho es que el kernel WSL no tiene un controlador para unidades USB (para agregarlos, deberá reconstruir el kernel).

Podrá montar el sistema de archivos de las unidades USB compartidas de forma estándar en las distribuciones de Linux.

Por lo tanto, debe utilizar los siguientes comandos para montar una unidad flash USB externa, un disquete o una tarjeta SD en WSL:

$ sudo mkdir /mnt/f
$ sudo mount -t drvfs f: /mnt/f

Monte WSL en unidades FAT, ExFAT, ReFs o NTFS, así como imágenes VHD.

Por lo tanto, usbipd-win se puede utilizar para pasar dispositivos USB físicos desde un host físico de Windows a computadoras WSL, máquinas virtuales o Linux a través de una red utilizando el protocolo USBOverIP.

También puede resultarle útil leer el artículo sobre cómo mover WSL a una unidad diferente.

Related Posts