termux-APIのTermux-usbを少し試す

Androidでdeb系ぽいLinux環境を実現できるTermuxからAndroidを操作するAPIのTermux-APIのupdateがありました．

Add a USB API compatible with libusb – see https://wiki.termux.com/wiki/Termux-usb for more information.

なんだか気になる更新内容です．

Termux-usb-Termux Wiki

早速試してみます．

まずはパッケージを最新にして関連パッケージを導入

$ pkg update
$ pkg install root-repo
$ pkg install termux-api
$ pkg install libusb
$ pkg install clang

termux-usb コマンドでデバイスを確認してアクセス許可を与える(ここではUSBメモリ)

$ termux-usb -l
[
"/dev/bus/usb/001/004"
]
$ termux-usb -r /dev/bus/usb/001/004
Access granted.

アクセスの許可はAndroidの画面で操作が必要です．

ちなみに，USB Keyboardは認識できませんでした(Androidでは利用できているのに!)

lsusb的にusb情報を表示するプログラムのサンプルをコンパイルして実行

$ cat << __EOF__ > usbtest.c
> $ cat usbtest.c
> #include <stdio.h>
> #include <assert.h>
> #include <libusb-1.0/libusb.h>
>
> int main(int argc, char **argv) {
> libusb_context *context;
> libusb_device_handle *handle;
> libusb_device *device;
> struct libusb_device_descriptor desc;
> unsigned char buffer[256];
> int fd;
> assert((argc > 1) && (sscanf(argv[1], "%d", &fd) == 1));
> assert(!libusb_init(&context));
> assert(!libusb_wrap_sys_device(context, (intptr_t) fd, &handle));
> device = libusb_get_device(handle);
> assert(!libusb_get_device_descriptor(device, &desc));
> printf("Vendor ID: %04x\n", desc.idVendor);
> printf("Product ID: %04x\n", desc.idProduct);
> assert(libusb_get_string_descriptor_ascii(handle, desc.iManufacturer, buffer, 256) >= 0);
> printf("Manufacturer: %s\n", buffer);
> assert(libusb_get_string_descriptor_ascii(handle, desc.iProduct, buffer, 256) >= 0);
> printf("Product: %s\n", buffer);
> assert(libusb_get_string_descriptor_ascii(handle, desc.iSerialNumber, buffer, 256) >= 0);
> printf("Serial No: %s\n", buffer);
> libusb_exit(context);
> }
> __EOF__
$ gcc usbtest.c -lusb-1.0 -o usbtest
$ termux-usb -e ./usbtest /dev/bus/usb/001/004
Vendor ID: 13fe
Product ID: 3600
Manufacturer:
Product: USB DISK 2.0
Serial No: 07AC10081C16381A

てことでTermuxからlibusbが使えるようになったようです．

ちなみに，lsusbを実行するとこんな感じです．rootedな端末だと使えるんでしょうけど．

$ lsusb
lsusb: /sys/bus/usb/devices: Permission denied
$ tsudo lsusb
/data/data/com.termux/files/usr/bin/tsu: 146: exec: : Permission denied

環境

$ dpkg-query -W termux-api libusb clang
clang 8.0.1-4
libusb 1.0.23-rc1-1
termux-api 0.47
$ adb shell dumpsys package com.termux.api | grep -E 'versionCode|versionName'
versionCode=38 minSdk=21 targetSdk=28
versionName=0.38
$ adb shell dumpsys package com.termux | grep -E 'versionCode|versionName'
versionCode=75 minSdk=21 targetSdk=28
versionName=0.75
$ getprop ro.bootimage.build.fingerprint
essential/mata/mata:10/QP1A.190711.122/420:user/release-keys
$ getprop ro.build.version.security_patch
2019-09-05
$ getprop ro.product.cpu.abilist
arm64-v8a,armeabi-v7a,armeabi

関連

Android端末にTermux + Dropbearでssh login – matoken’s meme

Android端末をshellで操作できるTermux:APIで遊んでみた – matoken’s meme