Alpine / Ubuntu / Arch / Kali を選んで動かせます。約 20 個の z2-* コマンドで 通知・クリップボード・センサー・ライトなど Android 側の機能をシェルから呼べて、z2-when に登録すれば 充電や時刻や Wi-Fi の変化でスクリプトが起動します。Linux のデスクトップと、 VNC / RDP で繋いだ他のマシンのデスクトップは、シェルと同じタブの列に開きます。
APK 1 つ · PC 不要 · Google Play では配布していません
~ $ z2help
以下はすべて APK 1 つに入っています。コンパニオンアプリやセットアップスクリプトは要りません。
APK を入れれば apk / apt / pacman が使えます。実行エンジン
z2root は本アプリ用に書いた ptrace ベースのユーザー空間実装で、root もカーネルモジュールも
要りません。Alpine / Ubuntu / Arch / Kali を設定から選び、あとから変えられます。
Android 側を扱うコマンドが約 20 個あります。通知、トースト、クリップボード、センサー、ライト、音量、
Intent、アラーム、読み上げ、画面消灯の抑止、共有、そして自端末への無線 adb。
どれもふつうのコマンドなので、シェルから呼べるものなら何からでも使えます。
name=$(z2-ask "ブランチ名は?") と書くと、通知の返信欄に質問が出て、打ち込まれた答えが
シェル変数に入ります。アプリを開かずに答えられて、答えないまま閉じれば非ゼロ終了になります。
充電、電池残量、時刻と cron、Wi-Fi、回線の切り替わり、端末の起動、他アプリからの共有、受信 SMS、
センサー、届いた通知、フォルダへのファイル追加。これらをきっかけにスクリプトを起動します。ルールは
~/.z2term/when/ のテキストで、アプリを閉じていても端末を再起動しても残ります。
Xvnc と openbox を、アプリ内蔵の RFB クライアントで表示します。音声と動画も通ります。
z2gui でデスクトップ、z2run <app> で GUI アプリ 1 本とそのタブが
開きます。
同じビューアがリモートにも繋がります。RFB 3.3〜3.8、認証は None と VNC パスワード。RDP は NLA 認証、初回の証明書確認、マウスとキーボード、音、テキストのクリップボード共有まで扱います。 保存した宛先に [VNC] と [RDP] のボタンが付きます。
SSH / SFTP、FTP、WebDAV、SMB2/3 のクライアント。既定ではいずれも一時的な SSH ポート転送を通るので、
資格情報が平文で流れません。鍵は Android Keystore が保持する ed25519 で、-L /
-R の転送はタブを閉じても走り続けます。
起動コマンドを 設定 → 常駐サーバーに登録すると、アプリを開かなくても裏で動き続け、 端末の再起動後に復帰します。小さな Web サーバーや同期デーモンをスマホに置いておけます。
マクロをクイック設定のタイル(12 枠)とホーム画面のウィジェットに割り当てられます。ステータスバーの
アイコンは 24×24 のドット絵に差し替えられます。もう 1 つのウィジェットは ~ 配下の
ファイルの末尾を出し続けます。
z2-usb list で機器を確かめ、z2-usb allow で Android の許可を取ると、
libusb や /dev/bus/usb/… を使うプログラムが手を入れずにその機器を開けます。
要るのはデータの通る OTG アダプタかハブだけです。
版数、エンジン、空き容量、必要な権限、検知と自動化の状態を 1 コマンドで出します。NG の
行には対処が付き、最後に Issue へ貼れる短い報告が出ます。
~ $ ls ~/.z2term/macros/
マクロは ~/.z2term/macros/ に置いたシェルスクリプトです。覚える専用言語は
ありません。z2-when に登録すれば、アプリを閉じたままそれが走ります。
z2-when charge:start run ~/.z2term/macros/backup.sh
寝ているあいだに終わります。アプリは開きません。
z2-when notify:otp run ~/.z2term/macros/otp.sh
コードが抜き出され、クリップボードに入ります。
z2-ask "本番に出す?"
スクリプトが通知シェードで待ちます。答えなければ止まります。
z2-when net:online if=ssid=Home cooldown=1h run ~/.z2term/macros/sync.sh
絞り込みの書き方はどのきっかけでも同じです。見送った回もログに残ります。
z2-when share:ext=pdf run ~/.z2term/macros/pdf.sh
共有シートで Z2Term を選ぶと、スクリプトがその PDF を処理します。
z2-tile set 1 vpn.sh -l VPN
クイック設定からワンタップ。アプリは開きません。12 枠あります。
z2-icon set 1 ~/pixel/rocket.txt
ステータスバーのアイコンを 24×24 のドット絵に差し替えられます。
z2-say "ビルド終わった"
画面が消えていても、シェルスクリプトから読み上げます。
z2-when file:new=/sdcard/Download run ~/.z2term/macros/sort.sh
入ってきたファイルを、改名・変換・転送します。
ウィジェット → マクロを選ぶ
ワンタップで裏で実行。走っているものはもう一度タップで停止。
z2-server start web
アプリを閉じても端末を再起動しても動き続ける Web サーバー。
z2-session attach 2
別のタブに文字を打ち込むマクロ。ターミナルそのものの自動化です。
~ $ z2run xterm
GUI タブは別のビューアアプリではありません。アプリの中の RFB クライアントなので、 Linux のデスクトップも、リモートのマシンも、シェルと同じタブの列に並びます。
z2gui でデスクトップが立ち上がり、z2run <app> は GUI アプリを起動して
タブを開きます。音声と動画も通ります。
RFB 3.3 – 3.8、認証は None と VNC パスワード。宛先を保存すると、その横に [VNC] ボタンが付きます。
NLA(ネットワークレベル認証)、初回の証明書確認、マウスとキーボード、音、テキストの クリップボード共有。保存した宛先に [RDP] ボタンが付きます。
リモートデスクトップも FTP・SMB・WebDAV と同じく、既定では一時的な SSH ポート転送を通ります。 直結にもできますが、そのときは暗号化が無くなると警告してからになります。
~ $ z2-img screenshots/*.png
実機で撮ったものです。
~ $ less HANDBOOK.md
sshd。鍵はアプリ内で作る
ed25519 で、秘密は Android Keystore が暗号化します。known_hosts の確認あり。ポート転送は
タブを閉じても残ります。z2-* のヘルプや使い方、
端末に出るメッセージまで切り替わります。z2scan self は外部ツールなしでこの端末を点検します(結果は端末内に留まります)。~/z2term-log/ のテキストに書かれます。
もう一度押すと停止。既定では色と制御コードを落として素のテキストにします。~ $ ls -lh releases/latest/
APK は 1 つだけです。OS も外部の prebuilt も同梱していないので、初回起動で 設定 › Linux 環境からディストロを選びます。選んだものが公式 CDN から取得され、SHA-256 で 検証されます。取得は 1 回きりで、アプリを更新しても落とし直しません。
設定 → アプリ情報 → 更新を確認。ボタンを押したときだけ GitHub に問い合わせ、
新しい APK を落としてインストール画面まで進みます。最後のタップはご自身の操作です
(どのアプリも自分を黙って入れ替えることはできません)。端末からは z2-update。
Obtainium に
github.com/orgsonai/z2term を登録すると、新しいリリースが出たときにワンタップで
更新できます。ストアは要りません。
Releases から新しいファイルを落としてタップするだけです。上書きインストールになり、 データはそのまま残ります。
0.9.x は安定版 1.0 の候補です。1.0 までは不具合の修正だけを出し、仕様と画面は 変えない予定です。