google-home-notifierもGoogle Nestも使わずにAndroidだけでTermuxを使ってアラーム指定日時に自由に喋らせる
Androidスマホ/タブレットにTermuxというLinuxアプリをインストールして、アラーム指定日時に自由に喋らせる方法について書きます
(※)説明が長くて難しそうに見えるかもしれませんが、Androidのアプリをインストールして実行してるだけなので非常に簡単です(一部Linuxコマンドの実行がありますが、それも簡単です)
(※)バックグラウンド常駐動作なので、スマホをスリープにしていても、スマホで他の操作をしていても動きます
一般のスマホ・タブレット系の音声例
(例)Redmi Note 9S
Amazon Fireタブレット系の音声例
(例)Fire HD 10 (2019)
各部屋のGoogle Home(Google Nest)に喋らせたい場合はこの記事を読んでから次の記事もお読みください
(次の記事)この記事を読んだ後にお読みください
動作確認済み機種一覧
(※)Fireタブレットを含め「シンプルなAndroid」では問題が出ませんが、中華製スマホなど省電力機能に力を入れている機種は設定を変えないとバックグラウンドで動作しないなどありました
OPPOの機種などは「USB電源常時接続してないとバックグラウンド動作しない」などもありました
■Fire HD 10 (第9世代 2019年モデル)
動作確認済み(問題なし)
■Fire HD8 (第10世代 2020年モデル)
動作確認済み(問題なし)
■Xiaomi Redmi Note 9s
動作確認済み(問題なし)
アプリ長押し>アプリ情報>バッテリーセーバー:制限なし
バッテリーとパフォーマンス>ウルトラバッテリーセーバー:OFF
など省電力設定を色々解除すれば問題なし
(と、思っていましたが、OPPO同様に充電しながらでないと動作しない事もあるかも?
Termux:APIでの音声出力が充電中でないと動いてない模様:これが解除できれば解決するかも?)
■OPPO Reno A
動作確認済み(電源接続してないとバックグラウンドで動かない?)
アプリ長押し>アプリ情報>バッテリーセーバー:制限なし
(TermuxだけでなくTermux:APIも制限なしの設定必要?)
電池>省エネオプション>スリープ待機最適化:OFF
など省電力設定を色々解除してもUSB電源接続してないとバックグラウンド動作しなかった
常時USB電源に接続していれば動作に問題なし
Termuxアプリを入れてもスマホ/タブレットはいつも通りに使えます
「TermuxというLinuxアプリをインストールする」という事について、人によっては「スマホ・タブレットが普通に使えなくなってLinux専用になるのでは?」とか「Linuxで変にいじったらAndroid自体が壊れるのでは?」という心配する事もあるかもしれませんが、その様な心配は一切不要です
Termuxはあくまで「アプリ」なのでAndroidシステム自体含めた他のアプリには影響しませんし、何か操作を間違えたらTermuxのアプリをアンインストールすれば全部消えますし、再インストールすれば最初からやり直す事もできます
Android 7.0以降のAndroidスマホ/タブレットならどれでも動きます
Android 7.0以降のAndroidスマホ/タブレットなら基本的にどれでも動く方法だと思います
(※)機種別の相性問題みたいなのはあるかもしれませんので絶対とは言えないかもしれません
(あと詳細な設定方法は機種ごとに違いがある物もあります)
ここではFire HD10(第9世代 2019年モデル)を使った例を中心に説明しますが、Androidスマホでも同じ手順で確認済みです
(2023年現在では購入はオススメしませんが)数年前に安く購入できたAmazonのFireタブレットなどを使ってGoogle Playをインストールしていない状態でもインストール可能な方法として説明します
(Google Playは使わない方法で説明します)
F-DroidサイトからのAndroidアプリのダウンロードについて
Google Play以外からアプリをインストールする事に危険性を感じる人もいるかと思います
F-DroidというサイトはオープンソースのAndroidアプリを配布しているサイトになります
下記リンクの説明を読むなどしてF-Droidの安全性について確認してみてください
(その上で自己責任でインストールしてください)
尚、F-Droid経由でのインストールではF-DroidのアプリをインストールしておいてF-DroidアプリをGoogle Playの様に使ってインストールする方法もあるのですが、ここでは各アプリのダウンロードページから直接ダウンロードする形で説明します
Termuxのインストール
TermuxのアプリをF-Droidサイトからダウンロードしてインストールします
一番新しいバージョンの「APKをダウンロード」リンクをクリックしてダウンロードし、インストールしてください
(途中で)ダウンロードの警告画面が表示されたら許可してください
「1件のダウンロードが完了しました」のポップアップが表示されるのを待って「開く」ボタンを押します
(※)数分待たないとポップアップが表示されない場合、ポップアップが途中で消えるけどダウンロード完了時に再び表示される場合などがあります。消えてしまったらブラウザの右上の:メニューから「ダウンロード」を選択してダウンロード一覧からタップしてください
(アプリのインストール前に)不明なアプリのインストールの警告画面が表示されたら、画面の指示に従ってアプリのインストール設定を許可してからインストールしてください
(※)繰り返しになりますがF-Droidサイトでダウンロードしたアプリの安全性は問題ないと思います
Termux:APIのインストール
上記と同じ手順でTermux:APIをインストールしてください
(※)最新版の「APKをダウンロード」というリンクからダウンロードしてください
(ダウンロード&インストールの手順は上記と一緒です)
Hacker’s Keyboardのインストール
Hacker’s Keyboardについてはインストールしなくても問題無いですが、
Linuxのターミナル画面でスマホのソフトウェアキーボードから入力する場合は
インストールしておくと便利なキーボードになります
(最初は入れないでおいて、後でインストールしても構いません)
(WindowsからSSH接続して使う人には必要無いキーボードですが、スマホだけで全て実行する場合にはCtrl+Kなどのキーボード操作ができるので便利になります)
(※)最新版の「APKをダウンロード」というリンクからダウンロードしてください
「サードパーティのキーボード」グループの「Hacker’s Keyboard」のスイッチをオンにします
注意画面が表示されますが、「OK」ボタンを押します
(外部のキーボードアプリのインストールの際には表示される画面です)
この画面で「OK」ボタンを押して、Androidスマホ/タブレットを再起動してください
追加音声のインストール (※)Amazon Fire HDタブレットのみ必要です
追加音声の設定はAmazon Fire HDタブレットのみ必要です
(一般のスマホ・タブレットをお使いの方はこの項目は読み飛ばしてください)
6.「日本語(日本)」をタップしてダウンロードします
(※)ダウンロードには4~5分以上かかります
(※)「ダウンロード中」が「インストールみ」になるまでお待ちください
8.「デフォルト音声」が「日本語 Mizuki(JPN)」になってたら設定完了です
Termuxの起動
2.Termuxが起動したら画面右下のキーボードアイコンをクリックして(もしくはスペースキーを長押しして)Hacker’s Keyboardに変更すると作業しやすくなると思います
(これはやらなくても構いません)
(※)Hacker’s Keyboardから他のキーボードに戻す方法は画面左下の「123」キーの右隣の設定キーを長押しすればキーボード選択画面が表示されます
3.Termuxのターミナルで次の3行のコマンドを1行ずつ実行します
termux-setup-storage
pkg update
pkg upgrade
4.インストール中の確認
(※)上記3でログの中に赤いEマークのエラーが出た場合には下記の「エラーが出た場合」をお読みください
pkg updateの実行中に
「Do you want to continue? [Y/n」
と聞かれたら「Enterキー」を押します
pkg updateの途中で
~ [default=N] ?
と聞かれたら「Enter」キーを押します
5.pkg update / pkg upgrade共にエラーにならずに終了すれば成功です
pkg update/pkg upgradeでエラーが出た場合
(※)エラーが出なかった場合はこの項目は読み飛ばしてください
1.(数台で試しているのですが、この現象は「Fire HD10 2019」でのみ発生しました)
pkg update とpkg upgradeを実行した時に
赤いEマークのエラーが出てしまい先に進まなくなった場合の対処方法を書いておきます
2.エラーが出た場合は下記のコマンドを入力してリポジトリを変更します
termux-change-repo
3.「Main repository」に「*」が付いた状態で「OK」ボタンを押します
4.「Which mirror do you want to use?」画面で
「Mirrors by Grimler」を選択して「OK」ボタンを押します
6.改めて下記のコマンドを入力します
これ以降は元の説明に戻ってください
pkg update
pkg upgrade
crontabのインストール
1.下記のコマンドでcrontabをインストールします
pkg install -y cronie termux-services
2.下記のコマンドを実行します
crontab -l
3.no crontab for u0_axxx
の様に表示されればcrontabのインストールは成功しています
Termux:APIのインストール
1.下記のコマンドを実行します
pkg install termux-api
2.エラーが出なければインストールは成功です
音声読み上げのテスト
1.下記のコマンドを実行します
termux-tts-speak hello
2.数秒待って「ハロー」と読み上げれば成功です
3.termuxの画面で通常は英語しか入力できないのですが
キーボードのESCの部分を左にスワイプすると、日本語入力可能になります
(右にスワイプすると元に戻ります)
(※)スマホ上での日本語入力操作はちょっとコツがいるので、下記の説明の様に最終的にWindowsからSSH接続して使う場合はここでは無理に日本語入力しなくてもいいです
(※)Hacker’s Keyboardで操作していた場合、日本語入力する為にはキーボードの切替も必要になります
Hacker’s Keyboardの左下の「123」キーの右隣の設定キーを長押しするとキーボード選択画面が表示されます。他のキーボードでキーボード選択画面を表示したい場合はスペースキー長押しです
アラーム機能で指定日時に喋らせるようにする
1.下記のコマンドを入力してcrontabの編集画面に移動する
crontab -e
2.Linuxのcrontabの書き方で指定日時を設定して喋らせます
■フォーマット
分 時 日 月 曜日 実行させたいコマンド
(例)毎日の10時20分に喋らせる例
20 10 * * * termux-tts-speak これはテストです
(例)月曜~金曜の9:00に喋らせる例
0 9 * * 1-5 termux-tts-speak 業務開始です
(※)crontab -e
の編集中(=Linux nanoエディタでの編集中)のワンポイントとして
Ctrl + K でカーソル行を1行切り取り
Ctrl + U でコピーした1行を貼り付け
ができますので既存行をコピペして日時や喋る内容を変更してもいいかと思います
(※)nanoエディタ、そんなに使い込んでなかったのですが
「1行コピー」とか「全行コピー」、「複数行コピー」みたいな事はできないんですね・・・
思ってたよりも不便なエディタでした
3.crontab -e の編集画面を保存して終了する場合は
(Linuxのnanoエディタの使い方になるので)
Ctrl+X (ハッカーズキーボードではCTRLを押してからXを押す)
Y
Enter
の順番で押します
4.下記のコマンドでcrontab一覧が表示されれば、指定日時に喋るようになります
(※)Termuxの画面はアイコン化して、スマホの画面を消しておいても問題ありません
5.下記のコマンドを実行してください
crond
crondが既に実行中だった場合は下記の様なエラーが表示されるかもしれませんが、問題ありません
crond: can't lock /data/data/com.termux/files/usr/var/run/crond.pid, otherpid may be 29441: Try again
スマホ/タブレットのスリープでTermuxが落ちない様にする
通知バーのTermuxで「ACQUIRE WAKELOCK」の設定をしておくとスマホ・タブレットのスリープ中にTermuxが落ちない様になります
(※)中華製のスマホなど、「OS自体の省電力設定が物凄く厳しい機種」の場合は、スマホ側の省電力設定自体も変更しないと効果がないケースもあるかもしれません
バックグラウンド実行の確認画面が表示されたら「許可」を押してください
(※)「ACQUIRE WAKELOCK」状態だとバックグラウンドで常にtermuxが起動している為、バッテリー消費は多めになります
室内で充電しながらの使用ならこの設定で良いですが、持ち歩くスマホで使っていてバッテリー消費が気になる場合にはOFFに戻す事が出来ます(同じ手順で「RELEASE WAKELOCK」でOFFに戻ります)
WindowsのTeraTermからSSH接続する
Androidスマホ/タブレットだけで使いたい場合は下記の設定は不要です
crontabの設定画面などLinux画面をWindowsからSSH接続で使いたい場合の設定になります
Androidスマホ/タブレットのIPアドレスを固定にする
(※)自宅などで「IPアドレスが毎回違うのは面倒くさい」と思う人だけこの設定をしてください
この設定をしなくても、スマホのtermux側で
ifconfig
というコマンドを入力して表示されたIPアドレスにWindowsからSSH接続してもいいです
(※)下記はFire HD 10タブレットでの設定例になります。
スマホやタブレットの機種によって設定方法は微妙に違います
5.現在のIPアドレスとゲートウェイの値を確認して、
画面右上の編集ボタン(鉛筆アイコン)を押します
(例)IPアドレス 192.168.1.80
ゲートウェイ 192.168.1.1
8.IPアドレスとゲートウェイに固定値を設定します
(※)設定値が分からない場合は、メモしておいたアドレスと同じでいいです
(例)IPアドレス 192.168.1.80
ゲートウェイ 192.168.1.1
DNSはデフォルトで192.168.1.1か8.8.8.8になっているはずです
ここで設定したIPアドレス(例:192.168.1.80など)に
WindowsなどからSSH接続できるようになります
SSHの設定
1.Termuxのコマンドラインで下記を入力してOpenSSHサーバーをインストールします
Do you want to continue? [Y/n」と表示されたらEnterキーを押してください
pkg install openssh
2.下記のコマンドでSSHデーモンを起動しておきます
(※)スマホ/タブレットを再起動した際はsshdも再起動してください
sshd
SSHでログインするIDとパスワードの確認と設定
1.下記のコマンドでユーザー名を確認します
id
idコマンドの結果が例えば
uid=10198(u0_a198)・・・
と表示されている場合、カッコの中のu0_a198がSSHのログイン名になります
2.下記のコマンドでパスワードを設定します
passwd
WindowsにTeraTermをインストールする
1.WindowsでTeraTermをインストールして起動します
2.「ホスト」の項目に下記の様に入力して「OK」ボタンを押します
(SSHログイン名)@(AndroidのIPアドレス):8022
(例)u0_a198@192.168.1.80:8022
3.最初の1回だけこの画面が表示されるので「続行」ボタンを押します
6.具体的には
crontab -e
でアラームの設定などをWindowsからやると入力が楽になります
(日本語も使いやすいですし)
7.Termuxの時と同じですが、crontab -e の編集画面を終了する時は
Ctrl + X
Y
Enter
で保存して終了できます
スマホ/タブレットを再起動してもcrondやsshdが自動起動する様にする
上記の設定だけだとスマホ/タブレットを再起動した時に日時指定アラーム機能のcrondやSSH接続する為のsshdが止まってしまっています
なので、スマホ/タブレットを再起動した時は下記のコマンドで手動でcrondとsshdを起動できます
crond
sshd
毎回手動でコマンドを打ち込むのは面倒なので、再起動の際に自動的に起動する様に設定する事もできます
下記のコマンドを実行するとスマホの再起動後に自動起動する様になります
sv-enable crond
sv-enable sshd
再起動後に下記のコマンドを実行してcrondとsshdのプロセスが起動していれば成功です
ps -e
余談 (これを書いた理由)
個人的には5年以上前にGoogle HomeやAmazon Alexaを買って以来、アラーム指定日時にGoogle Homeで各部屋で色々喋らせるというのをずーーーーっと自分で使っているのですが、構成が難しすぎて一般化は無理だと思って諦めてました
(Google Homeを喋らせる為に使っている現在の構成)
Googleスプレッドシートで指定日時と喋らせる内容を記入
↓
指定日時になるとFirebaseのDBに変更点書き出し
↓
ラズパイがFirebaseの変更点を読み取る
↓
ラズパイのgoogle-home-notifierで各部屋のGoogle Homeに喋らせる
↓
各部屋のGoogle Homeが指定日時に喋る
まず、「普通の人はラズパイとか買ってない」し「ラズパイで設定する内容が普通の人には難しすぎる」のが最大の難点で、同じ方法での一般化は不可能だろうと諦めてました
次に「Androidアプリとして作ってみたらどうだろう?」、「なんならiPhoneでも?」と思ったのですが、セキュリティ強化の為なのか?AndroidもiPhoneも「OSがバージョンアップする度にタイマーやアラームの様な常駐アプリは作りにくくなる」「作れなくなる」という状況で再び諦めてました
・・・で、今回、TermuxでLinuxとして常駐して動くんならアラームとして使えるんじゃ?と思ったのが今回の経緯になります。やってみたら簡単だったというか何一つ作らずにTermux:APIとcrontabの標準機能だけで実現できました。まあ、設定画面とか無いんですけどね?crontabのテキストファイル手書きですし・・・
blog版の記事はこちら
(今回の記事)
(記事一覧)