Este guia percorrerá as etapas necessárias para conectar um dispositivo USB a uma distribuição do Linux em execução no WSL 2 usando o projeto de software livre USB/IP, usbipd-win.
A configuração do projeto USB/IP em sua máquina Windows habilitará cenários comuns de desenvolvedor USB, como atualizar um Arduino ou acessar um leitor de cartão inteligente.
Pré-requisitos
Executando Windows 11 (Build 22000 ou posterior). (O suporte ao Windows 10 é possível, consulte a observação abaixo).
Um computador com um processador x64 é necessário. (atualmente, não há suporte para x86 e Arm64 com usbipd-win).
Para verificar a versão e o número de build do seu Windows, selecione a tecla do logotipo do Windows + R, digite winver e selecione OK. Você pode atualizar para a versão mais recente do Windows selecionando Iniciar>Configurações>Windows Update>Verificar atualizações.
Para marcar a versão do kernel do Linux, abra a distribuição do Linux e insira o comando: uname -a. Para atualizar manualmente para o kernel mais recente, abra o PowerShell e insira o comando: wsl --update.
Importante
O WSL agora aceita o Windows 10 e o Windows 11 por meio da Microsoft Store, o que significa que os usuários do Windows 10 agora têm acesso às versões mais recentes do kernel sem precisar compilar a partir da fonte. Confira O WSL na Microsoft Store está disponível no Windows 10 e 11 para obter informações sobre como atualizar para a versão compatível com a Store do WSL. Se você não conseguir atualizar para a versão compatível com a Store do WSL e receber atualizações do kernel automaticamente, consulte o repositório do projeto USBIPD-WIN para obter instruções sobre como conectar dispositivos USB a uma distribuição Linux em execução no WSL 2 criando seu próprio kernel WSL 2 habilitado para USBIP.
Instalar o projeto USBIPD-WIN
O suporte para conexão de dispositivos USB não está disponível nativamente no WSL, portanto, você precisará instalar o projeto usbipd-win de software livre.
Requisitos do Kernel
Para usar o USBIPD com o Subsistema do Windows para Linux (WSL), você precisa ter uma versão do kernel Linux de 5.10.60.1 ou superior. Se a versão do kernel instalada for anterior à 5.10.60.1, ela poderá ser atualizada primeiro desligando todas as instâncias em execução do WSL com wsl --shutdown e, em seguida, executando o comando: wsl --update.
Selecione o arquivo .msi, que baixará o instalador. (Você pode receber um aviso solicitando que confirme se confia no instalador baixado).
Execute o arquivo instalador usbipd-win_x.y.z.msi baixado.
Observação
Como alternativa, você também pode instalar o projeto usbipd-win por meio do Gerenciador de Pacotes do Windows (winget). Se você já instalou o winget, basta usar o comando: winget install --interactive --exact dorssel.usbipd-win para instalar o usbipd-win. Se você deixar o --interactive de fora, o winget poderá reiniciar imediatamente o computador se for necessário instalar os drivers.
Isso instalará:
Um serviço chamado usbipd (nome de exibição: Host do Dispositivo USBIP). Você pode verificar o status desse serviço usando o aplicativo Serviços no Windows.
Uma ferramenta de linha de comando usbipd. O local dessa ferramenta é adicionado à variável de ambiente PATH.
Uma regra de firewall chamada usbipd para permitir que todas as sub-redes locais se conectem ao serviço. Você pode modificar essa regra de firewall para ajustar o controle de acesso.
Anexar um dispositivo USB
Antes de anexar seu dispositivo USB, verifique se uma linha de comando WSL está aberta. Isso manterá a VM leve do WSL 2 ativa.
Liste todos os dispositivos USB conectados ao Windows abrindo o PowerShell no modo de administrador e inserindo o comando a seguir. Depois que os dispositivos estiverem listados, selecione e copie a ID do barramento do dispositivo que você deseja anexar ao WSL.
usbipd list
Antes de anexar o dispositivo USB, o comando usbipd bind deve ser usado para compartilhar o dispositivo, permitindo que ele seja anexado ao WSL. Isso requer privilégios de administrador. Selecione a ID do barramento do dispositivo que você deseja usar no WSL e execute o comando a seguir. Depois de executar o comando, verifique se o dispositivo é compartilhado usando o comando usbipd list novamente.
usbipd bind --busid 4-4
Para anexar o dispositivo USB, execute o comando a seguir. (Você não precisa mais usar um prompt de administrador elevado.) Certifique-se de que um prompt de comando WSL esteja aberto para manter a VM leve do WSL 2 ativa. Observe que, enquanto o dispositivo USB estiver anexado ao WSL, ele não poderá ser usado pelo Windows. Depois de anexado ao WSL, o dispositivo USB pode ser usado por qualquer distribuição em execução como WSL 2. Verifique se o dispositivo está anexado usando usbipd list. No prompt do WSL, execute lsusb para verificar se o dispositivo USB está listado e se é possível interagir com ele usando ferramentas do Linux.
usbipd attach --wsl --busid <busid>
Abra o Ubuntu (ou sua linha de comando WSL preferida) e liste os dispositivos USB anexados por meio do comando:
lsusb
Você deverá ver o dispositivo que acabou de anexar e poder interagir com ele usando ferramentas normais do Linux. Dependendo do aplicativo, talvez seja necessário configurar regras de udev para permitir que usuários não raiz acessem o dispositivo.
Depois de terminar de usar o dispositivo no WSL, você poderá desconectar fisicamente o dispositivo USB ou executar este comando do PowerShell:
A fonte deste conteúdo pode ser encontrada no GitHub, onde você também pode criar e revisar problemas e solicitações de pull. Para obter mais informações, confira o nosso guia para colaboradores.
Comentários do Windows Subsystem for Linux
O Windows Subsystem for Linux é um projeto código aberto. Selecione um link para fornecer comentários:
Neste módulo, você aprenderá a usar o Subsistema do Windows para Linux (WSL) com o Visual Studio Code (VS Code). Exploramos o processo de instalação e os conceitos básicos de uso da WSL. Além disso, instalamos e utilizamos a extensão WSL do Visual Studio Code. Por fim, demonstramos como depurar e executar o código Python no VS Code em nosso ambiente WSL.