💻
LimaでUSBパススルーを使う
はじめに
LimaはMacでWSLのようなLinux環境を構築するのに便利です。
単なるファイルのやり取りであればディレクトリ共有で十分ですが、ADBなどUSBデバイスと直接通信しなければならない場合にUSBパススルーが必要です。
2023年10月24日現在、Limaは公式にUSBパススルーをサポートしていません。
Limaは内部でQEMUのVMを動かしているので、QEMUの機能を直接利用してUSBパススルーを使用します。
本記事ではVMにAndroid端末をADB接続することをゴールとします。
環境
- ホストマシン: MacBook Pro M1 Pro
- ホストOS: macOS Sonoma 14.0
- Lima: limactl version 0.18.0
- ゲストOS: Ubuntu 22.04 LTS
方法
1. USBデバイスのベンダIDとプロダクトIDを確認する
下記コマンドでUSBパススルーしたいデバイスのベンダIDとプロダクトIDを取得します。
system_profiler SPUSBDataType
例えば、ファイル転送モードで接続したGoogle Pixel 3の場合はベンダIDが0x18d1、プロダクトIDが0x4ee2です。
USBの接続方式(PTPや充電など)を変更すると、プロダクトIDが変わるので注意してください。
また、充電モードだとVMがAndroid端末を検知しないので気をつけてください。
otsuka@MacBook-Pro ~ % system_profiler SPUSBDataType
USB:
USB 3.1 Bus:
Host Controller Driver: AppleT6000USBXHCI
USB 3.1 Bus:
Host Controller Driver: AppleT6000USBXHCI
USB 3.1 Bus:
Host Controller Driver: AppleT6000USBXHCI
Pixel 3:
Product ID: 0x4ee2
Vendor ID: 0x18d1 (Google Inc.)
Version: 4.40
Serial Number: 8CDX1MSU5
Speed: Up to 480 Mb/s
Manufacturer: Google
Location ID: 0x01100000 / 1
Current Available (mA): 500
Current Required (mA): 500
Extra Operating Current (mA): 0
2. QEMUの環境変数を設定する
VMが動作するアーキテクチャによって設定する環境変数が異なります。
x86-64
export QEMU_SYSTEM_X86_64="qemu-system-x86_64 -device qemu-xhci -device usb-host,vendorid=<ベンダID>,productid=<プロダクトID>"
例:
export QEMU_SYSTEM_X86_64="qemu-system-x86_64 -device qemu-xhci -device usb-host,vendorid=0x18d1,productid=0x4ee2"
aarch64
export QEMU_SYSTEM_AARCH64="qemu-system-aarch64 -device qemu-xhci -device usb-host,vendorid=<ベンダID>,productid=<プロダクトID>"
例:
export QEMU_SYSTEM_X86_64="qemu-system-aarch64 -device qemu-xhci -device usb-host,vendorid=0x18d1,productid=0x4ee2"
3. VMを起動する
limactl start ubuntu-lts-x86_64
4. udevルールを追加する
/etc/udev/rules.d/51-android.rules
に下記内容を記載します。
ファイルがない場合は作成します。
SUBSYSTEM=="usb", ATTR{idVendor}=="<ベンダID>", MODE="0666", GROUP="plugdev"
例:
/etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
ベンダIDに「0x」を付けないように気をつけてください。
5. ADB接続する
otsuka@lima-ubuntu-lts-x8664:/Users/otsuka/lima$ adb devices
List of devices attached
8CDX1MSU5 device
otsuka@lima-ubuntu-lts-x8664:/Users/otsuka/lima$ adb shell pm list packages
package:com.google.android.networkstack.tethering
package:com.amazon.mShop.android.shopping
package:com.google.omadm.trigger
package:com.google.android.carriersetup
package:com.android.cts.priv.ctsshim
...
Discussion