2015年7月5日日曜日

Wake On Demandの落とし穴(?)

今更ながらだが、Mac OS X Snow Leopard(10.6.x)以降、MacにはWake On Demandという機能が備わっている。
これは、LAN内にあるMacは、スリープ中でもFinderのサイドバーの共有項目に表示され、それをクリックするだけでスリープを解除、中身にアクセスできるという優れものだが、一つ落とし穴(?)がある。
それは、Macの他にAirMac ベースステーションなどのApple製Wi-Fiルーターをセットで使う必要があるということだ。先の記事を注意深く読むと、Bonjour Sleep Proxy という分かりにくい用語で説明されていることに気付く人もいるかも知れない。

筆者はこのことに気づかず、他社製Wi-Fiルータを購入してしまった。Macは2台持っているが、同じ部屋に置いてあるのでWake On Demandの必要性はない。(と、意地を張ってみるが、実はこのエントリを書くまでWake On Demandを知らなかった)

AirMac ベースステーションがなければ、Appleの言う所のWake On Demandは不可能だ。だが、似たようなことは可能だ。それはWake On Lanである。(参考までにWake On Demandという用語はApple語で、一般的にはWake On Lanと言う)
Wake On LanとはLAN内に接続された機器に対してマジックパケットという信号を送って機器を起動(Macはできない)したりスリープ解除することを言う。(詳しい情報

以下では、擬似的なWake On Demand(Wake On Lan)を実現する方法を説明する。

  1. wolコマンド

    wolコマンド(マジックパケットを発行するコマンド)はソースコード付きでこちらから入手できる。

    圧縮ファイルを解凍し、中のwolというファイルをインストールする。(ターミナルで以下のコマンドを実行する)

    sudo cp wol /usr/local/bin
    
  2. AppleScript

    AppleScriptを用意しなくてもwolコマンドを直接起動すれば目的は果たせる。AppleScriptは筆者のようなモノグサ人間向けである。

    --接続するMACアドレスの設定
    set myMACAddr to "00:11:22:33:44:55" -- スリープ解除するMacのAirMacカードのMACアドレス
    
    --エラーフラグの初期化
    set errFlag to false
    
    --Wake On Lanコマンドの存在チェック
    try
        do shell script "test -f usr/local/bin/wol"
    on error
        
        say "WOLコマンドがありません"
        set errFlag to true
        
    end try
    
    if not errFlag then
        do shell script "usr/local/bin/wol " & myMACAddr
    end if
    

    スリープ解除するMacのAirMacカードのMACアドレスは、Appleメニュー > このMacについて > システムレポート... > Wi-Fi > インターフェイス:で調べることができる。

    このAppleScriptを実行すればMACアドレスを登録したMacのスリープ解除ができる。スクリプトメニューに登録して使うとさらに便利かも知れない。

なお、このWake On Lanは、Wake On Demand同様、省エネルギー環境設定パネルでWi-FI ネットワークアクセスによるスリープ解除がチェックされている必要がある。(デフォルトではチェックされている)

Wi-Fi アクセスによるスリープ解除受け入れ
Wi-Fi アクセスによるスリープ解除受け入れ

Wi-FI ネットワークアクセスによるスリープ解除はWake On Demandと連動しており、2時間に1回程度の間隔でMacのスリープが解除される。この時Macは自分がWake On Demandに対応できるよという信号を送った後、再びスリープする。
Wake On Demandを含めて、いわゆるオンデマンドな利便性を求める場合、定期的なMacの目覚めというゾンビ現象(?)がセットになっていることは覚えておく必要がある。

0 件のコメント :

コメントを投稿