WSL2USBカメラ+他のUSB機器2022年09月06日版
WSL2LinuxKernel 5.10.60.1からKernelモジュールにUSBIP対応が標準的に組み込まれたらしいが、Microsoft公式が提供しているKernelや手順ををそのまま使用すると動作しない
2022年09月06日時点の最新カーネルは 5.15.62.1 だが、wsl --update で展開されるバージョンが 5.10.102.1 だったため 5.10.102.1 を使用する
以下すべての手順のWindows Terminal を使用する箇所は管理者権限 で実行
以下、[WT] はWindows Terminal、[Ubuntu] はUbuntu側のbashを表す
WSLのカーネルアップデートとusbipd-win のインストール
> wsl --update
> wsl --status
>winget install --interactive --exact dorssel.usbipd-win
見つかりましたusbipd-win [dorssel.usbipd-win]バージョン 2.3.0
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
Downloadinghttps://github.com/dorssel/usbipd-win/releases/download/v2.3.0/usbipd-win_2.3.0.msi
██████████████████████████████10.4MB /10.4MB
> wsl --install --distributionUbuntu-20.04
[WT] WSLのディストリビューションを起動(WSL2起動用アイコンをマウスでクリックして起動してもよい)
> wsl --list
Linux 用Windows サブシステムディストリビューション:
sudoapt install -ylinux-tools-5.4.0-77-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbipusbip /usr/lib/linux-tools/5.4.0-77-generic/usbip20
> wsl --shutdown
[WT]USBカメラがusbipd に認識されることを確認する (この記事では 2-7)
2-2 056e:00d9USB入力デバイス Not attached
2-3 1c4f:0027USB入力デバイス Not attached
2-7 1bcf:2284 FullHDwebcam,USBmicrophone Not attached
2-11 0495:3011ESSUSBDAC,USB入力デバイス Not attached
2-14 8087:0029インテル(R)ワイヤレスBluetooth(R) Not attached
[WT]USBカメラをUbuntu側にアタッチする(アタッチに成功した場合は何も表示されない)
>usbipd wsl attach --busid 2-7
>
[WT]USBカメラが正常にアタッチされていることを確認する(Attached と表示されていれば成功)
2-2 056e:00d9USB入力デバイス Not attached
2-3 1c4f:0027USB入力デバイス Not attached
2-7 1bcf:2284 FullHDwebcam,USBmicrophone Attached -Ubuntu-20.04
2-11 0495:3011ESSUSBDAC,USB入力デバイス Not attached
2-14 8087:0029インテル(R)ワイヤレスBluetooth(R) Not attached
[Ubuntu]Ubuntuのbashにログオンした既定のユーザを videoグループに所属させる。なお、WSLを起動した時点で既に追加されているメッセージが表示される。
[Ubuntu] WSL2上のUbuntu20.04 の中からUSBカメラが認識されていることを確認する。lsusbコマンドを経由すると正常にUSBカメラが認識されているが、/dev/video* にはUSBカメラが列挙されない
Bus 002 Device 001:ID 1d6b:0003Linux Foundation 3.0roothub
Bus 001 Device 003:ID 1bcf:2284Sunplus Innovation Technology Inc. FullHDwebcam
Bus 001 Device 001:ID 1d6b:0002Linux Foundation2.0roothub
ls: cannotaccess '/dev/video*': No such file or directory
[Ubuntu]USB CameraがWSL内で認識されるようにLinuxカーネルをカスタムビルドする。下記リポジトリの手順通りに実施すると、WSLLinuxカーネルがカスタムビルドされたものに入れ替わる。注意点は、<windowsusername> の部分だけは各自の環境のWindowsユーザー名に手で書き換える必要が有ること。なお、.wslconfig は絶対にwindows 側で編集してはならない。絶対に。
> wsl --shutdown
[WT]USBカメラがusbipd に認識されることを確認する (この記事では 2-7)
2-2 056e:00d9USB入力デバイス Not attached
2-3 1c4f:0027USB入力デバイス Not attached
2-7 1bcf:2284 FullHDwebcam,USBmicrophone Not attached
2-11 0495:3011ESSUSBDAC,USB入力デバイス Not attached
2-14 8087:0029インテル(R)ワイヤレスBluetooth(R) Not attached
[WT]USBカメラをUbuntu側にアタッチする(アタッチに成功した場合は何も表示されない)
>usbipd wsl attach --busid 2-7
>
https://www.imdb.com/de/list/ls599665017/
https://www.imdb.com/de/list/ls599665017/copy/
[WT]USBカメラが正常にアタッチされていることを確認する(Attached と表示されていれば成功)
2-2 056e:00d9USB入力デバイス Not attached
2-3 1c4f:0027USB入力デバイス Not attached
2-7 1bcf:2284 FullHDwebcam,USBmicrophone Attached -Ubuntu-20.04
2-11 0495:3011ESSUSBDAC,USB入力デバイス Not attached
2-14 8087:0029インテル(R)ワイヤレスBluetooth(R) Not attached
[Ubuntu] WSL2上のUbuntu20.04 の中からUSBカメラが認識されていることを確認する
Bus 002 Device 001:ID 1d6b:0003Linux Foundation 3.0roothub
Bus 001 Device 003:ID 1bcf:2284Sunplus Innovation Technology Inc. FullHDwebcam
Bus 001 Device 001:ID 1d6b:0002Linux Foundation2.0roothub
crw------- 1rootroot 81, 0 Sep 617:29 /dev/video0
crw------- 1rootroot 81, 1 Sep 617:29 /dev/video1
[Ubuntu]USBカメラがWSL2の中から認識されることを確認するテストコードを作成する
$ pip installopencv-contrib-python
$ cat << 'EOT'> ${HOME}/usbcam_test.py
import cv2
W=640
H=480
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M','J','P','G'))
#cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('Y','U','Y','V'))
cap.set(cv2.CAP_PROP_FRAME_WIDTH, W)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, H)
https://www.imdb.com/de/list/ls599660855/
https://www.imdb.com/de/list/ls599660855/copy/
whileTrue:
ret, frame