🔌

WSL2でUSBデバイスを使う

2023/08/29に公開

概要

WSL2で作った開発環境でUSBデバイスと通信を行うには、ホストとゲストのどちらにもUSB/IPツールをインストールする必要がある

2023/09/14 追記:USBデバイスを接続するbatファイルを作成しました

環境

環境 情報
PC HP デスクトップ
OS(Host) Windows 11 Home 22H2
WSL2 1.2.5.0
OS(WSL2) Ubuntu 22.04.3 LTS

USB/IPとは

ネットワークIPを経由してUSBデバイスを共有することを目的としたプロジェクト

USB I/OメッセージをTCP/IPペイロードにカプセル化して通信する

https://usbip.sourceforge.net/

ホスト(Windows11)にusbipd-winをインストールする

https://github.com/dorssel/usbipd-win

wingetを使ってインストールする場合は

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

WSL2へUSBIPツールとハードウェアデータベースをインストールする

Bash
sudo apt install linux-tools-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20

USBデバイスを接続する

  1. PowerShellを管理者として開き、次のコマンドを入力することで、接続されているUSB デバイスの一覧を表示する
PowerShell
usbipd wsl list
  1. WSL2で接続したいデバイスのbusidを<busid>と置き換えて次のコマンドを実行する
PoserShell
usbipd wsl attach --busid <busid>
  1. WSL2でコマンドラインを開き、次のコマンドで接続されたUSB デバイスが接続されているか確認する
Bash
lsusb
  1. USBデバイスの接続を解除するには
PowerShell
usbipd wsl detach --busid <busid>

躓いたこと

上の手順2のコマンドを実行したとき以下のようなエラーを吐いた

PowerShell
usbipd: warning: A third-party firewall may be blocking the connection; ensure TCP port 3240 is allowed.

これは、私の環境にはMcAfeeがインストールされており、それによってportの割り当てをブロックされていることが原因だった

McAfeeのfirewallを一時的に無効にすることで解決した

追記(2023/09/14)

USBデバイスの一覧表示を表示し、任意のbusidを指定して接続するbatファイルを作成しました(2023/09/14)

usb_wsl.bat
@echo off

usbipd wsl list

set /p device="busid >> "

usbipd wsl attach --busid %device%

usbipd wsl list

参考

https://learn.microsoft.com/ja-jp/windows/wsl/connect-usb

Discussion