2016/06/28(Tue)Windows PCが勝手にスリープから復帰する問題の原因究明法

2016/06/28 0:54 Software::Windows
私のメインPCは、最初はスリープから勝手に復帰すると言うことはなかったのだが、長いこと使っているうちに、様々なアプリのインストール・アップデート、デバイスの追加・変更を経て、スリープしたのにすぐに復帰するという現象が起こってしまうようになった。
先日Windows 10をクリーンインストールしたのに具合が悪い。ナゼダ……。

調べてみると、同じ現象に陥っている人は結構多い。でも、検索結果は断片的な解決法ばかりで、ズバリここを探れば!という情報がなかなか見当たらないので、ここにまとめておく。

環境

OS:Windows 10 x64 *1
M/B:ASRock Z77 Extreme 6
ACPI周りで関係ありそうなこと:
  • Onboard LANで、Broadcom BCM57781にMagic Packet onlyでWoL設定
  • PCI Express接続で、Intel PRO/1000 GTにMagic Packet onlyでWoL設定
  • Intel Smart Connect Technologyは無効
  • Intel Rapid Start Technologyは有効だが、RAMが32GBあって実質使えない
  • Keyboard FILCO Majestouchシリーズ、Mouse Logicool Unifying Wirelessを、CPU切替器を通してUSBポートに接続
  • Windows Updateは「再起動の日時を設定するように通知する」を指定
でも結論から言うと、この人達は悪くなかったので、あまり接続形態には依らないと思う。

*1 : 先日ようやくWindows 10にした…

イベントビューア

最初に調査すべきは、イベントビューア。
って、こんな問題を気にする人なら最初に見てるとは思う。念のため。

イベントビューア - Windowsログ - システムを開く。
リストからソースPower-Troubleshooterというものを探していくと、スリープから復旧した際に記録した物が見つかる。
sleep01.png


ここのスリープ状態の解除元にデバイス名が書かれているならば、それが原因ということでFinal answerだが……。上記は、電源ボタンを押してスリープを解除した場合の例。他に、NICの名前だったり、USBコントローラ・デバイス(キーボードやマウス)の呼称が入ることがある。

厄介なのは不明の時。
GMT表記なので+9時間して考えるとして、夜中の2:18頃にスリープに入れたはずが、3:50頃に復帰したと言うこと。
sleep02.png


スリープを解除しうるものを片っ端からオフる

大体の人がたどり着くこれ。

まず、BIOSのACPI周りでWake onする設定を全部オフに。

次に、Windowsのデバイスマネージャを開いて、ネットワーク アダプター、キーボード、マウスとそのほかのぽいティング デバイスカテゴリ内の全てのデバイスのうち、スタンバイ状態を解除できるようにする設定にチェックが入っている物をオフにする*2
sleep03.png


このあたりはコマンドプロンプトを管理者で起動したうえで、以下のコマンドを流しても確認できる。
▼スリープを解除しうるデバイス一覧
powercfg /devicequery wake_programmable
▼上記のうちで、実際にスリープを解除可能な設定になっているデバイス一覧
powercfg /devicequery wake_armed
sleep04.png


この状態でスリープに入れると、NICのLEDは消灯し、キーボードやマウスをクリックしても電源が入らないようになっているはず。

でも、就寝などしていると、いつのまにか電源が入っている。誰だ、どいつだ……!

*2 : ここをオフにしてしまえば、Pattern Match/Magic Packetで電源が入る可能性はまず消せる

Windowsのタスクスケジューラー

よく紹介されているものとして、スリープ解除タイマー、Media Centerのタスク、Windows Update、Windows 10に限っては自動メンテナンスがある。
この中で変更した物と言えば、スリープ解除タイマーをオフにしたこと、Windows Updateを「自動」から、「再起動日時を求める」ようにしたこと位か。

とはいえ、数ある設定項目から見ていくよりも、もっとダイレクトに起こしている人を見つける方法がある。

Windowsを含むスリープを解除するアプリ一覧の列挙

コマンドプロンプトを管理者として起動して、以下のアクティブなスリープ解除タイマーを列挙するコマンドを流してみる。
powercfg -waketimers
sleep05.png

と、ここでAcronis True Imageを発見。どうやら、この人が犯人でした。

確かに毎朝スケジュールバックアップを走らせているが、わざわざスリープを解除してまでは実行させない設定にもかかわらず、定期的にスリープを起こす設定をアプリ側が入れてしまっているようで、こんなことに……。
現時点で最新のTrue Image 2016 ビルド6571にアップデートすることで、あっさり上記のスリープ解除タイマーの項目が消えたが、以前のビルド6027ではタスク有効期限を過ぎる度に次の時刻がセットされていたのでバグがあったのかも。

他にもTeam Viewer等のリモート管理ツール、テレビ録画ソフトなどでの報告がある模様。Team Viewerはバグらしく、修正版が提供されているようで、-waketimersに該当した場合は確認してみてほしい。

ちなみに、直前のスリープを解除した原因は、
powercfg -lastwake
で調べることも出来るのだが、イベントビューアに出てくる情報以上の物は得られないだろう。

原因となったアプリ特定後は、今までのようにWoLを機能させたり、キーボード・マウスによるスリープ解除をオンにしたり、電源設定のスリープ解除タイマーも有効に戻しても勝手に起きることはなくなった。

参考

Windows10が夜中に勝手にスリープ復帰する場合の解決法
Windows 8.1ミニTips (102) Windows 8.1の自動スリープ解除、原因を探って無効化する | マイナビニュース
Windowsでスリープ・休止状態・スタンバイなどの状態が勝手に解除されてしまう現象の回避方法 - 結果だけでなく過程も見てください