WSLでのUSBデバイス利用
Create | 2024-03-03 04:26:10 |
Last Update | 2024-03-03 04:26:10 |
TL;DR
usbipd
の使い方のメモ
メジャーバージョン4での破壊的変更後の仕様
導入
インストーラ
Releases · dorssel/usbipd-win
Windows software for sharing locally connected USB devices to other machines, including Hyper-V gues
https://github.com
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"
原因はよく分かっていないが,恐らく公式配布のディストリビューションではこの問題は起きない.