色々調べたのですが、OSX 10.10 のあたりからWOL を使ってのスリープ解除ができなくなっています(設定できなくなった)。代わりにWake OnDemmand という機能になっています。これは”ネットワークアクセスによりスリープを解除する”というチェックを"システム環境設定/省エネルギー"において入れる事で機能します。この機能は電源アダプタ装着時のみ動作します。この記述は、MacBook Pro 15(Retina)、MacOS 10.14で検証しました。
ところがWake OnDemmandを機能させていると、スリープさせてもすぐにスリープが解除されてしまいます。Wake OnDemmandを機能させないと、スリープは継続しますが、外部のネットワークからWOL によるスリープが解除できなくなってしまいます。
色々調べていくと、Bonjour 機能が働くとスリープが解除されることが分かりました。ところがBonjour を切ってしまうと、MacOSはまともに動かなくなってしまいます。
ならばスリープに入る時にBonjour を止め、スリープから目覚める時にBonjour を起動させればよいと考えました。これは力技で、スリープ中にネットワークがらみのアプリを動かしたい時はこのやり方は使えません。ちなみにBonjour のプロセス名は mDNSResponder です。
スリープに入る、スリープが解除される時に何かをさせるにはsleepwatcher を使います。sleepwatcher はbrew でインストールできます。
インストール後、以下のコマンドを入れます。
$ cp /usr/local/opt/sleepwatcher/homebrew.mxcl.sleepwatcher.plist ~/Library/LaunchAgents/
これでログイン時にsleepwatcher が起動されます。
スリープに入る時の動作を ~/.sleep に、解除された時の動作を ~/.wakeup に書きます。
.sleep の"sleep 2" とpowerd の強制終了は要らないかもしれません。当方ではpowerd をkill しないとスリープできませんでした。
~/.sleep
echo パスワード | sudo -S launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSresponder.plist > /dev/null 2>&1
sleep 2
echo パスワード | sudo -S killall powerd > /dev/null 2>&1
~/.wakeup
echo パスワード | sudo -S launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSresponder.plist > /dev/null 2>&1
以上です。
ところがWake OnDemmandを機能させていると、スリープさせてもすぐにスリープが解除されてしまいます。Wake OnDemmandを機能させないと、スリープは継続しますが、外部のネットワークからWOL によるスリープが解除できなくなってしまいます。
色々調べていくと、Bonjour 機能が働くとスリープが解除されることが分かりました。ところがBonjour を切ってしまうと、MacOSはまともに動かなくなってしまいます。
ならばスリープに入る時にBonjour を止め、スリープから目覚める時にBonjour を起動させればよいと考えました。これは力技で、スリープ中にネットワークがらみのアプリを動かしたい時はこのやり方は使えません。ちなみにBonjour のプロセス名は mDNSResponder です。
スリープに入る、スリープが解除される時に何かをさせるにはsleepwatcher を使います。sleepwatcher はbrew でインストールできます。
インストール後、以下のコマンドを入れます。
$ cp /usr/local/opt/sleepwatcher/homebrew.mxcl.sleepwatcher.plist ~/Library/LaunchAgents/
これでログイン時にsleepwatcher が起動されます。
スリープに入る時の動作を ~/.sleep に、解除された時の動作を ~/.wakeup に書きます。
.sleep の"sleep 2" とpowerd の強制終了は要らないかもしれません。当方ではpowerd をkill しないとスリープできませんでした。
~/.sleep
echo パスワード | sudo -S launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSresponder.plist > /dev/null 2>&1
sleep 2
echo パスワード | sudo -S killall powerd > /dev/null 2>&1
~/.wakeup
echo パスワード | sudo -S launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSresponder.plist > /dev/null 2>&1
以上です。