Walrus,Visit. | 一覧 | 検索 | 更新履歴(RSS) | 新規作成
はてなブックマークに追加 はてなブックマークを表示 編集 | 編集(管理者用) | 差分

Linuxザウルス/SL-A300とKISS#1

編集

自動で時計あわせ。

SL-A300で時計合わせ。

編集

10月には乗換案内が出るそうです。 スケジュール管理や時刻表関連、etc.を含むPDAでは、時計って重要な要素です。

ちょうど良いことに、SL-A300で使える時計あわせソフトがあります。 まず、これをご紹介しましょう。

Synchronize Clockを使う。

SL-A300で使える時計あわせソフトですが、これが実は次の2つのプログラムからなっています。

2つからなっている、といっても難しいことはありません。

Synchronize Clockを起動すると次のような画面が表示されます。 最初に表示されている「parasite.cs.rits.edu」はダミー(ですよね)です。 ここに公開されている時刻サーバー、例えば「time-nw.nist.gov」などを入力して、「Set Time」をクリックしてください。

これだけです。 簡単ですよね?

Synchronize Clockを使わない。

さて、Synchronize Clockと一緒にインストールした、rdateって何者でしょう?

実はこれ、話が逆です。 もしSL-A300にTerminalがインストールされていたら、次のコマンドを試してみてください。

# rdate time-nw.nist.gov

どうでしょう。 現在の時刻が表示されて、実際に時計も修正されたのではないでしょうか?

rdateは、リモートの時刻に自分の時刻を合わせるツールです。 コマンドライン(Terminal)から実行されるので「コマンドラインツール」と呼ばれるものの1つです。 ただ、これじゃあまりにそっけないし、毎回コマンドラインで上のコマンドを打つのは面倒ですよね? そこで用意されたGUI、フロントエンドがSyncronize Clock、というわけです。 Syncronize Clockは「set time」がクリックされると、裏でrdateを起動しているだけです。

SL-A300とKISS。

なぜrdateとSyncronize Clockは、一つのソフトにまとめて配布されないのでしょう? この裏にあるのが、KISSという考え方です。

KISSはUnixならではのもので、これになじむとLinux PDAならではの使い方、というのが見えてくるはずです。

時刻あわせを自動化する。

時刻があっていなければ時計として役立たない、だから時刻あわせを、というのは正しいですね。 でも、時計なんだから時刻はあっていて当然、といわれると、なんとなくそんな気もしてきます。 そこで、意識せずに時刻あわせができる技を紹介しましょう。 ただし、今回の手順ではTerminalが必要なので、これはインストールして置いてください。

さて、では次の手順を実行いてください。

  • (1) メモ帳を起動し、次の4行のテキストファイルを作成する。

# Time adjust
/usr/sbin/rdate time-nw.nist.gov >> /home/root/Documents/TimeAdjust.log
echo 'W' > /var/spool/at/trigger
  • (2) このファイルを「rdate」というファイル名で保存し、メモ帳を終了。
  • (3) teminalを起動する。
  • (4) 「cp -p /etc/ppp/ip-up /etc/ppp/ip-up.bak」と入力してリターン。これから手を入れようとしているファイル「/etc/ppp/ip-up」のバックアップができます。
  • (5) 「cat ~/Documents/Text_Files/rdate.txt >> /etc/ppp/ip-up」と入力してリターン。上のテキストファイルの内容が、/etc/ppp/ip-upというファイルの末尾に追記されます。
    • ~は[Shift]を押すと右上のほうにでてくる「〜」で入力できます。
    • ちょっと長いのですが、DocumentsはDを入力した時点、Text_FilesはTeを入力した時点で[tab]を押すと、勝手に残りを打ってくれるので少し楽ができます。
    • もしコマンドを打ち間違えたら、上を押すとこれまでに実行してきたコマンドが順に表示されるので、ちょっとの修正で済みます。

これで終わりです。

ここでは、ip-upというスクリプトファイルの最後に「rdateを実行せよ」という一文を入れました。 このip-upというファイルは、実はppp(Air H"など電話)接続に成功した直後に、自動的に実行されるスクリプトです。 つまり、メールを受信する時、Webをブラウズする時、電話をかけた時点で勝手にSL-A300が時刻あわせをするようになったわけです。

これで、時計なんだから時刻はあっていて当然、が何とかなりそうですね。


興味がある人は、時計を3時間ぐらい遅らせてから、これを実行してみてください。 うまくハードウェア・クロックまで補正されると、いきなり接続時間が3時間余りになって、一瞬ギョッとします。 ;-)

ROMバージョン1.20での自動で時計合わせ。

ROMバージョン1.20では、Zaurus Software Indexで配布されているrdateが動作しません。 かわりに、ZaurusArchivesで配布されているntpdateを利用することができます。 以下のようにして下さい。

  • rdateのかわりに、ZaurusArchivesプログラムダウンロードで配布されているntpdateをインストール。
  • 「時刻あわせを自動化する。」の4行スクリプトの代わりに、以下の内容を使用する。

# 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ファイル内のこれらの行を直接修正しましょう。 次の手順で実行してみてください。

  • (1) teminalを起動する。
  • (2) 「cp -p /etc/ppp/ip-up ~/Documents/Text_Files/ip-up.txt」と入力してリターン。メインメモリーの「Documents/Text_Files」にip-upがコピーされます。
  • (3) メインメモリーの「Documents/Text_Files」のip-up(本当はip-up.txt)をメモ帳で開き、修正します。
  • (4) teminalで「cp -p ~/Documents/Text_Files/ip-up.txt /etc/ppp/ip-up」と入力してリターン。修正したファイルでip-upが置き換えられます。

SL-A300とKISS.#1。

この自動化、rdateというコマンドがとてもシンプルにできていたこと、ppp接続時の処理ip-upがとてもシンプルにできていたことの両方があって、はじめてうまくいったことです。 特にrdate、普通ならSyncronize Clockに組み込まれてしまうところですよね? そうならず、時刻あわせツールのrdateと、そのフロントエンドのSyncronize Clockという、二つに分かれていたことが自動化を助けてくれました。 でも、これは「偶然」2つに分かれていたのではなく、「伝統的に」2つに分けるものなのです。

Unix(LinuxもUnixですね)には、KISSと略される、「シンプルなもの程よい」という考え方があります。 何で良いのか、はrdateが語ってくれてますね。 いくつものシンプルなものを組み合わせて、とても大掛かりなはずの作業を簡単にこなせることがあるからです。 それも自動でとか、1つのコマンドでとか、指定の時間がきたら、で一息に。

SL-A300でもKISSの恩恵がきっと受けられるはずです。

  • 時刻あわせを自動化したくないですか?
  • 月間の電話接続時間を計りたくないですか?
  • 「メール」が対応していないAPOPのサーバからもメールを受信したくないですか?
  • 自動で最新ニュースを取得したくないですか?
  • 目覚まし代わりに6時に音楽再生をはじめさせたくないですか?(え、時間が早すぎる?)

これ、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つのコマンドを用意しているようです。

  • hwclock
  • clock

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」を実行すると、ここで問題になっているハードウェア・クロックの変更が実行されるようです。 申し訳ないのですが、原理を理解していないのでこの点については説明できません。

コメント

お名前: コメント: 更新