Androidホーム画面からシェルスクリプトを自然に実行する方法

Androidには、フルパッケージのターミナル環境 Termuxがあり、ひと通りのシェルスクリプトを実行できます。
ただし、ターミナルはキーボード無しで使うには向いていません。Termuxのプラグインを利用すると、ホーム画面からスクリプトを呼び出すことが可能です。

以下の2つの方法が提供されています。

  • Termux:Widget をインストールして、ホーム画面にウィジェットを設置
  • Tasker を購入して、 Termux:Taskerをインストール。ホーム画面にTaskerのウィジェットを設置

ただ単に実行するだけであれば、Termux:Widgetで足ります。 Taskerを利用すると、ウィジェットからの手動実行のほか、コンテキストに応じた自動実行やアイコン指定が可能です。Tasker以外にもMacroDroidなどTaskerプラグインに対応したアプリからも利用できます。

Termux利用開始時に理解しておくべきポイント

TermuxはGoogle Playのほか、 F-Droid(Android向けFOSSリポジトリ)で配布されており、プライマリはF-Droidです。Google Play版はほぼ更新なしです。

後述のTermux:APIなどのプラグインはGoogle Play版は有料ですが、F-Droidは無料配布(寄付歓迎)です。
TermuxはGoogle Play版とF-Droid版を混ぜて利用できないため、あらかじめ選択が必要です。

各マーケットが保護しているものは異なるので、F-Droidを使うのか否か、判断したうえで利用開始すべきでしょう。

すでにGoogle PlayのTermuxを利用している場合、いちどプラグインを含め全てのTermuxをアンインストールするとF-Droid版をインストールできます。

なお、環境により termux-setup-storageがハングアップする場合がありますが、pkg install termux-amで直ります。

権限追加

プラグイン実行には追加権限が必要です。

  • Widgetを利用するにはTermux本体に「他のアプリに重ねて表示」の権限が必要です
  • Termux:Taskerを利用するには、Taskerに「Run commands in Termux environment」の権限が必要です。TaskerからTermuxにリクエストする権限で、TaskerやMacroDroidのアプリ情報の「その他の権限」にあります。

シェルスクリプトの記述

プラグインの規約に沿って、実行対象のシェルスクリプトを最初に用意しておきます。
プラグインごとに配置パスが決まっています。

  • Termax:Widgetから呼び出すスクリプトは、Termuxホームディレクトリの.shortcutsに置く。ターミナル画面を表示したくないスクリプトは.shortcuts/tasksサブディレクトリに置く
  • Taskerから呼び出すスクリプトは、ホームディレクトリの.termux/tasker/に置く。

なお、シンボリックリンクでは動作しなかったため、スクリプトの実ファイルを所定の場所に置く必要があります。
最初はディレクトリが存在しないため手動でmkdirします。

  • スクリプトは自ら記述し、実行属性をつけておく。termux上で動作するものであれば、とくに制約なく動作すると思われる

シェルスクリプトの記述例は以下のとおりです。shebangが独特のPathである以外は、普通のbashです。

#!/data/data/com.termux/files/usr/bin/bash

echo "hello"

shebangのパスが誤っている場合、No such file or directoryといった分かりづらいエラーになるため、注意が必要です。

ホーム画面に追加(Termux:Widget)

操作はホームアプリによりますが、ホームからTermuxウィジェットを追加すると、スクリプトを選択する操作になります。
スクリプトごとにアイコンができるため、タップするとスクリプトを実行できます。

アイコンはTermuxと同じですが、ホームアプリの機能で変更可能でしょう。

Taskerに登録(Termux:Tasker)

Termuxスクリプトのタスク登録は、Taskerを起動して適切に選択していくだけで完了します。

  • タスク内のアクションを新規作成する際、「プラグイン」で「Termux:Tasker」が選択可能になっており、スクリプトを指定できる。
  • オプションは、実行時のターミナル表示/非表示の選択。ターミナル表示は動作確認に利用できる

タスクを作成できたら、ウィジェットを作成します。ウィジェット作成前にTaskerを完全に終了しておく必要があり、Taskerの画面で「戻る」操作を繰り返して停止させます。

  • ホーム画面長押しなどでウィジェット追加する。リストからTaskerを選択
  • タスクリストから対象のタスクを選択。画面下のボタンからアイコンも変更可能
  • 確定の方法が非常に分かりづらいが、「戻る」操作を繰り返すことでウィジェット作成を完了できる

これにより、ホーム画面上にアイコンを設置でき、アプリ起動と同様、タップするとスクリプト実行できます。
たとえばcurlのスクリプトを記述することで、CIのwebhookなどAPIコールするボタンを作ることも可能です。

また、Termux:APIを追加導入するとクリップボードなどのデバイス操作も可能になるため、クラウドサービスを活用したスクリプトも可能ではないかと思います(未確認)。

中馬崇尋
Chuma Takahiro