USB デバイスを接続する

このガイドでは、USB/IP オープンソース プロジェクト usbipd-win を使用して、WSL 2 で実行されている Linux ディストリビューションに USB デバイスを接続するために必要な手順について説明します。

お使いの Windows マシンで USB/IP プロジェクトを設定すると、Arduino へのフラッシュ書き込みやスマートカード リーダーへのアクセスなど、開発者にとって一般的な USB シナリオが有効になります。

前提条件

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 プロジェクトをインストールする必要があります。

  1. usbipd-win プロジェクトの最新リリースのページに移動します。
  2. .msi を選択します。これにより、インストーラーがダウンロードされます。 (このダウンロードを信頼するかどうかを確認する警告が表示される場合があります)。
  3. ダウンロードした 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 以上がインストール済みであることを前提としています

  1. PowerShell を "管理者" モードで開き、次のコマンドを入力することで、Windows に接続されたすべての USB デバイスを一覧表示します。 デバイスが一覧表示されたら、WSL に接続するデバイスのバス ID を選択してコピーします。

    usbipd list
    
  2. USB デバイスを接続する前に、コマンド usbipd bind を使ってデバイスを共有し、WSL に接続できるようにする必要があります。 それには管理者特権が必要です。 WSL で使用するデバイスのバス ID を選択し、次のコマンドを実行します。 コマンドを実行した後、もう一度コマンド usbipd list を使ってデバイスが共有されていることを確認します。

    usbipd bind --busid 4-4
    
  3. USB デバイスを接続するには、次のコマンドを実行します。 (管理者特権のプロンプトを使う必要はもうありません。)WSL 2 の 軽量 VM をアクティブに保つために、WSL コマンド プロンプトは開いたままにします。 USB デバイスが WSL に接続されている間、Windows では使用できないことに注意してください。 WSL に接続した USB デバイスは、WSL 2 として実行している任意のディストリビューションで使用できます。 usbipd list を使って、デバイスが接続されていることを確認します。 WSL のプロンプトから lsusb を実行して、USB デバイスが一覧表示され、Linux ツールを使って操作できることを確認します。

    usbipd attach --wsl --busid <busid>
    
  4. Ubuntu (または任意の WSL コマンド ライン) を開き、次のコマンドを使用して接続された USB デバイスの一覧を表示します。

    lsusb
    

    先ほど接続したデバイスが表示され、Linux の通常のツールを使用して操作できるようになります。 お使いのアプリケーションによっては、ルート以外のユーザーがデバイスにアクセスするのを許可するために、udev の規則を構成する必要がある場合があります。

  5. WSL でデバイスを使い終わったら、USB デバイスの接続を物理的に解除するか、PowerShell から次のコマンドを実行することができます。

    usbipd detach --busid <busid>
    

この仕組みの詳細については、Windows コマンド ラインのブログGitHub の usbipd-win リポジトリを参照してください。

ビデオ デモについては、「WSL 2: USB デバイスの接続 (Tabs vs Spaces ショー)」を参照してください。