WSLへのUSBデバイス接続に関しては、機能が搭載された2021年の記事(「増えたWindows Subsystem for Linuxのバージョン、またUSBデバイスの接続が可能に」)でも紹介したが、Win32側で動作させるusbipd-winとWSLの両方がアップデートされて、状況が変わってきた。
本記事ではusbipd-winを使ったUSBデバイスのWSLへの接続を解説する。利用できるUSBデバイスに関しては、WSLカーネルに組み込まれたデバイスドライバに依存する。標準状態で利用できるのはUSBシリアルなど限定されたものになる。ただし、カーネルを再コンパイルして、デバイスドライバを組み込むことで、利用可能になるもの(たとえば、USB大容量ストレージデバイスなど)もある。
現在、WSL用カーネルのプレビューでは、外部デバイスドライバを含むカーネルモジュール(mod)への対応が進んでいる。WSLがカーネルモジュールに対応すれば、デバイスドライバを組み込むのに再コンパイルをする必要がなくなる可能性がある。
そもそもusbipd-winとは?
usbipd-winとは、TCP/IPネットワーク経由でUSBデバイスを接続させる「USB/IP Project」プロジェクト(https://usbip.sourceforge.net/)をベースとして、WSL側にUSBデバイスを接続するためのソフトウェア(および開発プロジェクト)である。
USB/IPは、USBデバイスが接続されているサーバー側でusbipdを動かし、USBデバイスを利用する側でクライアントプログラムを動かす。通常のUSB/IPは公式サイト経由で入手が可能だ。これに対してusbipd-winは、WSLとWin32側のデバイス接続のために作られたもの。Win32側で動かすことで、USBデバイスをWSL側に接続できる。ただし、WSL側に接続している間は、Win32側では該当のUSBデバイスにはアクセスできない。
昨年12月にVer.4.0.0が公開され、設定やコマンド体系などが一新された。以前とはコマンドも大きく変わっているほか、設定方法などにも変更がある。特にWSL側は、手作業による設定が不要となり、準備は大幅に簡略化されている。
まずはWSLとLinuxを最新版にする
usbipd-winを使うには、最新のWSLにアップデートしておく必要がある。現在WSLは、Microsoftストア経由でアップデートされるので、すでに最新になっているとは思われるが、確認方法とアップデート方法などを説明しておく。
PowerShellなどで以下のコマンドを実行する。
wsl.exe --update
wsl.exe --version
2行目のコマンドでWSLのバージョンが表示される。安定版の最新はVer.2.0.14.0、プレビュー版はVer.2.0.15.0だ。
次にusbipd-winをインストールする。GitHubのプロジェクトページ(https://github.com/dorssel/usbipd-win/releases)からmsiファイルをダウンロードして手動インストールしてもいいし、以下のコマンドでインストールしてもいい。
winget install usbipd-win
次にディストリビューションを最新状態にしておく。というのも、USB/IP側のモジュールはすでに組み込まれた状態なので、これを最新版にしておく必要があるからだ。WSLディストリビューション(ここではUbuntuを仮定)を起動して、以下のコマンドにより更新する。
sudo apt update
sudo apt upgrade -y
usbipd-winの使い方
以下の表は、usbipd-winのWSL用のサブコマンドとオプションである。
usbipd-winでは、usbipd.exeを使って、
usbipd.exe␣サブコマンド␣[オプション]
という形式で使う。もちろん、「usbipd.exe --help」でサブコマンド全般のオンラインヘルプを表示できる。
基本的な手順としては、
1. 接続可能てUSBデバイスを調べる(listサブコマンド)
2. USBデバイスを共有可能状態にする(bindサブコマンド)
3. USBデバイスをWSL側に接続する(attachサブコマンド)
4. (WSL側で利用)
5. USBデバイスをWSLから切断する(detachサブコマンド)
6. USBデバイスの共有を解除(unbindサブコマンド。オプション)
となる。
最初に必要なのは、
usbipd list
で、USBデバイスとそのBUSIDなどを調べることだ。
対象のデバイスのBUSIDが判明すれば、bindサブコマンドでこれを共有可能な状態にする。ただし、このコマンドには管理者権限が必要なので、コンソールを管理者として起動するか、PowerShellのStart-Processを使い
Start-Process usbipd.exe "bind --busid <BUSID>" -Verb runas
とする。なお、<BUSID>は、listサブコマンドで調べたUSBデバイスのバスIDである。
この時点では、まだ、バスIDで指定したUSBデバイスはWin32側からアクセスが可能である。実際にWSL側に接続を行うには、WSLを起動したのち、
usbipd.exe attach --wsl --busid <BUSID>
とする。Linux側で接続しているUSBデバイスを調べるには、lsusbコマンドが利用できる。
なお、このattachサブコマンドに自動接続オプション(--auto)を付けると、自動再接続を試みる。たとえば、対象のUSBデバイスを外して、すぐに装着したような場合、自動的にattachサブコマンドが実行される。
WSLから切断するには、
usbipd.exe detach --busid <BUSID>
とする。
この状態では、Win32側でUSBデバイスにアクセス可能なので、必ずしもunbindサブコマンドを使って共有を解除する必要はない。また、1回共有を設定すると、Windowsを再起動しても共有されたままである。
WSL1は、同じWindowsカーネルを使っていたためUSBデバイスにアクセスできたが、WSL2では、usbipd-winでUSBデバイスを扱うようになった。冒頭にも記したようににプレビュー中のWSL用Linuxカーネルでは、カーネルモジュールへの対応が進んでおり、USBデバイスへの対応が柔軟になる可能性がある。
この連載の記事
-
第429回
PC
indows Updateの「利用可能になったらすぐに最新の更新プログラムを入手する」はオンにした方がいいか? -
第428回
PC
Google/Bingで使える検索オプション -
第427回
PC
WindowsのPowerShellのプロファイルを設定する -
第426回
PC
WindowsでAndroidスマホをWebカメラにする機能を試した -
第425回
PC
無料で使えるExcelにWord、Microsoft 365のウェブ版を調べた -
第424回
PC
Windowsの基本機能であるクリップボードについてあらためて整理 -
第423回
PC
PowerShellの今を見る 2つあるPowerShellはどっち使えばいい? -
第422回
PC
Windows 11の目玉機能が早くも終了、Windows Subsystem for Android(WSA)を振り返る -
第421回
PC
進化しているPowerToys LANで接続したマシンでキーボード/マウス共有機能などが追加 -
第420回
PC
Windowsプレビュー版に搭載されたsudoを試す -
第419回
PC
Windows Insider Previewが変わって、今秋登場のWindows 11 Ver.24H2の新機能が見えてきた? - この連載の一覧へ