2012年10月7日日曜日

growlnotifyをiCalのアラーム代わりに使ってみる

iCalにイベントを登録して、時間が来たら知らせてくれるようにアラームを設定しています。朝など忘れやすいので、結構便利に使っています。

ただ、毎日決まった時間にやらないといけないことをiCalに繰り返しイベントとして登録していると、iCalの画面が同じイベントで溢れて、その他のイベントが見づらくなってしまいます。下の図はそれほどでもないですが。

iCalのカレンダーの種別を追加して、「定期的(隠す)」ためのイベント用を登録して普段は表示しない設定にすれば、隠すこともできますが、別の方法はないか考えてみました。

イベントの通知といえばGrowlですがそれに含まれているgrowlnotifyを使うとスクリプトベースで画面に通知を表示できそうです。環境はSnow LeopardとGrowl 1.2.2で試してみました。
全体の流れは、(1) growlnotifyのインストール、(2) 表示用スクリプト作成、(3) crontabへの設定となります。

(1) Growlのインストールだけでは、growlnotiryはインストールされませんので、Growlのインストールの後に、growlnotiryをインストールします。Growlのインストール用ディスクイメージをマウントすると、Extraフォルダの下にgrowlnotify.pkgというインストールパッケージがあります。
そのパッケージをインストールすると、/usr/local/bin/growlnotifyに実行ファイルがコピーされます。(Suspicious Package qlgeneratorより)
grwolnotifyのmanページもインストールされるので、それを見ると使い方は大体わかります。

(2) manページなどを参考にスクリプトを作成します。以下に例を示します。(ブログ用にちょっと簡略化していますが)

#!/bin/sh
/bin/date "+今日の%H:%M%n金魚にえさ" | /usr/local/bin/growlnotify -s -a iCal -d feed crontab

このスクリプトに、kingyo.shのような名前をつけて実行権限を付けて( chmod +x) おきます。
このスクリプトを実行すると、次のように表示されます。
growlnotiryの-sオプションは、表示がタイムアウトしないようにします。左上に現れるクローズボックスで表示を消せます。

-aオプションは、アプリケーションアイコンを指定します。iCalを指定したらiCalのアイコンが表示されます。なくてもかまいませんし、他のアプリケーションを指定することもできます。
-dオプションは、現在発行しようとしている通知にIDを付けるものです。既に同じIDのGrowlのウィンドウが開いていると、新たにウィンドウを開かずに、既に開いているウィンドウの内容が上書きされます。
最後の引数のcrontabは、ウィンドウの一行目に表示されるタイトルです。自分はcrontabで表示させるのでこうしましたが、これもiCalや他の好きなタイトルにすればいいと思います。
また、dateコマンドの+オプションで日付を含むメッセージを表示できます。それぞれ、%Hが24時間表示の時間、%Mが分、%nが改行を示します。

(3) 上で作ったgrowlnotify用スクリプトがちゃんと表示されるのが確認できたら、crontabに登録して定期的に実行できるようにします。最近の流儀に合わせてlaunchdで自動起動を指定してもいいと思います。(ここではcrontabを説明します)
crontabの現在の登録内容を確認するためのコマンドは、
$ crontab -l
です。出力内容をリダイレクトしてバックアップをとっておくといいでしょう。
crontabでデータベースを直接編集する場合のコマンドは
$ crontab -e
です。vimではなく、nanoやemacsを使う場合、環境変数EDITORにそのコマンドを設定してください。emacsを使いたい場合は以下のとおりです。

$ export EDITOR=emacs

朝7時30分に実行する場合は、以下のようになります。
30 7 * * * $HOME/bin/kingyo.sh
既に他の定義がしてある場合は、最後の行にでも追加するといいと思います。
crontabのデータベースのフォーマットは、タブコード区切りで、順番に分、時間、日、月、曜日(0が日曜日)、コマンドとなっています。
現在の時間に近い時間を設定してテストするといいと思います。

以上ですが、実はiCalにも通知の頻度は落としていますが(毎日ではなく、何日に一回とか)、同じイベントを記入したままにしています。
今のところ、スケジュール関係のデータベースはiCalをメインに考えていますので、データとして残しておきたいため、そのようにしています。

0 件のコメント:

コメントを投稿