2016年6月7日火曜日

WoLでWindows機の遠隔起動

さて、前回(前回は閑話休題なので、前々回か)の予告通り、Wake on LAN(Wake On LANって書いてたけど、どうやら On は小文字の on が正解っぽい)でWindows機の電源を入れられるようにしよう。

とは言え、WoLを使えるようにするには、WoLを受ける側(Windows機)の方の設定も必要だ。
BIOS/uEFI及びOS側で設定を施す必要が有るらしい。この辺りは、機種、OSによって異なるし、機種によっては対応していないものもある。
なので、各自調べてみて欲しい。
基本的には、BIOSメニューに「Wake on LANの項目があるか?」と「OSから見たNetwork Interface Card(NIC)のプロパティに、Wake on LAN(モノに寄ってはWake On Magic Packet)の項目があるか?」辺りがポイントだ。
軽くググッたら、このページが見つかった。これを参考にWindows機を設定すればいいだろう。
http://www.atmarkit.co.jp/ait/articles/0602/25/news014.html

設定が終わったら、合わせてWindows機のMACアドレスを確認しておこう。
コマンドプロンプトからipconfig /allで確認可能だ。
A1-B2-C3-D4-E5-F6
という形式で確認出来ると思う。ただ、ハイフン区切りではなく、:区切りを利用することが多いので、:区切りでメモしておこう。
A1:B2:C3:D4:E5:F6

Windows機側の設定が終わったら、起動を仕掛けるUbuntu Linux側の設定だ。
WoLは、呼び出し元が特殊なパケットを流し、起動する側が(OSが眠っているにも関わらず)そのパケットを受け取って「お、呼ばれた!」って起動し始めるという流れ。
今回の構成の場合、呼び出し元がUbuntu Linuxで、起動する側がWindows機になる。

その呼び出し元であるUbuntu Linuxが、特殊なパケットを投げられるようになっている必要が有る。

で、調べてみたらそういうことが可能なパッケージが複数種類存在するようだ。
  • powerwake
  • etherwake
  • wakeonlan
  • gwakeonlan
それぞれ得手不得手があると思うんだけど良く分からない。
ただ、コマンドバージョンがwakeonlan、GUIバージョンがgwakeonlanという風に、CUI/GUI両方あるうちのコマンドバージョンwakeonlanを使いたいと思う。

さっそくインストールしよう。
$ dpkg-query -l wakeonlan
(まだインストールされていないはず)
$ sudo apt-get update
$ sudo apt-get --simulate install wakeonlan
$ sudo apt-get install wakeonlan
$ dpkg-query -l wakeonlan
(インストールされた)

さっそく使ってみよう。
の前に、対象のWindows機をスリープにしておこう。(休止状態やシャットダウン状態でも可能だと思うが、スリープからの起動が一番確実なので、まずはスリープから。)

そうしたら、Ubuntu Linuxから以下のように実行してみる。
wakeonlan 対象のWindows機のMACアドレス
具体的には以下だ
$ wakeonlan A1:B2:C3:D4:E5:F6
どうだろう?無事にWindows機は立ち上がってきただろうか?

無事に立ち上がってきたら成功だ。

一応、wakeonlanコマンドは他のパターンもある。

例えば、一度に複数のPCにWoLパケットを投げることが出来る。

この場合、単純にMACアドレスを複数並べるだけだ。
$ wakeonlan A1:B2:C3:D4:E5:F6 A6:B5:C4:D3:E2:F1

呼び出し元(今回のUbuntu Linux)が複数のNICを持っていて、起動したい対象がつながっている方にだけMagic Packetを投げたい場合。

wakeonlan -i (投げたい方のBroad Cast Address) 対象のMACアドレス
具体的には以下の通り
$ wakeonlan -i 192.168.0.255 A1:B2:C3:D4:E5:F6

また、MACアドレスを覚えるのでも大変なのに、どの機器のMACアドレスか?を覚えるのも大変だ。
そのため、ファイルに記載しておいて、そのファイルを読み出すオプションもある。
ファイルの書き方は、wakeonlanをインストールした時に一緒に導入されるサンプルファイルを見るとすぐ分かるはずだ。
サンプルファイルの場所:/usr/share/doc/wakeonlan/examples/lab001.wol

私は、Ubuntu Linux上のホームディレクトリに wol というディレクトリを作成し、そこに「起動したい機器のホスト名」のファイルを作成、そのファイルの中にMACアドレスを記載する形にしている。
#要するに、wakeonlan対象機器が増えれば、その分 wol/* が増える、ということだ。

で、そのファイルの指定方法が以下の通り
wakeonlan -f (ファイル名)
具体的には以下
$ wakeonlan -f wol/filename

これで、Wake on LANでWindows機を起動することが出来るようになった。

あと、休止状態とシャットダウン状態のどちらからでも起動出来るかも確認しておこう。
一応、私の環境では

  • スリープからの復帰:OK
  • 休止状態からの復帰:OK
  • シャットダウンからの復帰:NG

だった。Windows機の設定ミスか、ハードウェア的に実施NGなのか…。
とりあえず、シャットダウンしなければいいので、当面はそっちで逃げる。
どうせ古いPCなので、近いうちに作りなおす予定だからね。

あー、ちなみに起動する対象をWindows機に絞った表現だったけど、別にWindows機に限ったことじゃないから…。

2016/06/07追記
シャットダウン状態からのWoLが出来なかったのは、NICの設定漏れだった。
OS(Windows7)からNICのプロパティで、「シャットダウンからの云々」とかいうパラメータを「オン」にすることで、シャットダウンからのWoL起動も出来るようになった。

0 件のコメント:

コメントを投稿