2014/07/29

crontabとnotify-sendで時間通知

大学の研究室で作業に没頭していると, 時計を見ていないことが多く, 時間があっという間に過ぎていきます.
集中できる環境なのはいいことなのですが, 没頭しすぎて, その後の予定が狂ってしまうことが多いので, 各時間ごとにメッセージを送信するような設定をしました.

crontabとnotify-sendを使います. (環境はUbuntuです.)

notify-sendは, ポップアップ通知を行うコマンドです.
crontabは, 自動的にコマンドを実行してくれるデーモンです.
というわけで, それぞれ時間のポップアップによる通知とその自動実行を担当します.

私の大学のタイムテーブルは以下のようになっています.

1限目 09:30 ~
2限目 11:10 ~
3限目 13:30 ~
4限目 15:10 ~
5限目 16:50 ~
閉門 23:00

1時限90分で, 2限目と3限目の間に昼休みがあり, 23時には門が閉まるのでそれまでに退室しなければいけません. 基本的に次の日もあるので, できれば, 毎日20時くらいには, 帰りたいのですが...

step 1 . notify-sendを使う.


~$ notify-send title message

で, titleとメッセージが書かれたポップアップ通知が表示されます.

~$ notify-send -i title message

とすると, のところにアイコン名を挿入できます.
ここの名前は, /usr/share/pixmapsディレクトリ内のファイルを拡張子を省いて記述します.

~$ ls /usr/share/pixmaps | grep time
gnome-set-time.png
mono-runtime.png

というわけで, 時間に関するものは2種類なので, このうち, 時計を表示してくれそうな gnome-set-timeを使います.

~$ notify-send -i gnome-set-time "9:25" "おはようございます. もうすぐ1限目が始まります."

のコマンドで,

のような感じのメッセージが出ます. チャイムが鳴ってから1限の始まりを知っても遅いので, 5分前くらいに表示させる方針です.

step 2 . crontabを使う.


crontabは, 指定した時刻になると, コマンドを実行してくれるのですが, 基本的にX Windows上での実行は想定していないので, notify-sendの実行には, ディスプレイの環境変数の設定が必要でした. 入力の先頭に, DISPLAY=:0を付加します. $DISPLAYの環境変数を調べる時は,

~$ echo $DISPLAY

で分かります.

crontabは, 標準入力からメッセージを送ります. 以下は, terminalにechoを表示させる例. アスタリスクは, 先頭から順に分, 時, 日, 月, 曜日を表し,  アスタリスクで指定した場合は, 毎分実行, 毎時実行を意味します. /dev/pts/1は, echoの出力先のターミナルで, ttyコマンドで調べられます.

~$ echo "* * * * * echo message > /dev/pts/1" | crontab

というわけで設定ファイルは, 以下のように作成しました.

DISPLAY=:0
25 9 * * *  notify-send -i gnome-set-time "09:25 (1限目)" "おはようございます. もうすぐ1限目が始まります."
5 11 * * *  notify-send -i gnome-set-time "11:05 (2限目)" "もうすぐ2限目が始まります."
40 12 * * * notify-send -i gnome-set-time "12:40 (昼休み)" "昼休みになりました."
25 13 * * * notify-send -i gnome-set-time "13:25 (3限目)" "起きてますか? もうすぐ3限目が始まります."
5 15 * * *  notify-send -i gnome-set-time "15:05 (4限目)" "もうすぐ4限目が始まります."
45 16 * * * notify-send -i gnome-set-time "16:45 (5限目)" "今日の授業もあと少しです. もうすぐ5限目が始まります."
30 18 * * * notify-send -i gnome-set-time "18:30" "今日の授業はすべて終わりました. あと1時間半で, 残りの作業を片付けましょう."
30 19 * * * notify-send -i gnome-set-time "19:30" "もうすぐ8時です. そろそろ帰る支度をしましょう."
0 20 * * *  notify-send -i gnome-set-time "20:00" "8時になりました. 今日の作業は終わりましたか?"
0 21 * * *  notify-send -i gnome-set-time "21:00" "9時です. あと2時間で閉門です."
0 22 * * *  notify-send -i gnome-set-time "22:00" "10時です. ..."
30 22 * * *  notify-send -i gnome-set-time "22:30" "帰る支度をしてください, もうすぐ閉門です."
55 22 * * *  notify-send -i gnome-set-time "22:55" "あと5分で, 閉門です. 急ぎましょう."

このテキストを適当なファイル(timetableとしました)に保存し, crontabに読ませます.

~$ crontab timetable

atコマンドを使う方法もあるようです(以下のサイト).
notify-send休憩時間をポップアップ通知!

0 件のコメント :