Windows 11 で Windows Subsystem for Linux に USB デバイスを接続する方法

Windows 11 では、Windows Subsystem for Linux に USB デバイスを接続し、直接操作することができます。

クイックリンク

  • usbipd-winとは何ですか?
  • Linux 用 Windows サブシステムで USB デバイスを接続する
  • GUI の代替手段はありますか?

マイクロソフトが導入 Linux 用 Windows サブシステム (WSL) 少し前に、仮想マシンをセットアップすることなく、Windows インストールから Linux アプリを直接実行するためのサポートが提供されました。 非常に複雑な互換性レイヤーであるため、WSL にはいくつかの制限がありました。 初期の実装では本格的な Linux カーネルさえ使用されていなかったため、いくつかのアプリケーションは互換性の問題に直面しました。 バージョン 2 では多くの改善が加えられましたが、物理 USB デバイスの接続のサポートというものがまだ欠けていました。

あなたが Linux 用 Windows サブシステムのアクティブなユーザーで、WSL で実行されている Linux インスタンスから直接 USB デバイスにアクセスしたい場合は、 大きな進歩 この面で。 Microsoft のオープンソースへの貢献に感謝 usbipd-win プロジェクトにより、WSL で USB パススルー アクセスを楽しめるようになりました。 これは、エンド ユーザーが、Linux サブシステムではサポートされていない、Android デバイスのフラッシュなどのタスクを Linux 用 Windows サブシステムで実行できることを意味します。

usbipd-winとは何ですか?

usbipd-win プロジェクトの目的は、ローカルに接続された USB デバイスを Hyper-V ゲストや WSL2 などの他のマシンと共有するためのソリューションを作成することです。 ただし、公式の WSL2 Linux カーネルは以前はサポートされていませんでした。 USB/IPプロトコル、ユーザーが自分でカーネルを構築する必要があります。

WSL カーネル バージョン 5.10.60.1 以降、必要なパラメータはすぐに設定できるため、手動で再コンパイルする必要はありません。 Microsoft は、Windows 上で USB デバイスを共有できるようにし、WSL 内からシームレスに接続できるようにするためのコマンド ライン インターフェイスもプロジェクトに提供しました。

Linux 用 Windows サブシステムで USB デバイスを接続する

始める前に、実行していることを確認してください Windows 11 すべての WSL アップデートをインストールしました。 前述したように、これが機能するには WSL 2 Linux ディストリビューションが必要です。

  1. WSL 内から次のコマンドを実行します。
    uname -a
    (以下に示すように) カーネル バージョン 5.10.60.1 以降が表示されれば、問題ありません。
    • インストールされているカーネルのバージョンが 5.10.60.1 より古い場合は、次のコマンドを使用して更新できます。
      wsl --shutdown
      wsl --update
  2. usbipd-win プロジェクトの GitHub リポジトリに移動します。 それから 最新リリースをダウンロードしてインストールする.
    • 最新バージョンの usbipd-win は、Windows ハードウェア互換性プログラム認定ドライバーのおかげで、ドライバーのサイレント インストールをサポートしています。 もサポートします 開発チャンネルのビルド Windows 11の。
    • GitHub のリリース ページに加えて、次を使用してアプリをインストールおよび更新できます。 Windows パッケージ マネージャー CLI (別名ウィンゲット)。
      winget install--interactive --exact dorssel.usbipd-win
  3. USB/IP 用のユーザー空間ツールと USB ハードウェア識別子のデータベースをインストールします。 WSL 上で Ubuntu を実行している場合は、次のコマンドを実行します。
    sudo apt install linux-tools-virtual hwdata
    sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20
    • さまざまなメタ パッケージを選択できます (例: linux-tools-generic) インストールされているディストリビューションによっても異なります。 ただし、メタ パッケージのバージョン番号に応じて、次の手順でパス変数を調整する必要がある場合があります。
    • 他のディストリビューションについては、関連するパッケージ管理ツールのドキュメントを参照してください。
  4. を使用してシンボリックリンクが作成された場合、 update-alternatives 前の手順のコマンドが機能しなかった場合は、sudo オプションを手動で変更して、root ユーザーが usbip 指示。 これを行うには、 /etc/sudoers ファイルを使用して sudo visudo そして追加します /usr/lib/linux-tools/-generic の始まりに secure_path. 次のようになります。
    Defaults secure_path="/usr/lib/linux-tools/5.4.0-77-generic:/usr/local/sbin:..."
  5. 管理者として新しいターミナル インスタンスを開き、次のコマンドを入力して、Windows に接続されているすべての USB デバイスを一覧表示します。
    usbipd wsl list
  6. WSL に接続する USB デバイスの BUSID 値をメモします。 次に、次のコマンドを実行して接続プロセスを開始します。 WSL により、sudo コマンドを実行するためのパスワードの入力を求められます。
    usbipd wsl attach --busid <busid>
    たとえば、ここでは Android デバイスの Fastboot インターフェイスをホスト Windows 11 インスタンスから WSL に接続しています。
  7. ここで、新しい WSL 2 インスタンスを開いて、 lsusb コマンドを使用して、利用可能な USB デバイスを確認します。 接続されているデバイスがリストされるはずです。
  8. それでおしまい! WSL から直接 USB デバイスを操作できるようになりました。

完了したら、以下に示すコマンドを使用してデバイスを切断できます。 もう一度、管理者として実行しているターミナル インスタンスから実行します。

usbipd wsl detach --busid <busid>

GUI の代替手段はありますか?

コマンドラインインターフェースが苦手な場合は、次のようにすることができます。 wsl-usb-gui 試してみてください。 これは、usbipd-win バイナリの非公式 GUI ラッパーで、USB デバイスのリストとホスト OS と WSL インスタンス間の相互運用性を大幅に簡素化します。

  1. 最新バージョンの usbipd-win がインストールされており、WSL カーネルが最新であることを確認してください。
  2. wsl-usb-gui の最新のインストーラーをダウンロードします。 プロジェクトの GitLab リリース ページより.
  3. ダウンロードした MSI ファイルを実行します。
    • プログラムをインストールする前に、インストーラーは前提条件もチェックし、必要に応じてセットアップを試みます。 ただし、予期しない互換性の問題を避けるために、すべてを自分で更新し続けることをお勧めします。
  4. インストールが成功すると、新しく作成された次の名前のショートカットが見つかるはずです。 WSL USB スタートメニュー内。 そこからアプリを実行します。
  5. クリックしてください リフレッシュ ボタンをクリックして、ホスト OS に接続されている USB デバイスのリストを入力します。
  6. 使用 添付する そして 切り離す ボタンを使用して、USB パススルーの可能性を最大限に引き出します。

ここからは、WSL で必要なすべての USB デバイスを操作する準備が整います。 私たちの完全なガイドが途中で役立ちますが、USB パススルーが好みに設定されると、それはバックグラウンドに消えていくだけです。 さらに詳しく知りたい場合は、以下をご覧ください。 WSL での USB デバイスの接続に関する Microsoft の公式ドキュメント そして usbipd-win の GitHub Wiki セクション.

XDA シニアメンバーに感謝 Some_Random_Username ヒントのために!