在宅勤務や遠隔地のサポートで、PCの電源をオンにしたいことがあるのではないだろうか。そのような場合、Wake On Lan(WoL)機能を利用するとよい。ただし、WoLを利用するには事前の準備が必要になる。WoLの仕組みと設定方法などを解説する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
在宅勤務やリモートワーク、遠隔地のサポートなどで、手元にないPCを利用することが増えてきている。その際に問題になるのが、PCの電源をオンにする方法だ。例えば、再起動を行うつもりが誤ってシャットダウンなどを実行してしまったPCなど、意図せず電源をオフにしてしまい困ることがある。こうしたPCの電源をオンにするためだけに、社屋まで出掛けるのは効率がよくない。リモートで電源を投入できれば便利だ。
そこで利用できるのが、停止しているPCをネットワーク経由で起動できる「Wake On LAN(WoL)」と呼ばれる機能だ。本稿ではWindows 10を対象として、このWake On LANの仕様や仕組み、問題点、PCの対応/非対応の判別方法、事前のセットアップ手順、起動方法などについて一通り解説する。
「Wake On LAN」とは、「マジックパケット」と呼ばれるネットワークパケットを送信することで、PCをスリープ状態から「復帰(Wake)」させる機能だ。本記事では、マジックパケットを使って有線LAN/無線LANからPCを復帰させる機能をまとめて「WoL」と表記する。
このWoL機能には若干の混乱が見られる。一般に「Wake On LAN」と呼ばれている機能には、大きく「ハードウェアWoL」と「ソフトウェアWoL」の2種類があり、それぞれで設定方法や使い方が異なることだ。この2つが混乱していることが、分かりにくさの原因となっている。
方式 | ソフトウェアWoL | ハードウェアWoL |
---|---|---|
スリープ(S3)から復帰 | ○ | × |
休止状態(S4)から復帰 | ○ | × |
ハイブリッドシャットダウン(S4)から復帰 | × | × |
クラシックシャットダウン(S5)から復帰 | × | ○ |
対象ネットワークアダプター | 内蔵/外付け | 内蔵のみ |
概要 | Windows 10が制御するWoL | ハードウェア機能として実装されるWoL |
ソフトウェアWoLとハードウェアWoLの違い |
もともとWoLは、企業などで大量導入したPCをリモート管理するための機能(休日中に一斉メンテナンスなどを行うためにPCを起動させる)だった。しかし現在では、企業向けにリモートからの管理機能の提供が可能な技術「Intel vPro」がIntelによって推進されており、その中にネットワーク経由でPCを復帰させる機能がある。ただ、これはWoLとは全く違う実装になっている。
こうした背景もあり、以前に比べるとWoLの必要性はそれほど高くない。そのためか、最近ではWoLへの対応がないPCも少なくない半面、WoL対応/非対応の判定が難しく、そもそも動作しないハードウェアに対して、設定のアドバイスが行われてしまうといったこともあるようだ。
さらにWoLは、ネットワークコントローラーチップ、マザーボード設計、デバイスドライバ、ファームウェアと多数のコンポーネントが関わり、機種固有やデバイス固有の設定名称が使われる。
例えば、UEFIのWoL関連の設定はメーカー機種ごとに異なる。また、Windows OSのデバイスドライバの「詳細設定」も、デバイスごとに定義されるものであるため、WoL関連の設定項目の名称が異なっていたり、そもそもWindows OS側では設定ができなかったり、といったことがある。
メーカーによっては、自社PC用のデバイスドライバを独自に用意していることもあり、同一のデバイスが使われているからといって同じデバイスドライバが適用されているとは限らない。このため、同一メーカーの異なる機種、同一モデルの型番違い、といったよく似たPC同士であっても、同じ設定が通用するとは限らない。これに、ファームウェアのバージョンやデバイスドライバのバージョン、そしてWindows OSのバージョンが関わると組み合わせが増えてしまう。
また、無線LAN経由での「Wake On WLAN」という同様の機能もある。こちらは、ハードウェア実装が有線LANよりも難しいため、さらに対応機種が限られてくる。
その他、外付けのUSBネットワークアダプターからのWoLという可能性もある。ひとことでWoLと言っても、動作環境はさまざまである。このあたりがうまく整理されていないこともあって、WoLが分かり難くなっているようだ。結果として、WoLを設定しても起動できず、その原因も分からない、といったことにもなる。
ここでは、対象を「Windows 10」に限定して、WoLについての情報を整理し、WoLによってPCが起動できるようにしてみる。
WoLには、前述の通り「ソフトウェアWoL」と「ハードウェアWoL」の2種類がある。
「ハードウェアWoL」は、ハードウェアに装備される機能であるため、全てのWindows 10で利用できるわけではない。
ハードウェアWoLは、1997年にIBM/Intelが主催する「AMA(Advanced Manageability Alliance)」によって開発された機能だ。AMAは、組織内のPC管理コストを削減するための機能を開発していた。その中でPCの電源をリモートで「オン」にするための機能としてWoLを開発した。「マジックパケットを送信してPCを目覚めさせる」という基本的な機能は、このときに決まった。また、WoLに関係するスリープ状態は、ほほ同じころ(1996年12月)に制定されたACPI(Advanced Configuration and Power Interface:PCの電源やシステム構成を管理するための規格)で定義された。
この頃、イーサーネットインタフェースの開発と製造には、多数のメーカーが参入したため、価格が下がり、差別化点としてWoLに対応するデバイスが多数登場する。しかし、PCメーカーがハードウェアに組み込むものであったため、Windows OSはこれをサポートせず、基本的には、BIOS(当時)の設定項目として取り込まれた。Windows 7までのWoLは、このハードウェアWoLである。ネットワークインタフェースがシステムに対して電源イベントを発生させると、ACPIの「S0(電源オン)」ステートへの復帰が行われる。
これに対して「ソフトウェアWoL」は、2012年にリリースされたWindows 8から搭載された。
ソフトウェアWoLがサポートされたのは、Windows 8から電源オフが「ハイブリッドシャットダウン」(実現される機能から「高速スタートアップ」と呼ばれることもある)になったからだ。これに対して、Windows 7までの「シャットダウン」は「クラシックシャットダウン」と呼ばれて区別される。
ハイブリッドシャットダウンは、ACPIの「S5(完全なる電源オフ)ステートを使わず、「S4(ハイバネーション)」ステートを使う。シャットダウン時にカーネルなどメモリ上のWindows OSの一部をディスクに保存し、起動時にこれを読み出すことで、Windowsカーネルを高速に起動する仕組みだ。このとき、ACPIの「S4」ステートが必要になる。ここでユーザーから見ると、電源をオフにしたはずのPCが、マジックパケットを待機するためにネットワークインタフェースで電力を消費することになる。これがユーザーを混乱させるとして、Microsoftは問題視した。
Windows 8では、タブレット型PCでの利用も想定していたため、バッテリー駆動が前提であり、WoLを常に有効にしておくと、電源オフしたにもかかわらずバッテリーが減ってしまうことになる。このため、ソフトウェアWoLでは、ハイブリッドシャットダウン時には、「S4」ステートでありながらWoLで復帰させないようにした。
そこでWindows 8では、「S3(スリープ)/S4」ステートから「S0(電源オン)」ステートへの復帰を完全に管理するようになった。ハードウェアWoLが発生させる電源イベントは、本来ならば「S3/S4」ステートからの復帰も可能だ。しかしWindows OSは、ACPIを介して電源イベントへの応答を制御することで、「S3/S4」ステートからの復帰を自身で完全に管理するようにした。このため、「S3/S4」ステートからの復帰はソフトウェアWoL、「S5(完全なる電源オフ)」ステートからの復帰はハードウェアWoLという、すみ分けが行われるようになった。
無線LANでもWoL同等の機能として「Wake On WLAN」が作られた。だが、無線LANの場合、イーサネットよりも通信プロトコルが複雑なため、CPU側でプロトコルの一部を処理することが必須だった。例えば暗号化が行われている場合、一定時間ごとにアクセスポイント側と暗号化鍵交換のための通信を行う、といった処理をCPUが担当する必要があった。
無線LANという性質上、スリープ中に移動して他のアクセスポイントのサービスエリアに入るという可能性もある。このときも暗号化キー関連の通信を行わなければならず、CPUのサポートが必要になる。
CPU側の処理が必要ということは、どうしてもOSとの関係(多くの処理はデバイスドライバ内で行われるため)が生じるため、イーサネットのように純粋にハードウェアだけで処理できない。そのため、無線LANのWoLは、CPUをすぐに起動できる「S3」ステートに限られている。Windows 10では、「S3」ステートをソフトウェアWoLで管理しているため、無線LANからのWoLは、ソフトウェアWoLで管理されることになる。
Windows 10のWoLは、「スリープ」(ACPIの「S3」ステート)もしくは「休止状態」(ACPIの「S4」ステート)となっているPCを起動することしかできない。つまり、シャットダウン(「S5」)状態のPCを起動する機能は持っていない。
半面、条件さえ満たせばWindows 10では、マジックパケットを使っての復帰が可能になる。ハードウェアWoLと違ってUEFIの設定を行う必要もない。USB接続の外付けネットワークアダプターには、WoLに対応しているものがあり、本体にイーサーネットインタフェースを搭載していないPCでも外付けのUSBネットワークアダプターなどを使ってWoLが利用できる。
ただし、全てのUSBネットワークアダプターではない点に注意してほしい。デバイスドライバや内蔵しているLANチップで対応が決まるのではなく、製品としてWoLが行えるように設計されているものだけが対応可能なので、個別に製品情報を調べる必要がある。
Windows 10のWoL対応は、無線LANも対象にできる。「内蔵」無線LANインタフェースがWoLに対応した設計になっているPCは、スリープ状態から無線LANでマジックパケットを受信して復帰することが可能だ。無線LANからのWoLは、「スリープ(「S3」ステート)」からの復帰に限られるようだ。また、内蔵無線LANなら必ずWoLに対応しているわけでもない。複雑な仕組みが必要になることから、コストに影響するのでWake On WLANに対応していない機種もある。こちらも、単に内蔵無線LANチップの型番などでは判定ができない。
Windows 10には、常に電源オン状態(「S0」ステート)となる「Modern Standby」構成のPCとそうでないものがある。Modern Standby構成では、「S0x」ステートと呼ばれる低消費電力状態を利用し、「S0」ステートのまま消費電力を下げる仕組みを持っている。このため、Modern Standby構成の場合、PCは「S3」ステートには入らない。この場合「スリープ」は、画面をオフにし、「S0x」ステートに入ることを指す。「S3」ステートに入らないので、WoLによって「S3」ステートから復帰することはできない。ただし、休止状態(「S4」ステート)に入ることはでき、このとき内蔵LANインタフェースでWoLが行える。
Windows 10の稼働状態 | 状態 | 非Modern Standby構成のSステート | Modern Standby構成のSステート |
---|---|---|---|
電源オン | 画面オンでの実行中 | S0 | S0 |
スリープ | Modern Standby対応で違いがある | S3 | S0x |
休止状態 | 実行イメージをストレージに保存して電源オフ状態 | S4 | S4 |
ハイブリッドシャットダウン | 高速スタートアップが有効な状態 | S4 | S4 |
クラシックシャットダウン | 高速スタートアップが無効の場合など | S5 | S5 |
Windows 10の稼働状態とACPIのSステートの関係 |
内蔵イーサネットや無線LANデバイス、外付けのUSBネットワークアダプターが、ソフトウェアWoLに対応しているかどうかは、powercfgコマンドで調べられる。逆にいうとソフトウェアWoLを可能にするネットワークデバイスは、Windows 10から「Wake(復帰)」を可能にするデバイスとして認識されていなければならない。
これを判定するには、以下のコマンドを実行する。
powercfg.exe /devicequery wake_programmable
ここに表示されるデバイスにネットワークデバイス(デバイスマネージャーで名称が確認できる)があれば、そのデバイス経由でのWoLが可能である。逆にここに表示されない場合には、そのネットワークデバイスではWoLが利用できない。
Windows 10のWoLを使うには、デバイスドライバのプロパティにある[電源の管理]タブを使ってネットワークコントローラーにスリープ解除を許可する必要がある。
デバイスドライバのプロパティを開く方法は複数ある。簡単なのは[コントロールパネル]の[デバイスマネージャー]を開き、「ネットワークアダプター」から該当のネットワークデバイスを選択、右クリックメニューの[プロパティ]を開く。[電源の管理]タブを開き、「このデバイスで、コンピューターのスタンバイ状態を解除できるようにする」にチェックを入れる。もし、この項目がグレーアウトされていた場合、該当のデバイスは、電源イベントを発生させる機能を持っておらず、WoLの対象として使うことはできない。
今回、WoLの実験のために幾つかのPCを調べたところ、内蔵有線LANはWoLに対応しているものの、内蔵無線LANはWoLに対応していないものもあった。簡易には、[電源の管理]タブの有無やスタンバイ解除の項目がグレーアウトしているかどうかで、該当デバイスのWoL対応を判断できる。
なお、Modern Standby構成のPCには、デバイスドライバのプロパティに[電源の管理]タブがない。このため、WoLの有効/無効を制御できない。ただし、調べたところ、内蔵LANに関しては、休止状態(「S4」ステート)からの復帰に対応しているものがあった。
Modern Standbyでは、「S3」ステートには入らないため、スリープ中でもネットワークパケットを受信できる。このため、ネットワークアプリケーションを動作させるとき、スリープ状態であれば、WoLでPCをスリープから解除する必要はない。ただし、「S0x」ステートでのスリープ中は処理速度が遅くなっているため、遅延などが発生する可能性があり、このためにプログラムが正しく動作できない可能性がある。
もう1つの設定項目が、デバイスドライバのプロパティにある[詳細設定]タブだ。ここには、ネットワークインタフェース固有の設定項目があり、ここにWoL関連の設定項目を持つデバイスドライバがある。
例えば、「Wake on Magic Packet」などの設定項目だ。これらはデバイスドライバごとに表現が異なるため、名称を確定できない一方で、ここにあるWoL関連の設定項目がソフトウェアWoLの動作に影響する。実際、[電源の管理]タブでWoLを有効にしても、[詳細設定]タブで「Wake on Magic Packet」を無効にするとWoLは動作しなくなった。また、この[詳細設定]タブの設定は、後述のハードウェアWoLにも影響があり、正しく設定していないとハードウェアWoLが動作しない。
なお、ここに「Wake on Magic Packet」などの設定項目が見つからない場合、デバイスドライバを更新することで設定項目が表示されることもある。
次ページでは、ハードウェアWoLの設定方法や、筆者が作成したマジックパケットを送信するPowerShellスクリプトを紹介し、実際にマジックパケットを送る方法、実験結果などについて解説する。
Copyright© Digital Advantage Corp. All Rights Reserved.