TL;DR #
usbipdの使い方のメモ
メジャーバージョン4での破壊的変更後の仕様
導入 #
インストーラ #
https://github.com/dorssel/usbipd-win/releases
winget #
winget install usbipd基本 #
list #
Windowsホストに接続されている,USBIPで使用可能なデバイスを列挙する.
usbipd list
Connectedはホストに接続されているデバイス,Persistedは接続されていないがbindが永続化されているデバイス.
- BUSID
- 接続されているUSBバスのID
- 操作するデバイスを指定する際に使用
- VID:PID
- Vendor ID & Product ID
- デバイスの特定に使える
- STATE
- デバイスの状態
Not Shared: 共有されていないShared: 共有対象Shared (forced): 共有対象(force bind)Attached: アタッチ済み
- デバイスの状態
bind #
USBデバイスをUSBIPによる共有の対象とする. あくまで共有対象となるだけで,attachしなければWindows側で使用できる. この設定は,一度行えばunbindするまで永続する.
usbipd bind -b <BUSID>
force bind #
デバイスをWindows側で認識させず,USBIPでの共有Onlyにする. attachしていなくてもホストから使用できない. デバイスがbusyと認識されているとattachができないため,それを避けるために有効.
-fオプションの付加のみで設定可能.
usbipd bind -b <BUSID> -f
attach #
複数のWSLディストリビューションがある場合,すべてにattachされる.
usbipd attach --wsl -b <BUSID>
detach #
usbipd detach -b <BUSID>応用 #
vSwitchをBridgeにしている場合 #
WSLでBridgeインタフェースを使用し,ローカルネットワークのIPを付与している場合,usbip attachではアタッチできない.
WSL側でattach操作を行う.
attach #
sudo usbip attach --remote=<HOST IP> --busid=<BUSID>
WSL側でのデバイスの確認 #
usbip port
detach #
上記で確認したPort番号を指定する
sudo usbip detach --port=<PORT>
Windows側からdetachすることも可能
usbipd detach -b <BUSID>他のLinuxでの利用 #
Bridgeの場合のWSLと同様 ただし別のマシンからのアクセスの場合,ファイアウォールで3240ポート(TCP)が許可されている必要がある. これはBridge使用のWSLでも同じかも.
Troubleshoot #
Mounting ‘C:\Program Files\usbipd-win\WSL’ within WSL failed #
以下のようなエラーでattachに失敗することがある.

Windows側のusbipdからWSLへattachさせる際,C:\Program Files\usbipd-win\WSL以下にあるバイナリ・スクリプトをWSLで実行させている.
そのため,このディレクトリをdrvfsでWSLへマウントさせなければいけないが,何らかの理由で自動マウントに失敗してしまう.
以下のコマンドをWSLで実行すれば問題無くattachできるようになる.
sudo mount -t drvfs -o "ro,umask=222" "C:\Program Files\usbipd-win\WSL" "/var/run/usbipd-win"原因はよく分かっていないが,恐らく公式配布のディストリビューションではこの問題は起きない.