突然ですがBPS – バトルプログラマー シラセって観たことあります?
あるいは、パトレイバーの劇場版1作目。
この二つに共通するシーンなんですが、WANからLANのコンピュータの電源を入れるシーンがあります。
BPSは、1話で携帯電話(ガラケー)から自宅のPCを起動してますし、パトレイバーでは、シバシゲオ整備員の自宅(LAN)から特車二課のサーバー(別のLAN内)を起動させています。
で、今の技術なら上記のように「WANからLAN内のPCの電源をリモートで入れられるんじゃね?」と思ったのがきっかけで、色々調べ始めました。
なんでこんなことを思いついたかというと、私はIT技術勉強会に良く参加しているのですが、ノートPCのスペックが貧弱なので、VPN経由で自宅のマシンをリモートデスクトップで操作してるんですね。
で、とある勉強会の日の朝、デスクトップPCの電源を入れ忘れたことを定時前に気付いたのがきっかけです。
「リモートで電源入れられれば便利なのに。。。」と。
色々調べてみると、LANウェイクアップやMagicPacketという単語が出てきました。
前者はWindows系のサーバーの技術らしいのですが、MagicPacketの方はWindows2000の頃からある技術と判明。詳しいことは以下の記事から情報を得ました。
http://www.atmarkit.co.jp/ait/articles/0602/25/news014.html
簡単にまとめると、LANのマシン全体にブロードキャストで「お前(MACアドレス指定)、起動しろ!」というパケットを投げて、該当するマシンが返事の代わりに電源をONにするという技術です。
記事上では、OS、NIC、BIOSが対応している必要があると書かれていますが、今回は電源をS5(完全OFF)→S0(完全ON)にするので、NICとBIOSが対応している必要があります。
上記の記事に自分のマシンが対応しているか調べる方法が載っていますので、興味のある方は調べてみてください。
NICはWindows上のデバイスマネージャから確認できますし、BIOSはOSが立ち上がる前にDELキーなどを押下※していればBIOSメニューが開けます。
※押下するキーはPCのメーカー、機種で異なるので注意してください
幸い、私のメインPC(Mk-Ⅱ)はNIC、BIOS共に対応しているので、記事にあるWOLControllerを使って起動させてみました。(同一LAN上)
すると起動するではありませんか!(調べていたので分かっていましたが。。。)
で、考えたのですが、私の自宅にはサーバーがあります。
こいつは、WANとLANの境目(DMZ)に配置しているので、うまく使えば中継役を担えます。
構想を簡単に図にしてみました。
サーバーを中継役として、WANからはPHPが受け口となって、サーバー内部で実行形式ファイルを実行→MagicPacketをLAN内に送出するという仕組みです。
この構想を立てるまで約30分、そしてPHPとEXE(Linuxで実行形式ファイルをなんて呼ぶのか知らないのでEXEと呼びます)を作るのに2時間弱。
できました。
PHPファイルのURLは公開できませんが、スマホやガラケーなどの3G回線からLAN内のデスクトップPCを起動することができました!
これで起動し忘れも防止できますし、朝から定時までのPCのアイドル運転もしなくて済みます。
シャットダウンはどうするかというと、リモート操作でOS上で落とします。Windows系の場合は、以下のバッチファイルを作成しておくと便利です。
リモート操作の場合、シャットダウンという項目が無くなっているので。
shutdown -s -t 0
需要があるか分かりませんが、今回作成したMagicPacket送出の仕組み(PHPとLinux実行形式ファイル)はzipで固めて公開します。
たぶん、ブログ上部のバーに「Download」などといった項目を追加するので、興味のある方はのぞいてみてください。
どこかのメーカーでエアコンがスマホから制御できるという機能があったかと思いますが、電源ON/OFFがあれば、MagicPacketが使われているかもしれませんね。
個人でもサーバーを持つ時代ですから、MagcPacketが家電にも対応されれば、スマホから電源制御が可能になって面白いと思うのですが。。。
この機能の実現によって、もう一つメリットが得られました。
それは、PT2の起動&外部からの予約です。
私のメインPCにはPT2というTVチューナーが付いており、TvRockというソフトを使うことで外部から予約することができます。
メインPCはサーバーではないので、通常は電源OFFです。
そこで今回作成したMagicPacketでPCを起動→メインPCの予約機能に端末からアクセス→予約という流れができるようになりました。
まだTvRockは未導入ですが、また一つPT2の有用性が増しました。
【追記:2013/07/27】
Download用ファイルの準備が整ったので、Downloadページを公開しました。
以下のURLになります。
http://sivaexstrage.orz.hm/blog/?page_id=758
【追記:2013/07/27 16:35】
もちょい氏からの希望もありましたので、ソースコードもzipに同梱しました。
大したことはしていませんが、こちらは自由に改変していただいて構いません。
WakeOnLanって結構枯れた技術だと思うけど、意外にも知らなかったのね。
PHP+EXEの公開を楽しみにしてます^^
Cの部分は当然ソースも公開だよね??w
確かに枯れた技術だと思うけど、少し前に法律が対応していないことで話題になったエアコンの電源ON/OFFのAndroidアプリとかこの辺の技術を使ってるんじゃないかな?と思いながら楽しんで調べられました。
PHP+EXEは先ほど公開しました。
C部分は大したことしてないから公開するつもりはなかったけど、公開しちゃいますかw
ソースコードもzipに同梱する形で公開しました。
大したことしてないけど、興味があれば覗いてみてください。