SSブログ

18.規則正しい生活を送るために [Ubuntu]

昔、良く言われませんでしたか? 「ゲームは一日一時間まで」
ついつい興が乗ると夜更しするのが常で、翌日の朝に寝ぼけ眼で後悔し、
午後はコーヒーが手放せないことに。

結局時間は有限で、特に自分の好きに使える時間はそのなかでも限られていて。
でも自分のやりたいことはそれこそ沢山あって。

その中でどれをやり、どれをやらないかは最終的に自分が決めることですが
その決めたことを維持管理するのに、ちょっとした工夫で助かることも多々有ります。


例えば、先回インストールしたOrageですが、
あれは「非日常的なイベント」を管理するのに向いています。
……が、自分の予定すべてを管理するのには、Orage一つで管理しようとすると
大変なことになります。

例えば、22時にメシ。22時45分に掃除。23時にフロ。24時に寝るなんて
予定を入れてみるとよくわかります。
試しに22時にメシ、といれてみたら下のようになりました。

18_1.png

このようにメシとかの「日常的な出来事」はそれこそ数多く有り、
それらをすべてカレンダーに入力しようとすると
数少ない「非日常的なイベント」が、日常に埋没して目立たなくなります。←おお、なんかかっこいいこと言ったw

18_2.png

そうなると結果としてカレンダーとしての意味を成さなくなります。
11/13(水)までに秋刀魚18匹がどうだこうだ、とかの予定が目立たなくなるとか


もちろん「日常的な出来事」用のICSファイルを別につくり、切り替えればすみますが、
正直面倒ですね。
タイムスケジュールとして「日常的な出来事」を管理する必要があるのならばともかく、
メシの時間一つにそこまで大げさなものは求めていない人が大半でしょう。

というわけで、私としては「日常的な出来事」と「非日常的なイベント」は
分けて管理すべきと考えており、
今回は規則正しい生活を送るために
「日常的な出来事」を簡単に告知してもらうことがお題となっています。



で、やりたいことですが、まず漠然とやりたいことをイメージしてみます。

現在の時刻とやる内容を簡単にポップアップメッセージで知らせてくれる。
メッセージはほっておくと自然と消える。

こんなところでしょうか。

ポップアップメッセージはnotify-sendを使えば良いみたいです。
自動で何かをやってくれるのは、cron という機能で実現できそうです。

cronでnotify-sendを表示したい時刻分実行するか、
cronでシェルスクリプトを実行し、
シェルスクリプト内部で時刻で分岐してnotify-sendを実行するかですね。

一応断っておきますが、下記はUbuntu16.04環境下での話ですので、
環境によって適宜コマンドは置き換えてください。


1.ポップアップ用のnotify-sendの命令を確認する(もしくはシェルスクリプトを作る)
 まずは、ググル先生に「ubuntu デスクトップ通知」 で質問してみます。
 Ubuntuだと先述のnotify-sendというコマンドでいけそうです。
 ついでに端末からman notify-send を実行して、仕様を確認しておきます。
 notify-send  表示アイコン タイトル メッセージ の記述でしたが、
 表示アイコン を最後に持ってきてもいけるようです。試しに端末で実行してみます。


notify-send '疲れたよ。' '今夜も残業か……' --icon=face-tired
  (内容についてはノーコメントでw)

18_3.png

  (つーか、ググル先生って何気にバージョンアップしてません?
  規則正しい生活とか英語でどう言うんやろ、とか調べてみたら
  翻訳とか音声付きでやってくれるし。
   man notify-send の結果とか、大意分かるレベルで翻訳してくれるし。
  今時の中高生はホンマ恵まれとるわ。英語の宿題とか予習とか一発やん。
  写真とかの文字を取り込んで翻訳するとか、もうね
  来年のオリンピックにはスマホから撮影した文字を翻訳したりとか、
  翻訳音声が流れるシーンが多くなるんですかね)

閑話休題
 文字数が多いと表示が欠けるので、予め端末から実行して文字数が
 欠けないか確認します。
 まあ、表示時刻、内容、アイコンについては各自の好きなように設定してくださいな。

 シェルスクリプトはregular_life.shという名前で保存しておきます。
 あと、忘れずにシェルスクリプトに実行権限をつけてくださいな。(15回参照)


2.自動実行の設定をする
 決まった時刻になったら自動でnotify-send、もしくはシェルスクリプトが
 実行されるようにcronの設定をします。

 まずは端末から、現在のcronの設定を確認します。
  
crontab -l

 ここで、何も設定されてなかったら構わないのですが、
 何か既にcronに設定されていた場合は
 リダイレクトを使ってcronのバックアップをとっておきましょう。

crontab -l > ~/cron.back
cp ~/cron.back ~/cron.new

 で、geditで、cron.newを編集します。
 記載する手順は、実行時刻を、分 時 日 月 週 の順に記載して、
 最後に実行したいコマンドを記載します。
 半角スペースで区切られるので、
 候補となる時間が複数の場合はカンマ等で一度に指定できます。

 あと、cronは実行結果をどこに表示するかを明示的に指定しないと、
 notify-sendのポップアップを表示してくれません。(実はここでハマりましたw)
 端末から使用しているディスプレイを確認します。
env | grep DISPLAY
 私の環境だとDISPLAY=:0 と表示されましたので、cron.newの冒頭に記載します。


   でも、DISPLAY=:0 を指定すると、WARNINGが出るんだよなあ(ボソッ)


DISPLAY=:0
0,30,45 * * * * ~/regular_life.sh
0 22 * * * notify-send 'メシ! 只今22時です。' 'そろそろ夕食の時間です。' --icon=/usr/share/pixmaps/faces/puppy.jpg

 上記は例のため、シェルとnotify-sendを直で実行するのと両方を記載していますが、
 実際にはどっちか一つにまとめてくださいな。

 設定が終わったら、cron.newを保存して、cron.newの設定内容をcronに設定します。

crontab ~/cron.new

 設定が反映されているか、crontab -l で確認してみます。
 あと、cronが起動しているかどうかもsudo service cron status で確認します。
active (running) と表示されていればOKです。
 されていなければ、sudo service cron start で起動させます。

ひょっとしたらstatus 表示時にエラーが表示されるかもしれませんが、
WARNINGはひとまず無視の方向で。(解決方法が分からんかった)

 書き込めないエラーが表示されたら、chmodで書き込み権限を与えます。
 今回は手抜きのため、777でやりましたが、
 本来は権限が必要なユーザーに限定してchmod を実行するのが正しいかと。
    
sudo chmod 777 ~/.cache/dconf/
sudo chmod 777 ~/.cache/dconf/user


 さて、ポップアップメッセージはうまく表示されたでしょうか。

 ポップアップメッセージになるべく従って、規則正しい生活を送りましょう。





   さて、問題は22時に家にいるかどうかなんだよな(今日も残業、明日……)w


        ┐(´д`)┌ ヤレヤレ...


共通テーマ:パソコン・インターネット

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。