Open4

termuxを準備するメモ

okuokuokuoku

termuxはAndroidのLinux環境で動作するコマンドラインツール類を集めたもので、LinuxコマンドがAndroidで使える環境としては多分一番人気がある。

インストールはF-Droidから

なぜか未だにGoogle Play上にも置いてあるが、 termuxは Android9以前の自分自身でパッケージの内容を改変できるという性質依存していて 既にGoogle Playでは Android9 のパッケージをサブミッションできない ので更新を配布できない。

https://f-droid.org/en/packages/com.termux/

ただf-droidはサーバが遅いのと、現時点では Termux:GUI (AndroidのGUIパーツを利用するためのzenityみたいな汎用アプリ) はF-Droid版は正常に動作しないという問題がある。

okuokuokuoku

SSHd起動用のリンクをホーム画面に置く

Termux:Widget https://f-droid.org/en/packages/com.termux.widget/ がホーム画面用のショートカット用アプリになっている。

とりあえず適当にファイル .shortcuts/sshd.sh を用意すると:

.shortcuts/sshd.sh
#!/bin/sh
sshd

ウィジットから、この sshd.sh を起動できる。sshdはdaemonになるので特に何も起きていないように見えるがpstree等で存在を確認できる。

~ $ pstree
?─┬─?───bash
  └─sshd───sshd───bash───pstree

... Termuxを使いこなすにはAndroidのアプリケーションライフサイクルや電力管理について知らないと厳しいもんがあるんではないかという気がする。。一度この方法でsshdを起動すると、画面をOFFにした状態でも接続できるが消費電力削減の影響は受ける。

放置により操作感が悪くなるときは通知領域からwakelockを取ると安定する...はず。Wakelockはコマンドラインからでも termux-wake-lock termux-wake-unlock コマンドで制御でき、通知領域にも反映される。

okuokuokuoku

プロセスがクラッシュしたら何が起こるのか

他のプロセスには被害は及ばないようだ。

~ $ cat crash.c
#include <stdlib.h>

int
main(int ac, char** av){
        abort();
}
~ $ gcc crash.c
~ $ ./a.out
Aborted

(Termuxのgccはclangになっている。NDKがclangだから?)

コアダンプを取るには ulimit -c unlimited

~ $ ./a.out
Aborted (core dumped)
~ $ file core
core: ELF 64-bit LSB core file, ARM aarch64, version 1 (SYSV), SVR4-style, from './a.out'
okuokuokuoku

adb をインストールする

pkg install android-toolsadb をインストールできる。実際の connect 等はワイヤレスデバッグと同じ手順となる。つまり、

  1. 設定 → システム → 開発者向けオプション → ワイヤレスデバッグ → ペア設定コードによる〜 で PINを表示させる
  2. adb pair <表示されたIPアドレスとポート> でペアリングをする
  3. adb connect <表示されたIPアドレスとポート> で接続

... USBを制御しようとしてうるさいログが出るな。。

03-22 03:58:50.351 15883 15883 I adbd    : UsbFfsConnection being destroyed
03-22 03:58:50.364 15883 15890 I adbd    : opening control endpoint /dev/usb-ffs/adb/ep0
03-22 03:58:50.366 15883 15890 I adbd    : UsbFfsConnection constructed
03-22 03:58:50.369 15883 16588 I adbd    : UsbFfs-monitor thread spawned
03-22 03:58:51.373 15883 16588 W adbd    : timed out while waiting for FUNCTIONFS_BIND, trying again

USBデバッグ を有効にするとこのログは出なくなるがあんまり健全な感じはしないな。。

adb shell を使うことで、アプリサンドボックスを抜け出すことができる。例えば、 ifconfig とか ps -Aw のようなコマンドの出力がより詳細になる。