WSL2でUSBカメラを使う – 前編

WSL2でUSBカメラを使う 前編 WSL
スポンサーリンク

2025/02/28更新

2022年4月に作成した記事を、Windows 11 + Ubuntu 24.04 LTSの環境を念頭に更新しました。

前回はWSL+VS Codeという環境でOpenCVのプログラミングをしてみました。

前回の例では静止画ファイルを読み込み表示しましたが、OpenCVを使うならカメラを利用したくなるものです。

そこで今回はWSL2でUSBカメラを利用してみたいと思います。長くなりそうなので前編と後編の2部構成となります。

前編ではWSL2でUSBデバイスを認識できるところまで進めたいと思います。

スポンサーリンク

環境

今回はWindows 11にWSL2を利用して導入したUbuntu 24.04LTSを利用します。

Ubuntu 24.04 LTSをWindows 11上で動かす その1 準備とインストール
今回はWindows Subsystem for Linux (WSL2)を使ってWindows 11にUbuntuをインストールしてみます。WSLを利用するためには以前は複数のステップが必要でしたが、現在ではwslコマンド一発で導入できるようになっています。WSLを使う敷居がますます低くなったように感じます。

私が2025年2月にインストールした際には、カーネルバージョンは「5.15.167.4」となっていました。

Ubuntuでuname -rの結果は次のようになります。

$ uname -r
5.15.167.4-microsoft-standard-WSL2

Microsoftの情報によるとWSL2でUSBを使う場合は下記の条件があるそうです。

  • Windows 11 (ビルド22000以降)であること
  • x64プロセッサを利用していること
  • WSLが最新バージョンに更新されていること
  • WSL1ではなくWSL2を利用していること

WSL2を最新のバージョンに更新するには、Windows Terminalで

wsl --update

を実行すればOKです。

なお、Windows 10でもいろいろ頑張ればできるようですが、今回は紹介しません。

スポンサーリンク

USBIPD-WINの導入

まずはWindows上での作業になります。

WSL2でUSBを利用するためには、USBのデータをネットワーク形式(IP)に変換するツールであるUSBIPD-WINをインストールする必要があります。

USBIPD-WINのインストール

USBIPD-WINプロジェクトのリリースページから最新のMSI形式ファイル(インストーラー)をダウンロードしましょう。

Releases · dorssel/usbipd-win
Windows software for sharing locally connected USB devices to other machines, including Hyper-V guests and WSL 2. - dorssel/usbipd-win

私が試したときには「4.4.0」が最新でした。

USBIPD-WIN

ダウンロードしたファイルをダブルクリックすればインストールできます。

インストールの確認

ダウンロードしたUSBIPD-WINのインストールが完了したら正常に動いているかどうかを確認してみましょう。

「Windowsアイコンを右クリック」→「コンピューターの管理」を選択し、「サービスとアプリケーション」から「サービス」を選択してみましょう。

USBIPD-WINにより導入されたサービス

表示されるサービスに「USBIP Device Host」が存在し、状態が「実行中」になっていればOKです。

USBデバイスをWSL2で検出する

最初に使用したいUSBデバイス(USBカメラ)をWindows PCに接続しておきましょう。またWSL2(Ubuntu)も起動して利用できる状態にしておきます。

USBカメラについては、今回は手持ちの「Microsoft LifeCam HD-3000」というWebカメラを利用しました。

Windows上では次のように認識されています。

Windows上で認識されたUSBカメラ

準備が整ったら管理者モードでPowerShell (あるいはWindows Terminal)を開きます。これは「Windowsアイコンを右クリック」→「PowerShell (管理者)」あるいは「ターミナル (管理者)」を選択します。

PowerShell(あるいはWindows Terminal)が開いたら次のコマンドを入力します。

usbipd list

これでWindowsに接続されているUSBデバイスの一覧が表示されます。私の場合は次のようになりました。

usbipd listの結果

この中でWSL2で利用したいデバイス(USBカメラ)を探し、その「BUSID」を覚えておきます。私の場合は「2-3」になります。

続いて次のコマンドを入力します。最後の「2-3」は先ほど調べたBUSIDですので、適宜変更してください。

usbipd bind --busid 2-3

これで選択したデバイスが共有され、WSL2に接続できるようになりました。「usbipd list」を実行すると次のようにUSBカメラのステータスが「Shared」になっているはずです。

デバイスが共有された状態

次にUSBデバイスをWSL2に接続します。このときWSL2は起動しておきましょう。なお、最後の「2-3」は先ほど調べたBUSIDですので、適宜変更してください。

usbipd attach --wsl --busid 2-3

この「usbipd attach」と後述する「usbipd detach」は管理者モードでなくても実行可能です。

私が試したところ場合は次のようになりました。

usbipd attachの実行

「usbipd list」を実行すると次のようにUSBカメラのステータスが「Attached」になっているはずです。

usbipd attachを実行した状態

このときWindowsのデバイスマネージャーを確認すると、WSL2に接続したデバイスは「USBIP Shared Device」に変わっています。

usbipd attach後のデバイスマネージャー

つまりWSL2に接続したUSBデバイスは、Windows 11からは使用できなくなります。

ここまできたら次はUbuntuでの確認です。Ubuntuで次のコマンドを実行してみましょう。先ほどアタッチしたデバイスが表示されれば成功です。

lsusb

私の場合は次のようになりました。

lsusbの結果

ちゃんと「Microsoft LifeCam HD-3000」がWSL2のUbuntu上で認識されています。

ちなみにdmesgの方は次のようになっていました。

dmesgの結果

本来はこのようにUSBデバイスをWSL2のLinuxから認識できればそのデバイスを利用できるのですが、WSL2のLinuxにはUSBカメラのドライバーが含まれていないため利用できません。

USBシリアルデバイスの場合はドライバーが含まれているので、ここまでの手順で利用できるようになると思います。

USBデバイスの利用をやめる

WSL2上でUSBカメラが認識できていることを確認できたら、USBデバイスをWSL2から切断しておきましょう。最後の「2-3」は先ほど調べたBUSIDですので、適宜変更してください。

usbipd detach --busid 2-3

USBデバイスを物理的に取り外しても良いようです。

これでUSBデバイスがWSL2から切り離され、再びWindows 11から使えるようになるはずです。

detachしただけだとステータスは「Shared」なので、共有を辞めるためには管理者モードで下記のコマンドを実行します。

usbipd unbind --busid 2-3

まとめ

今回はWSL2のUbuntuでUSBデバイスを認識できるようにしてみました。

WSL2は仮想マシンのようなものなので物理的なUSBポートは有りませんが、USBIPD-WINというツールを使うことでWindowsに接続されたUSBデバイスを認識できます。

ただWSL2のLinux kernelにはUSBカメラのドライバーが含まれていないため、USBカメラを使うにはもう一工夫必要です。

次回はWSL2のLinux kernelを変更してUSBカメラを使えるようにしたいと思います。

コメント

タイトルとURLをコピーしました