El capitanから?よくわからないけどMacのスリープ中にバッテリーがモリモリ減る現象が出るようになった。夜100%、朝80%とかになってたり。MBA2012モデル使ってたときは夜100%朝100%ってくらいスリープ時にバッテリーは減らなかったので、直したいなあと思ってました。原因はいくつかあるので1つずつ潰してみたいと思います。
もくじ
Power Napの設定を確認する
システム環境設定 -> 省エネルギー -> バッテリー の項目で
「バッテリー電源使用中にPowerNapをオンにする」にチェックが入っていないか確認してください。
スリープ中勝手に起きて更新やらなにやらを確認する設定です。自分の環境では既にオフ状態でした。
詳細な電源設定を確認する
バッテリー電源で動作させているときに以下のコマンドを実行します
pmset -g
こんな感じの結果が出力されたでしょうか。
System-wide power settings: Currently in use: standbydelay 1800 standby 1 halfdim 1 hibernatefile /var/vm/sleepimage powernap 0 gpuswitch 2 disksleep 0 sleep 3 autopoweroffdelay 0 hibernatemode 3 autopoweroff 0 ttyskeepawake 1 displaysleep 3 acwake 0 lidwake 1
- stanbydelay
- カバーを閉じてから、スタンバイモードに突入する時間です(秒)デフォルトは10800秒
- hibernatemode
- スリープの状態を選択します。0,3,25から選択します。
- 各モードの意味についてはここ参照 http://www.hachim.jp/study-by-incident/mac-sleepimage.html
stanbydelay を1800秒(30分)にしました。10分程度の離席ならまだ良いけど30分以上だったらスタンバイしてて低エネルギー状態になって欲しいので。
変更を反映するには以下のコマンド
sudo pmset -a stanbydelay 1800
pmset -a に続いて項目名と値書けばOK
SDカードを挿しっぱなしにしていないか
SDカードを挿しっぱなし(マウント)状態にするとスタンバイモードになりません。Macを閉じる場合はSDカードを取り出すか、以下の方法でスリープ前にSDカードを自動アンマウントしましょう。
【スクリプトで】Mac でスリープ時にSDカードを自動アンマウントさせる
スリープ時にもネットワーク接続を許可するオプションを確認
このコマンドを打ってみてください。
log show --style syslog | fgrep "Wake reason"
スリープ中に復帰した時間と理由が出てきます。
夜使用していないときのログに注目してみてください。以下のようなログが見つかりましたか?
2017-05-15 00:18:14 〜中略〜 (AppleACPIPlatform) Wake reason: RTC (Alarm) 2017-05-15 00:18:14 〜中略〜 (AppleACPIPlatform) Wake reason: RTC (Alarm) 2017-05-15 02:18:17 〜中略〜 (AppleTopCaseHIDEventDriver) [HID] [ATC] AppleDeviceManagementHIDEventService::processWakeReason Wake reason: Host (0x01) 2017-05-15 02:18:27 〜中略〜 (AppleACPIPlatform) Wake reason: RTC (Alarm) 2017-05-15 02:18:27 〜中略〜 (AppleACPIPlatform) Wake reason: RTC (Alarm) 2017-05-15 04:18:29 〜中略〜 (AppleTopCaseHIDEventDriver) [HID] [ATC] AppleDeviceManagementHIDEventService::processWakeReason Wake reason: Host (0x01) 2017-05-15 04:18:41 〜中略〜 (AppleACPIPlatform) Wake reason: RTC (Alarm) 2017-05-15 04:18:41 〜中略〜 (AppleACPIPlatform) Wake reason: RTC (Alarm) 2017-05-15 06:18:44 〜中略〜 (AppleTopCaseHIDEventDriver) [HID] [ATC] AppleDeviceManagementHIDEventService::processWakeReason Wake reason: Host (0x01) 2017-05-15 06:18:54 〜中略〜 (AppleACPIPlatform) Wake reason: RTC (Alarm) 2017-05-15 06:18:54 〜中略〜 (AppleACPIPlatform) Wake reason: RTC (Alarm)
2時間ごとにスリープから復帰しています。
それでは以下のコマンドも打ってみましょう
ioreg -l | grep IOPlatformFeatureDefaults
| | | "IOPlatformFeatureDefaults" = {"TCPKeepAliveDuringSleep"=Yes,"DNDWhileDisplaySleeps"=No,"TCPKeepAliveExpirationTimeout"=43200,"NotificationWake"=Yes}
TCPKeepAliveDuringSleep・・・とても怪しい。スリープ中にネットワーク接続を保持する設定ですね。寝るんならしっかり寝てほしい派なのでこれをオフにします。
SIPをオフに
この設定はSIPをオフにしないと変更できませんのでSIPをオフにします。
SIPオフの仕方は以下を参照してください。(Sierraでも同じ操作です)
Mac OS X El CapiptanでSIPを無効化する
再起動したら以下のコマンドを打ってsipがdisableなのか確認します。
csrutil status System Integrity Protection status: disabled.
TCPKeepAliveDuringSleepをオフに
SIPをオフにしたらまずはボードIDを取得します。私の場合はこうでしたね。
ioreg -l | grep board-id | "board-id" = <"Mac-E43C1C25D4880AD6">
/System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/X86PlatformPlugin.kext/Contents/Resources/Mac-【ボードID】.plist を編集します
sudo nano /System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/X86PlatformPlugin.kext/Contents/Resources/Mac-E43C1C25D4880AD6.plist
<key>TCPKeepAliveDuringSleep</key> <false/> <key>TCPKeepAliveExpirationTimeout</key> <integer>43200</integer> <key>NotificationWake</key> <false/> <key>DNDWhileDisplaySleeps</key> <true/>
「TCPKeepAliveDuringSleep」、「NotificationWake」、の項目は【false】に。「DNDWhileDisplaySleeps」の項目を【true】にして保存します。インデントは合わせてください。
編集できたら再起動しましょう。
12時間スリープで1%消費まで改善
12時間スリープさせて1%の消費で収まるようになりました。バッテリーにも精神的にも易しい。でめたしでめたし。