Windows Subsystem for Linux(WSL)でUSBデバイスを使う
ASCII.jp / 2024年1月7日 10時0分
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](https://ascii.jp/img/2024/01/04/3664727/x/0af67412a5564ec8.png)
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などを調べることだ。
![WSL](https://ascii.jp/img/2024/01/04/3664725/x/9abdfe68584e6276.png)
対象のデバイスの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デバイスへの対応が柔軟になる可能性がある。
この記事に関連するニュース
-
Windows Subsystem for Linuxガイド 第38回 WSL2でDockerを使う その4「ネットワーク接続Dockerエンジン編」
マイナビニュース / 2024年7月2日 13時42分
-
Windowsはなぜ再起動が必要になるのか?
ASCII.jp / 2024年6月30日 10時0分
-
Windows Subsystem for Linuxガイド 第37回 WSL2でDockerを使う その3「ネットワーク接続Dockerデスクトップ編」
マイナビニュース / 2024年6月25日 16時17分
-
Windows Subsystem for Linuxガイド 第36回 WSL2でDockerを使う その2「Dockerエンジン編」
マイナビニュース / 2024年6月10日 17時57分
-
今後のWSL2はGUI管理が可能に - 阿久津良和のWindows Weekly Report
マイナビニュース / 2024年6月9日 16時0分
ランキング
-
1Google検索も不要に? 検索AI「Perplexity」がスゴすぎてちょっと怖い
ITmedia NEWS / 2024年7月5日 19時16分
-
2プリングルズ価格改定 ショート缶は容量そのままサイズ変更して空間率減少へ
ねとらぼ / 2024年7月5日 16時20分
-
3ドコモ、au、ソフトバンク、楽天モバイルの端末セールまとめ【7月5日最新版】 新スマホ「AQUOS R9」「Xperia 1 VI」をお得に入手しよう
ITmedia Mobile / 2024年7月5日 10時5分
-
4渋谷にAnker Store旗艦店8月1日開店、直営店初の2フロア。キャンペーンも
マイナビニュース / 2024年7月5日 16時40分
-
5楽天ペイと楽天ポイントのキャンペーンまとめ【7月4日最新版】 楽天ペイアプリでポイント最大10倍もらえる
ITmedia Mobile / 2024年7月4日 10時5分
記事ミッション中・・・
記事にリアクションする
![](/pc/img/mission/mission_close_icon.png)
記事ミッション中・・・
記事にリアクションする
![](/pc/img/mission/point-loading.png)
エラーが発生しました
ページを再読み込みして
ください
![](/pc/img/mission/mission_close_icon.png)