USB デバイスを接続する

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

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

前提条件

注意

Windows のバージョンとビルド番号を確認するには、Windows ロゴ キー + R キーを押して、「winver」と入力し、 [OK] を選択します。 [スタート][設定][Windows Update][更新プログラムの確認] を選択して、最新の Windows バージョンに更新できます。 Linux カーネルのバージョンを確認するには、お使いの Linux ディストリビューションを開き、コマンド「uname -a」を入力します。 最新のカーネルに手動で更新するには、PowerShell を開き、コマンド "wsl --update" を入力します。

重要

WSL 2 で実行されている Linux ディストリビューションに USB デバイスを接続するには、Windows 11 をお勧めします。 ただし、USBIPD-WIN プロジェクト リポジトリの手順に従って、USBIP が有効になっている WSL 2 カーネルを独自に構築することで、Windows 10 を使用して USB デバイスに接続できます。

USBIPD-WIN プロジェクトをインストールする

USB デバイスの接続のサポートは WSL ではネイティブに使用できないので、オープンソースの usbipd-win プロジェクトをインストールする必要があります。

  1. usbipd-win プロジェクトの最新リリースのページに移動します。
  2. .msi を選択します。これにより、インストーラーがダウンロードされます。 (このダウンロードを信頼するかどうかを確認する警告が表示される場合があります)。
  3. ダウンロードした usbipd-win_x.msi インストーラー ファイルを実行します。

注意

代わりに、Windows パッケージ マネージャー (winget) を使用して usbipd-win プロジェクトをインストールすることもできます。 winget が既にインストールされている場合は、単にコマンド winget install --interactive --exact dorssel.usbipd-win を使用して usbipd-win をインストールするだけです。 --interactive を省略すると、ドライバーのインストールに必要な場合に、winget によってコンピューターが即座に再起動されます。

これにより、次のものがインストールされます。

  • usbipd という名前のサービス (表示名: USBIP Device Host)。 このサービスの状態は、Windows のサービス アプリを使用して確認できます。
  • コマンド ライン ツールusbipd。 このツールの場所は、PATH 環境変数に追加されます。
  • すべてのローカル サブネットにサービスに接続することを許可する、usbipd と呼ばれるファイアウォール規則。 このファイアウォール規則は、アクセス制御を微調整するために変更を加えることができます。

Linux に USBIP ツールとハードウェア データベースをインストールする

USB/IP プロジェクトのインストールが完了したら、ユーザー空間ツールと USB ハードウェア識別子のデータベースをインストールする必要があります。

  1. Ubuntu (または任意の Linux ディストリビューション) で、こちらのコマンドを実行します。

    sudo apt install linux-tools-5.4.0-77-generic hwdata
    
  2. Linux ディストリビューションに関連付けられている /etc/sudoers ファイルを編集する必要があります。 このファイルによってアクセス許可が管理され、次の手順では、コマンド ラインのルートが usbip コマンドにアクセスすることを許可します。 Nano で次のコマンドを使用して、sudoers ファイルを開きます。

    sudo visudo
    
  3. sudoers ファイルで secure_path セクションを探し、ツール パスの場所 (/usr/lib/linux-tools/5.4.0-77-generic) を "先頭" に追加する必要があります。すると、行は次のようになります。sudoers

    Defaults secure_path="/usr/lib/linux-tools/5.4.0-77-generic:/usr/local/sbin:..."
    

この時点で、USB デバイスを共有するために Windows でサービスが実行され、共有デバイスに接続するために必要なツールが WSL にインストールされます。

USB デバイスを接続する

USB デバイスを接続する前に、WSL コマンド ラインが開いていることを確認します。 これにより、WSL 2 ライトウェイト VM がアクティブに保たれます。

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

    usbipd wsl list
    
  2. WSL にアタッチするデバイスのバス ID を選択 ’ し、次のコマンドを実行します。 ’Sudo コマンドを実行するためにパスワードを入力するよう WSL から求められます。

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

    lsusb
    

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

  4. WSL でデバイスの使用が完了した後は、USB デバイスの接続を物理的に解除するか、PowerShell から "管理者モード" でこちらのコマンドを実行します。

    usbipd wsl detach --busid <busid>
    

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

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