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を利用します。

私が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形式ファイル(インストーラー)をダウンロードしましょう。
私が試したときには「4.4.0」が最新でした。
ダウンロードしたファイルをダブルクリックすればインストールできます。
インストールの確認
ダウンロードしたUSBIPD-WINのインストールが完了したら正常に動いているかどうかを確認してみましょう。
「Windowsアイコンを右クリック」→「コンピューターの管理」を選択し、「サービスとアプリケーション」から「サービス」を選択してみましょう。
表示されるサービスに「USBIP Device Host」が存在し、状態が「実行中」になっていればOKです。
USBデバイスをWSL2で検出する
最初に使用したいUSBデバイス(USBカメラ)をWindows PCに接続しておきましょう。またWSL2(Ubuntu)も起動して利用できる状態にしておきます。
USBカメラについては、今回は手持ちの「Microsoft LifeCam HD-3000」というWebカメラを利用しました。
Windows上では次のように認識されています。
準備が整ったら管理者モードでPowerShell (あるいはWindows Terminal)を開きます。これは「Windowsアイコンを右クリック」→「PowerShell (管理者)」あるいは「ターミナル (管理者)」を選択します。
PowerShell(あるいはWindows Terminal)が開いたら次のコマンドを入力します。
usbipd list
これでWindowsに接続されているUSBデバイスの一覧が表示されます。私の場合は次のようになりました。
この中で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 list」を実行すると次のようにUSBカメラのステータスが「Attached」になっているはずです。
このときWindowsのデバイスマネージャーを確認すると、WSL2に接続したデバイスは「USBIP Shared Device」に変わっています。
つまりWSL2に接続したUSBデバイスは、Windows 11からは使用できなくなります。
ここまできたら次はUbuntuでの確認です。Ubuntuで次のコマンドを実行してみましょう。先ほどアタッチしたデバイスが表示されれば成功です。
lsusb
私の場合は次のようになりました。
ちゃんと「Microsoft LifeCam HD-3000」がWSL2のUbuntu上で認識されています。
ちなみに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カメラを使えるようにしたいと思います。
コメント