USB デバイスを接続する
このガイドでは、USB/IP オープンソース プロジェクト usbipd-win を使用して、WSL 2 で実行されている Linux ディストリビューションに USB デバイスを接続するために必要な手順について説明します。
お使いの Windows マシンで USB/IP プロジェクトを設定すると、Arduino へのフラッシュ書き込みやスマートカード リーダーへのアクセスなど、開発者にとって一般的な USB シナリオが有効になります。
前提条件
- Windows 11 (ビルド 22000 以降) が実行されている。 (Windows 10 対応可、詳細は以下の注意を参照)。
- x64 プロセッサを搭載したマシンが必要です。 (x86 と Arm64 は現在、usbipd-win ではサポートされていません)。
- WSL がインストールされ、最新バージョンで設定されています。
- Linux ディストリビューションがインストールされており、かつ WSL 2 に設定されている。
Note
Windows のバージョンとビルド番号を確認するには、Windows ロゴ キー + R キーを押して、「winver」と入力し、[OK] を選択します。 [スタート]>[設定]>[Windows Update]>[更新プログラムの確認] を選択して、最新の Windows バージョンに更新できます。
Linux カーネルのバージョンを確認するには、お使いの Linux ディストリビューションを開き、コマンド「uname -a
」を入力します。 最新のカーネルに手動で更新するには、PowerShell を開き、コマンド wsl --update
を入力します。
重要
WSL では、Windows 10 と Windows 11 の両方が Microsoft Store でサポートされるようになりました。つまり、Windows 10 のユーザーは、ソースからコンパイルしなくても、最新のカーネル バージョンにアクセスできるようになりました。 Store でサポートされるバージョンの WSL に更新する方法については、Microsoft Store の WSL で Windows 10 と 11 が一般提供されるようになったことに関する記事をご覧ください。 Store でサポートされるバージョンの WSL に更新できず、カーネルの更新プログラムを自動的に受け取る場合は、独自の USBIP 対応 WSL 2 カーネルをビルドし、WSL 2 で実行されている Linux ディストリビューションに USB デバイスを接続する手順について、USBIPD-WIN プロジェクトのリポジトリをご覧ください。
USBIPD-WIN プロジェクトをインストールする
USB デバイスの接続のサポートは WSL ではネイティブに使用できないので、オープンソースの usbipd-win プロジェクトをインストールする必要があります。
カーネルの要件
Linux 用 Windows サブシステム (WSL) で USBIPD を使用するには、Linux カーネルのバージョン 5.10.60.1 以降が必要です。 インストールされているカーネルのバージョンが 5.10.60.1 より以前の場合、最初に wsl --shutdown
を使用して WSL の実行中のインスタンスをシャットダウンし、コマンド wsl --update
を実行すると更新できます。
WSL に USBIPD をインストールする
- usbipd-win プロジェクトの最新リリースのページに移動します。
- .msi を選択します。これにより、インストーラーがダウンロードされます。 (このダウンロードを信頼するかどうかを確認する警告が表示される場合があります)。
- ダウンロードした usbipd-win_x.msi インストーラー ファイルを実行します。
Note
代わりに、Windows パッケージ マネージャー (winget) を使用して usbipd-win プロジェクトをインストールすることもできます。 winget が既にインストールされている場合は、単にコマンド winget install --interactive --exact dorssel.usbipd-win
を使用して usbipd-win をインストールするだけです。 --interactive を省略すると、ドライバーのインストールに必要な場合に、winget によってコンピューターが即座に再起動されます。
これにより、次のものがインストールされます。
usbipd
という名前のサービス (表示名: USBIP Device Host)。 このサービスの状態は、Windows のサービス アプリを使用して確認できます。- コマンド ライン ツール
usbipd
。 このツールの場所は、PATH 環境変数に追加されます。 - すべてのローカル サブネットにサービスに接続することを許可する、
usbipd
と呼ばれるファイアウォール規則。 このファイアウォール規則は、アクセス制御を微調整するために変更を加えることができます。
USB デバイスを接続する
USB デバイスを接続する前に、WSL コマンド ラインが開いていることを確認します。 これにより、WSL 2 ライトウェイト VM がアクティブに保たれます。
Note
このドキュメントでは、usbipd-win 4.0.0
以上がインストール済みであることを前提としています
PowerShell を "管理者" モードで開き、次のコマンドを入力することで、Windows に接続されたすべての USB デバイスを一覧表示します。 デバイスが一覧表示されたら、WSL に接続するデバイスのバス ID を選択してコピーします。
usbipd list
USB デバイスを接続する前に、コマンド
usbipd bind
を使ってデバイスを共有し、WSL に接続できるようにする必要があります。 それには管理者特権が必要です。 WSL で使用するデバイスのバス ID を選択し、次のコマンドを実行します。 コマンドを実行した後、もう一度コマンドusbipd list
を使ってデバイスが共有されていることを確認します。usbipd bind --busid 4-4
USB デバイスを接続するには、次のコマンドを実行します。 (管理者特権のプロンプトを使う必要はもうありません。)WSL 2 の 軽量 VM をアクティブに保つために、WSL コマンド プロンプトは開いたままにします。 USB デバイスが WSL に接続されている間、Windows では使用できないことに注意してください。 WSL に接続した USB デバイスは、WSL 2 として実行している任意のディストリビューションで使用できます。
usbipd list
を使って、デバイスが接続されていることを確認します。 WSL のプロンプトからlsusb
を実行して、USB デバイスが一覧表示され、Linux ツールを使って操作できることを確認します。usbipd attach --wsl --busid <busid>
Ubuntu (または任意の WSL コマンド ライン) を開き、次のコマンドを使用して接続された USB デバイスの一覧を表示します。
lsusb
先ほど接続したデバイスが表示され、Linux の通常のツールを使用して操作できるようになります。 お使いのアプリケーションによっては、ルート以外のユーザーがデバイスにアクセスするのを許可するために、udev の規則を構成する必要がある場合があります。
WSL でデバイスを使い終わったら、USB デバイスの接続を物理的に解除するか、PowerShell から次のコマンドを実行することができます。
usbipd detach --busid <busid>
この仕組みの詳細については、Windows コマンド ラインのブログと GitHub の usbipd-win リポジトリを参照してください。
ビデオ デモについては、「WSL 2: USB デバイスの接続 (Tabs vs Spaces ショー)」を参照してください。
Windows Subsystem for Linux