WSL2へUSBデバイス共有、usbipd-win 4

# 概要

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287622/69093f40-1990-0f7c-125b-0e1e9f089a6a.png)

WSL2ではUSBデバイスの接続をネイティブには使用できないので、Win32とWSL2間でのUSBデバイス共有する必要があります。オープンソースのusbipd-winプロジェクトがその機能を提供するので使い方をまとめます。

# シナリオ

USBメモリをWSL2で共有して使ってみることを想定します。

# usbipd-win 4

2023年11月、usbipd-winがバージョン4に上がりました。
以前のバージョンと異なる内容として最も変わっていたのがクライアント側のツールをインストールする必要はなくなったことです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287622/c5bafb62-023f-5512-e1bf-953c03f54f21.png)

# インストール

msiファイルをダウンロードしてインストールします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287622/21001fe4-21f7-3b0f-b67b-c218951a1f29.png" width="400">

インストール後にコマンドプロンプトで確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287622/d92bb609-68fc-16fa-a6f5-71352d95fd58.png)

# 事前準備

WSL2のLinuxディストリビューションでUSBデバイス種類をサポートできるようにカーネルビルドが必要です。
詳しい手順は以下の記事にまとめておきました。

https://qiita.com/motoJinC25/items/682f6d0c85f74eda3ba4

# USB接続前の確認

USBデバイスを接続前にLinuxディストリビューションを起動して確認します。

```powershell
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デバイスを共有します。
プロンプト実行には管理者権限で開いてください。

```powershell
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で登録されているので、共有設定しておきます。

```powershell
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メモリが認識されている状態です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287622/af61d2d2-3b29-dff1-ffbe-8cbf0be0969b.png)

# USBデバイスの接続

```powershell
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側では表示されなくなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287622/ab7356cc-19ae-ebba-5888-466e9d15f76e.png)

# 動作確認

Linuxディストリビューションで動作確認します。

```bash
$ 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/  # マウント設定
```

# 片付け

```bash
$ sudo umount /mnt/usbfm/
```

```powershell
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
```