Wake On LAN (WOL) を使ってmacOSの電源を入れる

電源を落としたmacOSコンピュータをWake On LAN (Ethernet経由) で起動するよう設定しました。本物のMacだと電源を落とした状態からのWOLは不可能らしいです。条件はありますが、hackintoshならば電源off状態からのWOLが可能です。

Wake On LAN機能

Wake On LAN (WOL) は、スリープ状態や電源offのコンピュータを、ネットワークからのコマンドで起動させる機能です。WOL設定されたマシンのMACアドレス宛に、マジックパケットというデータを送りつけることで、目覚めさせます。WinowsをインストールしたHP EliteDesk 800 G2 DMでは、電源offからのWOLが動きました。でも実機のMacでは、検索した限りでは、電源offからのWOLは不可能なようです。

WOLの設定は、どのコンピュータでも結構、困難を伴うようです。色々な要素が絡んでいて、不安定なことも多いようです。Hackintosh関係のサイトでも、WOLの設定が時々話題になりますが、大変そうでした。WOLが必要な状況にあるなら、常時電源onにしたサーバとして動かしておけば良いのにと思ってましたので、あまり興味はありませんでした。でも、手を出してみたら、停止していたコンピュータをネットワークから起動させる事が純粋に面白かったです。何かの目的のためにWOLするのではなく、人はWOLしたいからWOLしているのだと感じました。また、実機のMacでは出来ないことを達成するという要素も、hackintoshの醍醐味です。

WOLには以下のような要素が関係するようです。このうち一つでも不完全だとWOLしません。またOSやドライバーのバージョンが変わると動かないこともあるようです。前回紹介したWindowsの場合でも設定は面倒でした。

  • BIOSでの設定:電源off時にもEthernetポートに通電するよう設定。
  • OSでの設定:macOSではシステム環境設定でWOLを有効にする。
  • ネットワークドライバ:WOLをサポートしたkextを使う。
  • NIC:WOLをサポートしたLANアダプタが必要。

後半の2条件:ネットワークドライバとNICに関しては、相性の問題かもしれないです。同じチップを使ったアダプターカードでも、WOLが効く・効かないものがあるようです。またこれ以外にも、OSのバージョンが変わるなどの状況で、WOLが動かなくなったりします。WOLが動く条件が満たされると、電源がoffでもEthernetコネクタのLEDが点灯するようになります。Hubの接続モニターLEDも点灯します。LEDが点灯しない状態では、NICへの電源が遮断されているので、WOLは無理なようです。電源off状態のLEDを観察すれば、WOLできるかどうかがある程度判定できます。

ASUS Z390 + Big SurでAOL

今回設定したマシン構成は、ASUS ROG MAXIMUS XI HERO Z390 + OpenCore 0.6.4 + Big Sur 11.1です。WOLに使用したのは、このマザーボードに搭載されているIntel I2190-VギガビットLANです。

BIOS設定

BIOSのAdvanced –> APM ConfigurationからPower On By PCI-EをEnabledに設定します。デフォルトはDisabledです。下の欄に、「オンボードLANコントローラやPCIeスロット上LANカードのwake-on-LAN機能を有効・無効にします」という説明が出てます。オンボードチップの場合も、PICeスロット搭載カードの場合も、この項目でWOL設定できるようです。

macOSの設定

システム環境設定の省エネルギーで「ネットワークアクセスによるスリープ解除」にチェックを入れます。これはデフォルト設定です。実際のMacでは、この設定によりスリープからのWOLが可能になります。でも、電源offの場合はWOLしません。

WOL対応kextを使う

以上のBIOSとmacOSの設定を行っても、当初はWOLが効きませんでした。BIOSで設定した直後に、電源を落とすと、WOLが効きます。でも一度でもmacOSを起動すると、それ以降、WOLが効かなくなりました。macOSの動作で、WOLが無効化されているような振る舞いです。ということで、macOSではWOLできないと書きましたが、その記事のコメントで、まっくぷろさんから、WOL対応しているらしいIntelMausiEthernet.kextバージョンを教えていただきました。このkextを使うことで、安定してWOLが動作するようになりました。

WOLするアプリケーション

WOL状態で待機しているコンピュータは、そのMACアドレス宛にマジックパケットを送ると起動します。マジックパケットを送るには、先の記事でも紹介した簡単なPyhthonプログラムでokです。

#!/usr/bin/python
import socket
s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.sendto('\xFF'*6+'\x99\xAA\xBB\xCC\xDD\xEE'*16, ('192.168.xxx.255', 7))

最後の行が、目覚めさせたいコンピュータのNIC情報です。\x99\xAA\xBB\xCC\xDD\xEEの部分がMACアドレスで、192.168.xxx.255がIPアドレスです。IPアドレスの最後が255なので、ブロードキャストします。

Homebrewで導入できるコマンドのwakeonlanをコメントで教えてもらいました。これをインストールすると以下のようにMACアドレスを指定してWOLできました。wakeonlanの中身はperlのスクリプトのようです。

wakeonlan 99:AA:BB:CC:DD:EE

App Storeには、GUIで機種を登録したり、MACアドレスを自動検出できる有料アプリ・広告付きアプリが多数あります。でも、遠隔地からWOLすることを目的と考えたら、シンプルなPythonプログラムで十分かと思いました。また、WOLのためのiPhoneアプリも多数あります。RemoteBoot WOLは、無料でユーザも多いようです。Windows用やAndroid用にももちろん多数のアプリがありますし、Amazonのデバイス用にもあるようです。記事冒頭のアイコンをお借りしたアプリは、FireTVなどで動くようです。

まとめ

ASUS Z390マザーボード搭載のInte I2190-V経由で、Big Surが動くコンピュータのWOLを試みました。電源offの状態から電源を入れられました。このために、BIOSを設定し、WOLに対応したIntelMausiEthernet.kextを使いました。これで外出先から電源を入れることもできそうです。

2件のコメント

  1. homebrewを使っているならば、ずばり”wakeonlan”というコマンドラインツールがインストールできます。
    内部的にperlを使っている少し古いアプリケーションですが、今でも使えます。

  2. 情報ありがとうございます。wakeonlanコマンドを試して、追記しました。

uehashu へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です