2007年09月01日

Wake On LanをWebブラウザで行う

先のエントリーでWOL(Wake On Lan)に成功したことを記したが、それをより効果的に利用出来るように考えて成功したので備忘録しておく。

要するに常時起動のVine Linuxマシンから、TVサーバのマシンの電源ONの制御をしようって考えだ。それをWebブラウザを使ってやりたいと言う話。

もちろんこの方法なら、ルーター越しのWOLも可能だということだ。職場などの出先のPCからはもちろん、最近の携帯電話ならブラウザが付いているのでそれも可能だと思う。技術的には大した事無いが一つの方法として参考になれば幸いである。

問題は私がPerlを全く理解していない事である。よってCGIもシェルスクリプトで書かざるを得ない。でも本当にそれって可能なのだか?調べてみたら同じことをやっている方のブログで「ルーターの外からwol」を発見したので、シェルスクリプトでCGIを書くのも可能なんだなと裏づけが取れたので実践することにした。

しかし、シェルスクリプトでCGIを書くのって本当は良くない方法らしいから、せめてベーシック認証をかけたディレクトリに設置することにした。ついでにhtmlファイルを置いてちょっとだけ見栄えもよくしてみる。実行ボタンをクリックするだけなんだが。

注意:下記にURLが出てきますが架空のものです。ハックしようとかしないでね。そもそも存在しないURLを例にしていますから、認証を破ってやろうなんて事は無駄です。

 

まず、wolコマンドを実行するシェルスクリプトを書いてしまおう。
難しいのは嫌なので極めてシンプルに書いてしまう。

$ which sh
/bin/sh

$ cd
$ vi wol.sh 

wol.sh という名前で保存するとする
-----------------------------------------------
#!/bin/sh
wol 192.168.1.255 xx:xx:xx:xx:xx:xx
-----------------------------------------------

本当にwolが動くか確認しておこう

$ chmod 705 wol.sh
$ ./wol.sh

リモートで起動することに成功したら次のステップに進もう

既に公開しているWebサーバにスクリプトと、簡単なhtmlのページを作る。
ちなみに私はpublic_htmlディレクトリをベーシック認証して設置することにした。
(ベーシック認証についてはどこかに記した記憶があるので、ここでは書きません)

$ cd public_html/
$ vi wol.cgi

wol.cgi という名前で保存する(Perlではなくshで書いてる)
-------------------------------------------------
#!/bin/sh
echo Content-type: text/html
echo
echo "<title>sending wol</title>"
echo "<p>"
echo "sending wol to fluorite"
echo "..."
sh /home/wol/wol.sh
echo "..."
echo "</p>"
echo "<p>"
echo "done."
echo "</p>"
-------------------------------------------------

$ chmod 705 wol.cgi 

Webブラウザ用にHTMLのページを作っておくとちょと自己満足に浸れそう(w

$ vi wol.html

wol.html という名前で保存する
-------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>WOL-SH</title>
</head>
<BODY BGCOLOR="#ffe0c0">
<H3 align="center">WOL-SH</H3>
<HR>
<p align="center">テレビサーバの電源をWake on LANで入れるっちゃ</p>
<form action="./wol.cgi" method="post" name="wol" id="wol">
<div align="center">
<input type="submit" name="Submit" value="送信">
</div>
</form>
<HR>
</body>
</html>
------------------------------------------------- 

これで出来たのでWebブラウザからアクセスしてみた

http://www.sasapurin.com/~wol/wol.html

ベーシック認証がかかっていて、ユーザー名とパスワードを入力した

極めてシンプルなページとボタンが一個出てきたので、ボタンをクリックする。 

Internal Server Error .......

 なんじゃそりゃ~

 

httpdのエラーログ確認

Resource temporarily unavailable:
couldn't spawn child process: /home/wol/public_html/wol.cgi

チャイルドプロセスが作れないとかぬかしてるな..

 

そもそもシェルで書いたCGIは機能するんか?

$ ./wol.cgi

あらら、ちゃんとWOLでリモート起動がかかってメッセージも出てきた

Content-type: text/html
<title>sending wol</title>
<p>
sending wol to fluorite
...
...
</p>
<p>
done.
</p>

 

って事は、シェルスクリプト(sh)でCGIを書いているから、Apacheが拒否してるって感じだろうな。
そういえば、ExecCGIとかのところに、CGIファイルの拡張子を定義するところ(AddHandler)があったはず。

$ su -
# less /etc/httpd/conf/httpd.conf

/AddHandler

みぃつけた(w

けど待てよ..ここを書き換えちゃうと、Apache全体に適用されちゃうよな。それはまずいな。

 

ってことで、.htaccessを利用することに決定。既にベーシック認証の為に設置してるから追記するだけでいけるはず。

# exit
$ cd ~/public_html
$ vi .htaccess

AddHandler cgi-script .cgi.sh

 

気を取り直して、もう一度テストをやってみた

http://www.sasapurin.com/~wol/wol.html

ボタンをクリック!

カチン、ピコッという音と共に電源ファンの音が鳴って、LEDが点灯した!

やったぜ成功!!やるじゃん俺(w

という訳でWebブラウザでWOLに成功したのでありました。

実は、メールを送ってそれをトリガーにしてシェルを実行させるって方法も考えたんだけどね。それはまたの機会にしようかな。とりあえず上手く出来てよかった。

冗長しますが、上記のURLは架空のもので存在しません。わざわざ秘密の入り口をネットで公開するほど間抜けではないっす(w



投稿者 sasapurin : 18:41 | コメント (0) | トラックバック

Linux鯖からMagic Packet送出

IO-DATAのGV-MVP/RX2WというハードウェアエンコードなTVキャプチャカードを使って地上波テレビを録画する事にした。これが結構便利で「おまかせ録画」をしておけば、キーワードに引っかかる番組をEPGから探し出してくれて、どんどん撮り貯めてくれる。大容量HDDに録画するようにしているので溜め込んでから、観終ったり要らないのは削除すればいいだけだ。もっと早く導入しておけばよかった。

将来的にはLinuxでTV録画サーバにしたいのだが、当分は使い勝手の問題で純正のWindows版ソフトを使って録画することにした。 やっぱり考えられて作られて製品化しているだけあって、オープンソースなソフトウェアだけではちょっと不便だからだ。もっとも自分にスキルがあれば改良も可能だろうが。 まだまだ勉強が足りないと痛感する。

そんな訳で二週間ほど録画をしているのだが、自分の趣向が見えてきて、そういう番組が放送されている時間帯が朝と夜に偏っていることが分かった。ということは日中は録画待機のまま無駄に電源を消費しているってことだ。なんとか改善したいなと思った。

まず考えたのはBIOSに備わっているタイマー起動である。毎日(曜日も指定可能)決まった時間に自動的に起動する様にして、一々自分で電源を入れなくてもすむようにした。これは使っているマシンのBIOSに依存しているから、まぁ運が良かったという感じだ。

そして深夜になると自動でシャットダウンする様にしている。これは下記でVBスクリプトが配布されているので、ありがたく使わせていただき、タスクで時間などを設定して、定期的に実行させればシャットダウンがかかる。これだけなら電源を切る為に手を煩わすことはない。

Windows 2000/XP でログオフ/シャットダウン/再起動アイコンを作るには?

でもこれだと朝起動して夜シャットダウンを一回限りしか出来ない。冗長してしまうが、私の観たい番組は朝と夜に偏っていて日中の電源ONは無駄な待機電力を消費するだけである。なんとか出来ないものか?

考えてみたところ、この機種にはIntelのPro100というEthenet用のチップが使われている。って事は恐らくWOL(Wake On Lan)に対応しているはずだ。デバイスマネージャーからプロパティを表示して詳細を確認したところ、確かにWOLに関する設定がある!来た来た~

「PMEをオンにする」という設定と
「Wake on 設定」という項目を「Wake on Magic Packet」に設定した。
これでマジックパケットがに反応して電源を起動できるようになるはずだ。

幸いというか、我が家にはPC-UNIXで24時間動かしっぱなしのサーバが二台ある。オペレーションシステムには、FreeBSDとVine Linuxを使っている。今回はVine Linuxの方をWOL制御の親とする事に決めた。

$su -
Password:
#apt-cache search wakeonlan
#apt-cache search wol
wol - Wakeup on LAN client
#apt-get install wol
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  wol
アップグレード: 0 個, 新規インストール: 1 個, 削除: 0 個, 保留: 2 個
4103B のアーカイブを取得する必要があります。
展開後に 4216B のディスク容量が追加消費されます。
取得:1http://updates.vinelinux.org/3.2/i386/plus wol 0.1-0vl2 [4103B]
4103B を 0s 秒で取得しました (8446B/s)
変更を適用しています...
準備中...                   ########################################### [100%]
   1:wol                    ########################################### [100%]
完了
# man wol
wol のマニュアルはありません。
#which wol
/usr/bin/wol
# wol 192.168.1.255 00-10-C6-xx-xx-xx
Illegal MAC address: xx-xx-xx-xx-xx-xx
# wol 192.168.1.255 0010C6xxxxxx
Illegal MAC address: 0010C6xxxxxx
#wol 192.168.1.255 00:10:C6:xx:xx:xx

ようやくVine LinuxからのWOLコマンドにTVサーバが反応して、電源が入った!

ポイントとしては、下記の書式でwolコマンドを投入する事だ。上に転記した様にmanが無いから試してみるしかなかったのだ。我が家の場合はネットワークアドレスが192.168.1.0/24なのでブロードキャストは192.168.1.255である。NICのMacアドレスは面倒だけど何かしらの方法で控えておくしか無いだろう。

wol [ブロードキャストアドレス] [xx:xx:xx:xx:xx:xx]

ちなみにwolコマンドは、一般ユーザーからでも実行できる事を確認した。(上記はrootから行っているが、exitして一般ユーザーからやってみたが成功した)

さて、問題はこれをどうやって使いこなせば美味しいかってところだ。定期的なスケジュールは簡単なシェルにしておいて、cronで行えばよいだろう。そうすれば下記の様に出来るハズだ。

  1. 朝はBIOSのタイマーで起動(念のためWOLでも起動を試みておく)
  2. 午前中の放送を録画
  3. タスクに登録したシャットダウンスクリプトで電源が落ちる
  4. 夕方はVine Linux鯖からWOLでリモート起動(時間はcronで指定)
  5. 夕方~夜の番組を録画
  6. タスクに登録したシャットダウンスクリプトで電源が落ちる

この繰り返しが実現するはず。単発のWOLはatで指定しておけば繰り返さないので安心。

実験する限りこれはイレギュラーなことが無い限り、毎日安定して動くだろうと思う。これだけでもかなり満足ではある。

しかし、やっぱりちょっと欲が出てくる。
TV録画マシンはWindowsを使用しているので、PacketiX Desktop VPNを使用させて頂いて常駐するようにしている。つまりイレギュラーな時間でもこいつの電源を入れることに成功すれば、外部からPacketiX Desktop VPNでリモート操作が出来る。急に予約したい番組が出来たとしても外部から操作出来るってもんだ。

ちなみには、一世を風靡した「SoftEther」の開発を更に進めているソフトイーサ株式会社が、学術研究目的で無償で配布しているものだ。ベータ版だとの事だが安定して使用出来るので、活用させていただいている。私も近い将来ちょっと考えていることがあるので、もし本格的に仕事で必要になったらちゃんとした製品版を購入しようと思っている。今は所詮趣味っていうか自己満足な世界で楽しんでいるだけなので..orz

話をもどして、我が家のVine Linux鯖はWebサーバである。ルーターのSSHポートは開けてないから、外部からWebブラウザを使ってアクセス出来、操作することが出来る唯一のマシンなのだ。って事はWebブラウザで操作できるCGI?を作成すればWOLコマンドによるマジックパケットをLANに送出することが可能となるはず。

しかし、シェルスクリプトすら作れない私にはちょっと高い壁である。自慢にもなりゃしないが、プログラミングは全く出来ないのだ。でもなんとかこの問題というか課題はクリアしたい。ちょっと調べてみよう。



投稿者 sasapurin : 14:32 | コメント (0) | トラックバック

2007年02月17日

Vine Linux 4.0 のxorg.conf

何年ぶりだか、Gentoo Linuxをインストールしてみた。知人が最近UNIX系の知識を使う会社に転職したそうで、しきりにGentooはいいよと電話でいわれるからだ。たしかにGentooはBSDっぽいところがあって、個人的には使い易いと感じる。

ただし、問題はインストールにかかる手間と時間だ。手間は多少かかっても許せるが、時間が異常にかかるのはなんとも言えない弱点だ。基本的にコンパイル処理が発生する頻度が高く、マシンスペックが低いと数日がかりである。とりあえずCPUのクロックが2GHz位で、メモリーが512MB以上あれば、一日位で何とかなるかも知れない。 非常に見通しの良いシステムを作れる仕組だが、現実的なことを考えると、マシンスペックが必要異常に欲しくなる。本来は型遅れなマシンでも動く軽さという魅力を備えているというのに。

と、悲観的なことを書いたけれど、Gentooには美味しい機能というか仕組を簡単に実装することが出来るので、処理の速いGentooマシンを持っていれば、同一ネットワーク上で分散コンパイルすることが出来るのです。この仕組さえ仕込んでしまえば、emergeの時にかかるコンパイル処理を他のマシンに助けてもらえるので、比較的古いマシンでも再利用することが出来そうです。詳しくは"distcc"や"Gentoo 分散コンパイル"等のキーワードで検索してみてください。

実際、GentooでWebサーバを組んだら、かなり無駄なものを削ぎ落とした環境が作れるなとマジに思った。それ位Gentooのemergeは魅力的なパッケージ管理ツールである。


それはさておき、興味本位というか、以前はマシンがしょぼ過ぎて途中で断念したX-Windowをいれてみようと、ThinkPad X31 にGentooのベースシステムをインストールした後で、emerge xorg-x11を実行してみた。おそらく3時間かからない位でコンパイルが終わっていた。さすがにPentium-Mだけあって、計算速度は桁違いである。(最近のCore Duoなんかだともっと速いんだろうな)

しかし、肝心のXorgのコンフィグが上手く設定出来ない。なんか5年以上前にFreeBSDでXFree86と格闘したのを思い出した。一週間位かかってXの立ち上げに成功した時の達成感。でも今はそれほど固執する理由もないので、てっとり早く同じXorgを使っているVine Linux 4.0のxorg.confを参考にすることにした。

ベースシステムを入れ終わったら、とにかくまずvimをインストールして(nanoはめちゃ使いづらい)、sshを有効にしちゃえば、X-Windowが動いているUNIXマシン、若しくはWindows上でPuttyやTeraTermPro辺りから設定すれば、コピペも出来るからかなり作業効率が上がる筈だ。急がば回れとはこのことだなと思ったり。

という訳で自分の為に、Vine Linux 4.0(by ThinkPad X31)のxorg.confをテキストファイルで上げておく。xorg.conf.txtをダウンロード



投稿者 sasapurin : 23:50 | コメント (0) | トラックバック

2007年02月13日

Vine Linux 3.2で快適な日本語入力を

このブログは、いちおう自宅サーバーのことについて書いているのだが、検証用にX-Windowも入れたVine Linux 3.2 環境を使っていると、Webブラウザが使用できて結構便利だったりして、そのままブログを編集できて更に快適だったりする。しかし、cannaとkinput2による日本語入力の効率の悪さ に嫌気がさしてきた。

そこで、Vine Linux 4.0 から採用された、anthyを使えないものかとaptリポジトリを検索してみたところ、scim-anthyがあるではないか。という訳でサーバー用途で もX-Windowを必要とする人が居るかもしれないと言う理由付けで、scim -anthyを入れてみることにした。なお、scim-anthyは、PC-BSDで使用していたので快適さは体験済みなので、インストール成功すれば日本語入力がかなり改善されるハズである。

まず念のために、apt-cacheして本当にあるか確認してみる。

#  apt-cache search anthy
anthy - Anthy - 日本語入力システムおよび辞書
anthy-devel - libanthy を使ったアプリケーションを開発するためのファイル
anthy-el - Emacs-lisp frontend for Anthy
jmode - X Input Method Server for Japanese conversion system of Anthy
scim-anthy - anthy のための SCIM IMEngine モジュール
sumika - a utility for managing user customized dictionary
kasumi - Anthy 個人辞書管理ツール

 

aptは依存関係を自動で処理してくれるので、目的のパッケージをインストールすれば、依存パッケージは気にしなくてよいのが楽だ。下記のようにインストールしてみる。

apt-get install scim-anthy
apt-get install kasumi

確か、Vineではsetimeがscimに対応したらしいので、下記のようにしてIMEを切替えてみる。

setime scim

おそらく右下に、SCIMのツールバーが表示されると思う。
これでATOKに匹敵する、とまでは言えないものの、かなり快適な日本語入力が可能となる。

ちなみにSCIMのON/OFFは、[SHIFT]+[SPACE]もしくは、[半角/全角]キーだ。この辺りもカスタマイズできたと思うので、戯れてみ ようと思う人は試してみてほしい。画期的な発見があったら是非篭コメントで教えていただきたい。私は使い慣れたATOK風にカスタマイズしてみようかなと 思ったりしている。

ちょっとBlogの趣旨とは逸れたが、日本語入力の快適さを求めるのは当然なので御了承頂きたい。



投稿者 sasapurin : 19:00 | コメント (0) | トラックバック

2005年11月22日

Vine Linux について

Vine Linux は、日本人の手によって開発&メンテナンスが行われている、ありがたいLinuxディストリビューションです。一番の特徴はドキュメント類の多くが日本語に翻訳(もしくは最初から日本語)されていることでしょう。デスクトップ用途としてインストールすれば、直ぐに日本語で表示されますし、日本語を入力する事ももちろん出来ます。

また、発足当初にRedhat Linux をベースに独自の改良が加えられてきた事から、今のバージョン(3.2)でもRedhat系のコマンドやしきたりが使えます。つまり日本国内の商用LinuxディストリビューションとしてシェアNo.1のRedhatを使える人なら、違和感無く使用出来るのもメリットです。

まだメリットはあります。それはOSのインストーラがCD-ROM一枚に収まっていることです。現在のLinuxディストリビューションがどんどん肥大化して、CD-ROMの枚数が多くなって行くのに対し、Vine Linux は、頑なにCD-ROM一枚でインストール出来る事をモットーとしている様です。
なお、CD-ROMに入っていないプログラムパッケージは、後述のAPTコマンドを使ってネットワーク(インターネット)から自動的にダウンロード&インストール出来ます。

まだあります。パッケージ管理ツールとして、Redhatで使用しているRPMを基本としながら、Debian GNU/Linux で使用しているAPTコマンドを実装している点です。これは現在の本家Redhatでは行っていない拡張なのですが、APTコマンドがいかに優れているかは説明が難しいので、是非体験して頂きたいですね。これがあるから私はVine Linux を愛用していると言っても過言ではありません。(APTはDebianが本家なので、Debianでも良いのですが、カスタマイズ性が高いが故、設定に手間暇がかかるのです。故にVine Linuxの様な手軽さは劣ります。)



投稿者 sasapurin : 00:12 | コメント (0) | トラックバック