自動で時計あわせ。
10月には乗換案内が出るそうです。 スケジュール管理や時刻表関連、etc.を含むPDAでは、時計って重要な要素です。
ちょうど良いことに、SL-A300で使える時計あわせソフトがあります。 まず、これをご紹介しましょう。
SL-A300で使える時計あわせソフトですが、これが実は次の2つのプログラムからなっています。
2つからなっている、といっても難しいことはありません。
Synchronize Clockを起動すると次のような画面が表示されます。 最初に表示されている「parasite.cs.rits.edu」はダミー(ですよね)です。 ここに公開されている時刻サーバー、例えば「time-nw.nist.gov」などを入力して、「Set Time」をクリックしてください。
これだけです。 簡単ですよね?
さて、Synchronize Clockと一緒にインストールした、rdateって何者でしょう?
実はこれ、話が逆です。 もしSL-A300にTerminalがインストールされていたら、次のコマンドを試してみてください。
# rdate time-nw.nist.gov
どうでしょう。 現在の時刻が表示されて、実際に時計も修正されたのではないでしょうか?
rdateは、リモートの時刻に自分の時刻を合わせるツールです。 コマンドライン(Terminal)から実行されるので「コマンドラインツール」と呼ばれるものの1つです。 ただ、これじゃあまりにそっけないし、毎回コマンドラインで上のコマンドを打つのは面倒ですよね? そこで用意されたGUI、フロントエンドがSyncronize Clock、というわけです。 Syncronize Clockは「set time」がクリックされると、裏でrdateを起動しているだけです。
なぜrdateとSyncronize Clockは、一つのソフトにまとめて配布されないのでしょう? この裏にあるのが、KISSという考え方です。
KISSはUnixならではのもので、これになじむとLinux PDAならではの使い方、というのが見えてくるはずです。
時刻があっていなければ時計として役立たない、だから時刻あわせを、というのは正しいですね。 でも、時計なんだから時刻はあっていて当然、といわれると、なんとなくそんな気もしてきます。 そこで、意識せずに時刻あわせができる技を紹介しましょう。 ただし、今回の手順ではTerminalが必要なので、これはインストールして置いてください。
さて、では次の手順を実行いてください。
# Time adjust /usr/sbin/rdate time-nw.nist.gov >> /home/root/Documents/TimeAdjust.log echo 'W' > /var/spool/at/trigger
これで終わりです。
ここでは、ip-upというスクリプトファイルの最後に「rdateを実行せよ」という一文を入れました。 このip-upというファイルは、実はppp(Air H"など電話)接続に成功した直後に、自動的に実行されるスクリプトです。 つまり、メールを受信する時、Webをブラウズする時、電話をかけた時点で勝手にSL-A300が時刻あわせをするようになったわけです。
これで、時計なんだから時刻はあっていて当然、が何とかなりそうですね。
興味がある人は、時計を3時間ぐらい遅らせてから、これを実行してみてください。 うまくハードウェア・クロックまで補正されると、いきなり接続時間が3時間余りになって、一瞬ギョッとします。 ;-)
ROMバージョン1.20では、Zaurus Software Indexで配布されているrdateが動作しません。 かわりに、ZaurusArchivesで配布されているntpdateを利用することができます。 以下のようにして下さい。
# Time adjust /usr/bin/ntpdate time-nw.nist.gov >> /home/root/Documents/TimeAdjust.log 2>&1
現在Zaurus Arhivesで配布されているntpdateコマンドは、triggerのキックを自動でするようにハックされたものですので、以下の行にあたる作業は不要です
echo 'W' > /var/spool/at/trigger
何度も上の手順を実行してしまうと、ip-upにはrdateコマンドがいくつも書き込まれてしまいます。 (再校を重ねている私が諸悪の根源のような気もしますが。) こうなると、電話接続をするたびに何度もrdateを行おうとするので、「接続中」となるまでに随分時間がかかってしまいます。
この場合には、ip-upファイル内のこれらの行を直接修正しましょう。 次の手順で実行してみてください。
この自動化、rdateというコマンドがとてもシンプルにできていたこと、ppp接続時の処理ip-upがとてもシンプルにできていたことの両方があって、はじめてうまくいったことです。 特にrdate、普通ならSyncronize Clockに組み込まれてしまうところですよね? そうならず、時刻あわせツールのrdateと、そのフロントエンドのSyncronize Clockという、二つに分かれていたことが自動化を助けてくれました。 でも、これは「偶然」2つに分かれていたのではなく、「伝統的に」2つに分けるものなのです。
Unix(LinuxもUnixですね)には、KISSと略される、「シンプルなもの程よい」という考え方があります。 何で良いのか、はrdateが語ってくれてますね。 いくつものシンプルなものを組み合わせて、とても大掛かりなはずの作業を簡単にこなせることがあるからです。 それも自動でとか、1つのコマンドでとか、指定の時間がきたら、で一息に。
SL-A300でもKISSの恩恵がきっと受けられるはずです。
これ、KISSなSL-A300ではちょっとの工夫でできるはずのことばかりです。 「SL-A300とKISS.」シリーズではヤマケンさんの参加を得て、Linuxだからできる、他のPDAにはないSL-A300の活用法や強化法、それから楽しみ方を見つけていきたいと思います。
Linuxザウルスでは、rdateを実行した後、「echo 'W' > /var/spool/at/trigger」を実行する必要があります。 「rdate」を実行するだけだと、下でもさんにご指摘いただいた通り、電源を一度切ったり、ハードウェア・リセット(再起動)を行うと、時刻はrdate前に戻ってしまいます。 蛇足になりますが、これについて、私が分かった範囲でご説明。
SL-A300を含む、Linux Zaurusではrdateコマンドで時刻を設定しても、ハードウェアリセットを行うとrdate前の時刻のずれが戻ってきてしまいます。 このことは、ZSI上のrdateのページにちゃんと書かれていました。 (拙訳につき、正確なところは原文でご確認ください。)
注意:rdateはハードウェア・クロックのセットをしません! Zaurusを次回起動したとき、間違った時刻になっているでしょう。 簡単な回避策は、qtopiaのTime applet(時刻設定画面)に入り、[OK]をクリックすることです。
ザウルスでの時刻保持の仕組は、「How Linux Keeps Track of Time」というページの内容と照らし合わせると、「バッテリーで動作する"Real Time Clock"」を持ち、電源投入時に、ここから現時刻を読み込む仕組を取っているようです。 rdateで設定した時刻が、再起動後にまた狂ってしまうのは、ZSIに書いてある通り、ハードウェア・クロックを設定できていないことが問題です。
結論から言うと、上に書いてあるように「echo 'W' > /var/spool/at/trigger」を実行させればよいようです。
やはり上の「How Linux Keeps Track of Time」によれば、Linuxにはハードウェア・クロックに直接アクセスする手段として、以下の2つのコマンドを用意しているようです。
Linux Zaurusの場合、clockは本当に時計・ストップウォッチを表示するコマンドですので、hwclockを使うことになるはずです。 しかし下のように、Terminalからhwclockを使おうとすると、エラーが発生します。
bash-2.05# hwclock --show --debug hwclock 2.4c/util-linux-2.10r hwclock: Open of /dev/rtc failed, errno=16: Device or resource busy. No usable clock interface found. Cannot access the Hardware Clock via any known method.
つまり、ハードウェア・クロックにアクセスするためのデバイスファイル/dev/rtcを、他のプロセス(アプリケーション)が開きっぱなしにしている、ということですね。 このために、例えばip-upにhwclockを組み込んで解決する、といった方法が取れません。
「echo 'W' > /var/spool/at/trigger」を実行すると、ここで問題になっているハードウェア・クロックの変更が実行されるようです。 申し訳ないのですが、原理を理解していないのでこの点については説明できません。