Linux目覚し計画


 わたしはお寝坊さんです。深夜に帰って明け方までほげほげし、夜明けとともに床に就き、昼過ぎに起きて会社へ……という生活を普段送っていると、イレギュラな用事で午前中に起きなければならない時など、よほど強力な目覚し時計でもないと、起きられるもんじゃありません。
 いままで目覚し時計ふたつに携帯電話のアラーム、Windows95に組み込んだ tclockという 4段重ねの体制を敷いていましたが、目覚し時計は無意識のうちに止められ、鞄の中の携帯電話は音波を生地に吸収され、Windowsは寝ているうちにハングアップする、というていたらくでした。
Linux を使えばせめて「ハングアップ」は回避できそうです。

 さて、全体的な方針を決めましょう。サウンドの再生には alsa付属の aplayを組み込んだシェルスクリプトでも書けばいいでしょう。n時 n分に hogehogeをする、となると使うのは cronです。

 まずは再生する音です。なるべく不快な音を、ということで海外の Tom & Jerryファンサイトから tjscream1.wav を盗んできます。この音声を無限ループで再生したいので、以下のようなスクリプトを書いてパスの通っているディレクトリに置きます。ちなみにわたしは、複数ユーザが使いそうなスクリプトは /usr/local/script に格納するようにしています。

cat /usr/local/script/alarm

#!/bin/sh
while [ 1 ]
do
aplay ~/audio/tjscream1.wav
done

 コマンドラインから alarm とタイプすれば、{ドア,ピアノのフタ,窓}に手を挟まれて苦しむトムさんの叫び声がくりかえしくりかえし再生されます。

 また、目覚し時計ですから音量を通常より大きくしなければいけません。あまりスマートなやり方ではないかもしれませんが、alarmスクリプトを読み込む別のスクリプトを書きます。

cat /usr/local/script/mezamashi

#!/bin/sh
amixer master 100:100 &
amixer pcm 100:100 &
alarm
amixer -r

 つまり、amixerでサウンドカードの出力音量を最大に上げ、alarmを実行し、それが killされたらサウンドカードの出力音量を通常状態に戻し終了する、というスクリプトです。ここで注意すべきは alarmのあとに & を書かないことです。

これで再生部分は完成。次にこれを cronに登録します。 crontab -e とコマンドを入力すると、viエディタが/var/spool/cron/crontab/username を読み込んで起動します。cronの書式はいたって簡単。

分<space>時<space>日<space>月<space>曜<tab>コマンド名

となります。なお、曜日は日曜日が0、土曜日が6といった7進数1桁での記述です。複数指定の場合はカンマで区切ればOK。たとえば火・水・土曜の毎朝 8時台に 10分おきにgomiwo-dasou.auというサウンドを再生したければ、

10,20,30,40,50 8 * * 2,4,6 aplay gomiwo-dasou.au

でOK。

 ですから、今回の場合で水曜の 10時に起きなければならないとすれば

0 10 * * 3 /usr/local/bin/alarm

 となります。あとは linuxを起動したまま寝て、目が醒めたら killall alarm等として、alarm killすれば目覚しは止まってくれます。ただし、この時間違って mezamashiの方を killしてしまうとサウンドカードの出力音量が通常状態に戻ってくれません。