Capture - power save

Why?

キャプチャカード(ドライバ)や出来の悪いサウンドカード(ドラ イバ)のせいで,サスペンドやハイバネーションに失敗する確率が そこそこあるような場合,節電するためには電源を on/off するし かないから:)

Windows マシンの電源を落とすには?

Windows からであれば,shutdown コマンドを使えばいいのは皆さんご存じの通り。

asna:~> shutdown
使用法: c:\WINDOWS\system32\shutdown.exe [-i | -l | -s | -r | -a] [-f] [-m \\コ
ンピュータ名] [-t xx] [-c "コメント"] [-d up:xx:yy]
(中略)
        -s                      コンピュータをシャットダウンします
        -r                      コンピュータをシャットダウンして再起動します
        -a                      システム シャットダウンを中止します
        -m \\コンピュータ名     シャットダウン/再起動/中止するリモート コン
                                ピュータの名前です
(後略)

ここで注目すべきは "-m" オプション。これを使うと,Microsoft RPC 経由で別のマシンの電源を落とすことが できます(ターゲットPCのユーザ名とパスワードが必要ですが)。

samba に入っている "rpcclient" を使うと,Microsoft RPC コマンドを手軽に発行できるのがポイント。

nana:~> rpcclient -U username%password -N -W workgroup -c 'shutdown' windows_pc_name

コマンドラインに password を書くのはプロセス一覧に見えてよろしくないので,

password = (password)

という中身のファイルを作った上で(もちろん permission に気をつけて)

nana:~> rpcclient -A auth.filename -U username -N -W workgroup -c 'shutdown' windows_pc_name

とするのが正統。

電源を遠隔で on するには?

あくまで「遠隔」が目的なので,ここでは ACPI には頼らないことにします。サスペンドやレジュームからの 復帰ではないので,時限設定が可能か不明ですし。

BIOS にある RTC Alarm 起動タイマは PS/2 由来のものらしいのですが,BIOS 画面以外で設定する方法が(BIOS 依存 の nvram 書き換え以外に)ないようなので使用は断念します。

ここでは,Windows マシンに限定されない汎用的な方法である WoL(Wake on LAN)を使用します。 あらかじめ,BIOS 等で Wake on LAN を使えるように設定しておく必要があります。

Wake on LAN は「マジック・パケット」と呼ばれるパケットが飛んでくると,NIC のコントローラが認識して マザーに通知する仕掛けになっています。

FF FF FF FF FF FF 00 10 DC 50 8A F4 00 10 DC 50
8A F4 00 10 DC 50 8A F4 00 10 DC 50 8A F4 00 10
DC 50 8A F4 00 10 DC 50 8A F4 00 10 DC 50 8A F4
00 10 DC 50 8A F4 00 10 DC 50 8A F4 00 10 DC 50
8A F4 00 10 DC 50 8A F4 00 10 DC 50 8A F4 00 10
DC 50 8A F4 00 10 DC 50 8A F4 00 10 DC 50 8A F4
00 10 DC 50 8A F4

FFを6バイト前置したあとに WoL で叩き起こす NIC の MAC アドレスを16回並べます。このような 内容を「含む」Ethernet パケットを送りつければ OK です。

「含む」というのがポイントで,UDP を使って broadcast すれば済むようです。Ethernet の生パケットを 送るのは大変なので……。

プログラム自体はたいしたことないので,へろへろと書けば終わりです。ソースはこんな感じ

拾わなくても Magic Packet を送るプログラムはたくさん転がっていますが,残念ながら手元の環境でうまく 動作しませんでした(255.255.255.255 宛に broadcast するプログラムが多いようですが,NIC 2枚差し環境では うまく動作しないのかもしれない)。

運悪く通信経路で collision 等が発生し Magic Packet が失われると,WoL が作動しないわけですが …… 到着を保証する 手段はなさそうなのであきらめましょう。



← 上階層へ




misora@hpot.r-x.jp Copyright © 1999-2003 by T.Tsujikawa / All rights reserved.