隣の部屋にあるマシンの電源を入れたいときに、わざわざ隣の部屋に移動して電源ボタンを押すというのは面倒です。そんなときには、ネットワーク経由で電源を入れられるWake-on-LANを使うと便利です。今回はWake-on-LANを便利に使うためのPowerWakeとgWakeOnLanというツールを紹介します。
Wake-on-LANに必要な条件
Wake-on-LANを使って電源を入れるには次の条件が必要です。
- Wake-on-LANに対応したハードウェアである
- BIOSでWake-on-LANが有効になっている
- OSでWake-on-LANが有効になっている
- 電源を入れたいマシンのMACアドレスがわかっている
まず、1つ目の条件に関しては、対応していないということはまずないでしょう。LANケーブルを接続するだけで準備完了です。
次に2つ目ですが、gWakeOnLanのWikiページに掲載されているようにBIOSで設定を変更します。
3つ目の条件を満たしているかを確認するにはethtoolを使います。まずは次のコマンドでインストールします。
$ sudo apt-get install ethtool
続いて、次のように実行してWake-on-LANに関する情報を取得します。情報の取得対象は通常eth0ですが、環境に合わせて変更してください。
$ sudo ethtool eth0 | grep Wake-on
すると、次のように表示されます。
Supports Wake-on: pg
Wake-on: d
ここで"Wake-on: g"となっている場合は有効になっているので問題ありません。しかしこの結果のように"Wake-on: d"となっている場合にはdisable(無効)となっています。この場合には毎回起動時にOSからWake-on-LANを有効にするために次のコマンドを実行する必要があります。
$ sudo ethtool -s eth0 wol g
この操作をUpstartスクリプトを使って自動でやってくれるpowernapというパッケージがあります。本来PowerNapは特定のプロセスを監視し、プロセスが実行されていない時に自動で省電力モードに移行させるためのものですが、インストール直後は"/sbin/init"という常に動き続けているプロセスだけを監視する設定になっているため、Wake-on-LANを有効にするためだけのツールとして使えます。
次のようにしてpowernapパッケージをインストールしておくだけで、次回起動時からはWake-on-LANが有効になります。
$ sudo apt-get install powernap
Wake-on-LANで起こしたい対象のマシンがWindowsの場合には、先ほども紹介したgWakeOnLanのWikiページの指示にしたがって設定を変更しておきます。
4つ目の条件に関して、Wake-on-LANはマジックパケットと呼ばれるMACアドレスが含まれたパケットが使われるため対象マシンのMACアドレスを知っていることが不可欠です。
MACアドレスはNetwork Managerのアプレットを右クリックして「接続情報」を選択した場合(図1)や"ifconfig"コマンドを実行した場合に表示される"00:11:22:33:44:55"といった形式のハードウェア固有のアドレスです。
図1 MACアドレスはNetwork Managerやifconfigコマンドで確認できる
複数のマシンがある場合、MACアドレスだけで管理するとどのMACアドレスがどのマシンに対応するのか、わかりにくくなってしまいます。そこで直接MACアドレスで管理するのではなく、IPアドレスやホスト名と対応させて抽象的に管理すると便利です。
PowerWake
PowerWakeは、コマンドラインから実行するWake-on-LANツールです。次のコマンドでインストールします。
$ sudo apt-get install powerwake
Wake-on-LANを実行するには次のようにMACアドレス、IPアドレス、ホスト名を指定します(どれか1つでかまいません)。
$ powerwake 00:11:22:33:44:55
$ powerwake 192.168.100.1
$ powerwake machine-1.local
ただし、IPアドレスやホスト名といった情報を使う場合にはARP tableに情報が存在していなければなりません。Ubuntu Desktopなどavahi-daemonを使っている環境では電源が入っている場合にARP tableにMACアドレス、IPアドレス、ホスト名が含まれたエントリが表示されるので、IPアドレスやホスト名といった情報で、電源が入っているマシンにマジックパケットを送信できます。しかし、電源が入っていないマシンを起こしたいのであって、電源が入っていなければIPアドレスやホスト名といった情報が使えないのはちっとも便利ではありません。
そこでまずは対象となるマシンすべての電源を入れておき、一度"powerwake machine-1.local"などと実行して、その時点のARP tableの情報を"/var/cache/powerwake/ethers"にキャッシュさせます。次回からはARP tableに情報がなくても(つまり対象マシンの電源が入っていなくても)、IPアドレスやホスト名で電源を入れられるという望んでいた状態になります。
"/etc/ethers", "~/.cache/ethers"といったファイルに次のようなスペース区切りの形式でMACアドレスとIPアドレス、ホスト名の対応表を書いておくこともできます。
00:11:22:33:44:55 192.168.100.1
00:11:22:33:44:55 machine-1.local
powerwakeは一度に複数のマシンにWake-on-LANを実行できます。次のようにスペースで区切って列挙していくだけです。
$ powerwake machine-1.local machine-2.local machine-3.local
ということは次のように実行すると、100台のマシンでも一度に起動できます[1]。
$ powerwake 192.168.100.{1..100}
$ powerwake machine-{1..100}.local
余談ですが、powerwakeコマンドを実行するときにIPアドレスやホスト名の入力にbashの補完機能が使えたら便利だと思い、要望を出したら取り込まれました。Maverickのパッケージでは使えるようになっていますが、Lucid(10.10)でも次のコマンドでbash補完用のファイルを取得して配置すると使えるようになります。
$ wget http://bazaar.launchpad.net/%7Ekirkland/powernap/trunk/download/head%3A/powerwake_completion-20100331202543-zsowjs31g6i7z87g-1/powerwake_completion -O- | sudo tee /etc/bash_completion.d/powerwake_completion
$ source ~/.bashrc
gWakeOnLan
gWakeOnLanはGUIからWake-on-LAN操作ができるツールです。Ubuntuのリポジトリに含まれているバージョンでは、手動でMACアドレスを入力しなければなりませんが、Google Code上の開発ページで公開されている0.5では、ネットワーク上のマシンを探索するため、IPアドレスを選択するだけでMACアドレスを登録できるようになっています(図2)。
図2 ネットワーク上のマシンの検知機能によって、MACアドレスを手動で入力する必要がない
gWakeOnLanを起動したら、起動させたいマシンのエントリにチェックを入れて、実行ボタンを押すとマジックパケットが送信されます。チェックを複数入れることで、複数のマシンを同時に起動できます。