概要
WSL2ではUSBデバイスの接続をネイティブには使用できないので、Win32とWSL2間でのUSBデバイス共有する必要があります。オープンソースのusbipd-winプロジェクトがその機能を提供するので使い方をまとめます。
シナリオ
USBメモリをWSL2で共有して使ってみることを想定します。
usbipd-win 4
2023年11月、usbipd-winがバージョン4に上がりました。
以前のバージョンと異なる内容として最も変わっていたのがクライアント側のツールをインストールする必要はなくなったことです。
インストール
msiファイルをダウンロードしてインストールします。
インストール後にコマンドプロンプトで確認できます。
事前準備
WSL2のLinuxディストリビューションでUSBデバイス種類をサポートできるようにカーネルビルドが必要です。
詳しい手順は以下の記事にまとめておきました。
USB接続前の確認
USBデバイスを接続前にLinuxディストリビューションを起動して確認します。
PS C:\> wsl --distribution Ubuntu-22.04
$ uname -r # カーネルバージョン
5.15.137.3-microsoft-standard-WSL2+
$ fdisk -l # USBメモリ接続前のディスク情報確認
fdisk: cannot open /dev/ram0: Permission denied
fdisk: cannot open /dev/ram1: Permission denied
fdisk: cannot open /dev/ram2: Permission denied
fdisk: cannot open /dev/ram3: Permission denied
fdisk: cannot open /dev/ram4: Permission denied
fdisk: cannot open /dev/ram5: Permission denied
fdisk: cannot open /dev/ram6: Permission denied
fdisk: cannot open /dev/ram7: Permission denied
fdisk: cannot open /dev/ram8: Permission denied
fdisk: cannot open /dev/ram9: Permission denied
fdisk: cannot open /dev/ram10: Permission denied
fdisk: cannot open /dev/ram11: Permission denied
fdisk: cannot open /dev/ram12: Permission denied
fdisk: cannot open /dev/ram13: Permission denied
fdisk: cannot open /dev/ram14: Permission denied
fdisk: cannot open /dev/ram15: Permission denied
fdisk: cannot open /dev/sda: Permission denied
fdisk: cannot open /dev/sdb: Permission denied
fdisk: cannot open /dev/sdc: Permission denied
$ lsusb # USBデバイスの情報表示
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ dmesg | tail # Linuxカーネル起動時のメッセージ表示
[ 2.098437] misc dxg: dxgk: dxgkio_query_adapter_info: Ioctl failed: -2
[ 2.098719] misc dxg: dxgk: dxgkio_query_adapter_info: Ioctl failed: -2
[ 2.098977] misc dxg: dxgk: dxgkio_query_adapter_info: Ioctl failed: -2
[ 2.099239] misc dxg: dxgk: dxgkio_query_adapter_info: Ioctl failed: -2
[ 2.099638] misc dxg: dxgk: dxgkio_query_adapter_info: Ioctl failed: -2
[ 2.099948] misc dxg: dxgk: dxgkio_query_adapter_info: Ioctl failed: -2
[ 2.100232] misc dxg: dxgk: dxgkio_query_adapter_info: Ioctl failed: -2
[ 2.250171] misc dxg: dxgk: dxgkio_query_adapter_info: Ioctl failed: -2
[ 3.428521] WSL (2): Creating login session for user
[ 49.066282] hv_balloon: Max. dynamic memory size: 16254 MB
USBデバイス共有設定
USBメモリのデバイスを差し込んでWindows側でUSBデバイスを共有します。
プロンプト実行には管理者権限で開いてください。
PS C:\> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
1-4 1a2c:4325 USB 入力デバイス Not shared
1-10 0411:023a USB 大容量記憶装置 Not shared
1-14 8087:0025 インテル(R) ワイヤレス Bluetooth(R) Not shared
Persisted:
GUID DEVICE
USBメモリが1-4
のバスIDで登録されているので、共有設定しておきます。
PS C:\> usbipd bind --busid 1-10
PS C:\> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
1-4 1a2c:4325 USB 入力デバイス Not shared
1-10 0411:023a USB 大容量記憶装置 Shared
1-14 8087:0025 インテル(R) ワイヤレス Bluetooth(R) Not shared
Persisted:
GUID DEVICE
この状態だとまだWindows側ではUSBメモリが認識されている状態です。
USBデバイスの接続
PS C:\> usbipd attach --wsl --busid 1-10
usbipd: info: Using WSL distribution 'Ubuntu-22.04' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Using IP address 192.168.224.1 to reach the host.
PS C:\> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
1-4 1a2c:4325 USB 入力デバイス Not shared
1-10 0411:023a USB 大容量記憶装置 Attached
1-14 8087:0025 インテル(R) ワイヤレス Bluetooth(R) Not shared
Persisted:
GUID DEVICE
USBデバイスを接続するとWindows側では表示されなくなります。
動作確認
Linuxディストリビューションで動作確認します。
$ dmesg | tail # Linuxカーネル起動時のメッセージ表示
[ 50.440096] usb-storage 2-1:1.0: USB Mass Storage device detected
[ 50.440479] scsi host1: usb-storage 2-1:1.0
[ 51.448117] scsi 1:0:0:0: Direct-Access BUFFALO USB Flash Disk 1.00 PQ: 0 ANSI: 6
[ 51.448427] sd 1:0:0:0: Attached scsi generic sg3 type 0
[ 51.451787] sd 1:0:0:0: [sdd] 60555264 512-byte logical blocks: (31.0 GB/28.9 GiB)
[ 51.453022] sd 1:0:0:0: [sdd] Write Protect is off
[ 51.453026] sd 1:0:0:0: [sdd] Mode Sense: 45 00 00 00
[ 51.454125] sd 1:0:0:0: [sdd] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 51.462207] sdd: sdd1
[ 51.466229] sd 1:0:0:0: [sdd] Attached SCSI removable disk
$ lsusb # 接続されたUSBデバイス情報確認
Bus 002 Device 002: ID 0411:023a BUFFALO INC. (formerly MelCo., Inc.) USB Flash Disk
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$ fdisk -l # 接続されたUSBデバイスのディスク確認
fdisk: cannot open /dev/ram0: Permission denied
fdisk: cannot open /dev/ram1: Permission denied
fdisk: cannot open /dev/ram2: Permission denied
fdisk: cannot open /dev/ram3: Permission denied
fdisk: cannot open /dev/ram4: Permission denied
fdisk: cannot open /dev/ram5: Permission denied
fdisk: cannot open /dev/ram6: Permission denied
fdisk: cannot open /dev/ram7: Permission denied
fdisk: cannot open /dev/ram8: Permission denied
fdisk: cannot open /dev/ram9: Permission denied
fdisk: cannot open /dev/ram10: Permission denied
fdisk: cannot open /dev/ram11: Permission denied
fdisk: cannot open /dev/ram12: Permission denied
fdisk: cannot open /dev/ram13: Permission denied
fdisk: cannot open /dev/ram14: Permission denied
fdisk: cannot open /dev/ram15: Permission denied
fdisk: cannot open /dev/sda: Permission denied
fdisk: cannot open /dev/sdb: Permission denied
fdisk: cannot open /dev/sdc: Permission denied
fdisk: cannot open /dev/sdd: Permission denied
$ sudo mkdir -p /mnt/usbfm # マウントディレクトリ作成
$ sudo mount -t vfat /dev/sdd1 /mnt/usbfm/ # マウント設定
片付け
$ sudo umount /mnt/usbfm/
PS C:\> usbipd detach --busid 1-10
PS C:\> usbipd unbind --busid 1-10
PS C:\> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
1-4 1a2c:4325 USB 入力デバイス Not shared
1-10 0411:023a USB 大容量記憶装置 Not shared
1-14 8087:0025 インテル(R) ワイヤレス Bluetooth(R) Not shared
Persisted:
GUID DEVICE