Android 12端末でUSBテザリングをOnにするのが面倒なので手軽な方法がないか探してみました.
タグ: Android
実はQZSSに対応していたAndroidスマートフォン(Rakuten mini, Moto g31)
CAMALIOTを試しているときに気づいたのですが,QZSSの項目があります.スペック表には載っていなかったと思うのですが拾えているようです?
AndroidのGNSS衛星情報を提供して天気予報の精度向上に協力するCAMALIOT
Android端末でGNSSデータを受信してそれをアップロードすることでそのデータを元に天気予報の制度を良くしようといったプロジェクトを見かけました.ESAの資金提供でのプロジェクトなので日本では動かないかなと思いながら試すと動作するようです.
sndcpyでAndroidのサウンドをUSB経由でPCに転送
AndroidのオーディオをPCに転送して視聴ということをよくやるのですが,昔は3.5mmオーディオミニジャックで最近はBluetooth A2DP sourceで転送しています.
今回USBで転送できる sndcpy を試してみました.
snap版scrcpyでAndroidデバイス画面をビデオデバイスに出力
Androidアプリの画面をsnap版のscrcpyでビデオデバイスに流し込もうとしたら少しハマったのでメモしておきます.
scrcpyを使ってAndroidスマートフォンの動画をPCで視聴する
今日最終回でしたが,マンガUp!というアプリで他のsiteより12時間早く配信されているのに気づきました.でもモバイルアプリでないと視聴できません.手元ではスマートフォンしか無いので画面が小さい.
そういえば以前試したscrcpyだと画面キャプチャ禁止のアプリでも大丈夫だったのでこれでPCに画面転送してそちらで視聴すればいつもの画面で視聴できるのではと試してみました.
Note |
音声についてはscrcpyのaudioブランチを自分でbuildして --forward-audio オプションを利用することで転送できそう ですが私は未確認で現在はBluetooth A2DP-source でPCに転送しています.3.5mm Audio cableなどでも良さそうです. |
povo 2.0のSIMがmotorola moto g31で通信できない
先日,goo Simseller のOCNモバイルoneへのMVNOで1円で入手したmotorola moto g31ですが,povo 2.0のSIMをさして設定しても通信が出来ません.
ステータスはこんな感じで x マークが付いています.
PCでAndroid端末の画面転送と操作が出来るscrcpy
Debian sid amd64環境ではパッケージがあるので簡単です,armhf/amd64/i386環境ではsnap版が存在します.その他幾つかのLinuxディストリビューションではパッケージがあったり,WindowsやmacOSでも動作するようです.
手元ではDebian sid amd64で動作しました.(Raspberry Pi OS armhfにsnap版を入れた環境ではエラーが発生.内容は未だ未確認)
Debian sid amd64環境だと以下のような感じで導入できました.このときAndroid端末は「開発者向けオプション」が有効になっていて,「USBデバッグ」が有効になっている状態でUSB接続されている必要があります.
$ sudo apt install adb scrcpy (1)
$ lsusb (2)
:
Bus 002 Device 013: ID 05c6:9024 Qualcomm, Inc. SDM439-MTP _SN:472BF8D8
:
$ echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="05c6" ATTR{idProduct}=="9024", MODE="0660", GROUP="plugdev", SYMLINK+="android%n"' \
| sudo tee -a /etc/udev/rules.d/51-android.rules (3)
$ sudo udevadm control --reload (4)
$ adb devices (5)
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
976d6a56 device- 必要パッケージの導入
- AndroidのVID/PIDを確認(ここでは
05c6:9024) - adbコマンドが利用できるようにAndroid端末をudev roureに登録
- udev ruleを反映する
- adbコマンドで認識出来るのを確認
この状態で,scrcpy を実行することでAndroidの画面転送が出来ました.普通に操作も出来ます.
スリープ状態のときは画面が真っ黒ですが,マウス右クリックで解除されます.
$ scrcpy INFO: scrcpy 1.14 <https://github.com/Genymobile/scrcpy> /usr/share/scrcpy/s...93 bytes in 0.008s) [server] INFO: Device: TINNO C330 (Android 9) INFO: OpenGL shaders: ENABLED INFO: Created renderer: opengl INFO: Renderer: opengl INFO: OpenGL version: 3.0 Mesa 20.2.4 INFO: Trilinear filtering enabled INFO: Initial texture: 720x1280
導入も簡単だしこれは便利.しかしメイン端末ではPCにUSB接続するとすぐに充電しなくなってしまうので長時間は使えません.
adb のワイヤレス接続の設定をすると別の端末や充電器で充電しながら利用できそうなので試してみました.
対象のAndroid端末をPCにUSB接続した状態で tcpip コマンドでリモート接続できるようにします.
$ adb tcpip 5555 restarting in TCP mode port: 5555
この状態でPCからAndroid端末を取り外し,Wi-Fi接続のIPアドレスを確認します.
PCでadbコマンドでAndroid端末に接続します.
$ adb connect <ANDROID_IP>>:5555
この状態で scrcpy コマンドを実行すると画面が表示され操作できます.充電器などに接続した状態でも利用できます :)
scrcpy には幾つかオプションがあります.便利そうなものとしては最大解像度を指定する -m, --max-size value で解像度を下げて表示できます,
-n, --no-control で表示だけで操作できなくします.
-r, --record file で画面を録画します.
-w, --stay-awake でscrcpyを実行中Android画面をロック,消灯しません.
-S, --turn-screen-off Android端末のスクリーンを消したまま操作できます.
ショートカットでは
Ctrl + h, マウス中キー でホームボタン,
Ctrl + r でAndroid画面回転,
Ctrl + s でアプリケーション切り替え,
辺りが便利そうです,
Ctrl + c でクリップボードのコピーなのですが,一旦Android側でコピーした後に Ctrl + c でPCへのクリップボードコピーのようです,Ctrl + v の貼り付けもAndroid感での貼り付けで,PCからAndroidのクリップボード貼り付けは Ctrl + Shift + v でした.
詳細は scrcpy --help を参照してください.
これでElectronアプリでPCで動かしているアプリをスマホで……とも思ったのですが日本語入力などはちょっと面倒.もう少し様子見しようと思います.
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.
なんだか気になる更新内容です.
早速試してみます.
$ 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では利用できているのに!)
$ 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