【WSL2】Windows 11上の仮想UbuntuOSでUSB Webカメラを認識させる完全ガイド (usbipd-win)
WSL2は開発者にとって非常に強力なツールですが、ハードウェア(USB Webカメラなど)への直接アクセスはデフォルトで制限されており、ここで躓く方が多いようです。特にOpenCVでの画像処理や物体検出(Object Detection)プロジェクトを行う場合、カメラ接続は必須ですよね。
今回は、WSL2 (Windows Subsystem for Linux 2) 環境での開発における最大の難関の一つ、「USB Webカメラの認識(パススルー)」について解説します。
通常、WSL2からはホスト(Windows)のUSBデバイスに直接アクセスできません。しかし、オープンソースツールの usbipd-win を使用することで、Windows上のWebカメラをWSL2(Ubuntuなど)にパススルーし、あたかもLinuxに直接接続されているかのように扱うことができます。
その手順をステップバイステップでまとめました。
🛠️ 前提条件 (Prerequisites)
作業を始める前に、以下の環境を確認してください。
- OS: Windows 11 (推奨) または Windows 10 (Build 19044以上)
- WSL2: インストール済みであること (Ubuntu 20.04/22.04など)
-
Linux Kernel: 5.10.60.1 以上
- ターミナルで
uname -rを入力して確認可能です。
- ターミナルで
Step 1. Windows側に usbipd-win をインストール
まず、WindowsとWSL間のUSB通信を可能にするツール usbipd-win をインストールします。
- PowerShellを管理者権限(Administrator)で開きます。
- 以下の
wingetコマンドを入力してインストールします。
## Powershell
winget install --interactive --exact dorssel.usbipd-win

インストールが完了したら、環境変数を適用するためにターミナルを一度閉じてから、再度開いてください。
Step 2. WSL2 (Ubuntu) 側にツールをインストール
次に、Linux (WSL2) 側でもUSB信号を受け取るための準備が必要です。WSL2のターミナルを開き、以下のコマンドを順に実行します。
パッケージリストの更新とツールのインストール
## bash in WSL2
sudo apt update
sudo apt install linux-tools-virtual hwdata
# もしカーネルバージョンが見つからない等のエラーが出る場合は以下を試してください
sudo apt install linux-tools-generic -y
*Tips:
linux-tools-virtualは、現在のカーネルバージョンに合ったusbipツールをインストールします。エラーが出る場合は、linux-tools-genericが代替策となります。
Step 3. USBカメラを接続する (最重要ステップ!)
いよいよWindowsに接続されたカメラをWSLにパススルーします。この操作は PowerShell(管理者権限) で行います。
- USBデバイスリストの確認
## Powershell
usbipd list

このコマンドを実行すると、PCに接続されているUSBデバイス一覧が表示されます。ここで使用したい Webカメラの名称と、その左側に表示されている BUSID (例: 1-2 や 1-5) をメモしてください。
- デバイスのbind (初回のみ)
## Powershell
usbipd bind --busid <カメラのBUSID>
# 例: usbipd bind --busid 1-5
もし対象デバイスの状態(STATE)がNot sharedとなっている場合、共有可能な状態(Shared)にする必要があります。(すでに Shared ならこの手順はスキップ可能です)
*注意: もし通常コマンドでエラーが出る場合は、強制的にバインドするオプションを試してください。
usbipd bind --force --busid <カメラのBUSID>

- WSL2へデバイスを接続 (Attach)
## Powershell
usbipd attach --wsl --busid <カメラのBUSID>
# 例: usbipd attach --wsl --busid 1-5
実際にデバイスをWSLに接続します。
!重要なポイント: この時点でWSL2のターミナルが起動している(バックグラウンドで動いている)必要があります。!
成功すれば特にメッセージは表示されずコマンドが終了するか、Attachedに関するメッセージが表示されます。

*順序について: WSL2が起動していない状態で
attachするとエラーになります。
「WSL2を起動」→「PowerShellでattach」の順序を守ってください。
Step 4. 接続確認とテスト
WSL2 (Ubuntu) のターミナルに戻り、カメラが正しく認識されたか確認しましょう。
- USBリストの確認
## bash in WSL2
lsusb
出力リストにWebカメラのメーカー名やモデル名が表示されていれば成功です!
- ビデオデバイスの確認
## bash in WSL2
ls -l /dev/video*
/dev/video0、/dev/video1のようにビデオノードが生成されていれば、OpenCVなどのプログラムからカメラを利用する準備は完了です。

*注意点: USBカメラをWSL2に
attachしている間は、Windows側(Zoomやカメラアプリなど)からはそのカメラを使用できなくなります。 Windowsで再度使いたい場合は、後述するdetach操作が必要です。
➡️ Windowsのカメラアプリを開いたらこんな様子に…。Windowsではカメラを見つけられないらしい。
🎯 活用例: OpenCV Pythonでのテスト
簡単なPythonコードで動作確認をしてみましょう。
## python3
import cv2
# 通常は「/dev/video0」がデフォルトのカメラです
cap = cv2.VideoCapture("/dev/video0")
if not cap.isOpened():
print("カメラを開けません")
exit()
while True:
ret, frame = cap.read()
if not ret:
break
cv2.imshow('WSL2 Camera Test', frame)
# 'q' キーで終了
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
*補足:
cv2.imshowでウィンドウを表示するには、WSLg (Windows 11に標準搭載) が機能しているか、XServerの設定が必要です。
💡 トラブルシューティング
- 権限エラー (Permission denied): WSL内で
/dev/video0へのアクセス権限がない場合、以下のコマンドで現在のユーザーをvideoグループに追加するのがベストプラクティスです。
## bash in WSL2
sudo usermod -aG video $USER
(設定反映のため、一度WSLを再起動するか再ログインが必要です)
*Tips: 手っ取り早く解決したい場合は
sudo chmod 777 /dev/video0も有効です。
- 接続が切れる: USBケーブルを抜いたりPCを再起動すると接続は解除されます。その都度、Step 3の
attachコマンドを実行してください。
Step 5. 使用後の切断 (Detach)
作業が終わったら、USBデバイスをWindows側に返却(Detach)しておきましょう。
- 接続解除 (Detach)
PowerShell (管理者) で実行します。
## Powershell
usbipd detach --busid <カメラのBUSID>
# 例: usbipd detach -–busid 1-5
- bind解除 (Unbind / 必要な場合)
完全に共有設定を解除したい場合はunbindします。
## Powershell
usbipd unbind --busid <カメラのBUSID>
# 例: usbipd unbind -–busid 1-5

*解説: 上記のように対象デバイス(BUSID 1-5)のSTATEが、
Not sharedに戻ったことを確認できる。
おわりに
これでWSL2環境でも自由にUSBカメラを使って、画像収集やモデル推論ができるようになりました。WindowsとLinuxの境界線がどんどんなくなってきて便利ですね。
ぜひ試してみてください!🚀

Discussion