MacBookスリープ中のバッテリー消費が激しい/スリープしない場合の対策

MacBook

私はMacBook Pro (Retina, 13-inch、Early 2015)を使用しているのですが、購入当初からあるトラブルがあり、少し悩んでおりました。

それは、「MacBook Proがスリープせず、バッテリー消費してしまう」という問題です。

普段は家にMacBookを置いてあるので問題ないのですが、いざMacBookを持ち出すときにMacBookを閉じていても、MacBookはスリープせずにバッテリーを消費し続けてしまうのです。

このため、例えば1時間程度持ち運んだだけでも、バッテリーが数%〜10%程度消費されてしまい困ってしまいます。また、持ち運ぶときに本体をケースに入れているため、熱を帯びてしまいます。

いろいろと調べて原因は「ネットワークアクセスでMacBookがスリープから覚めてしまう」ということは分かっていたので、持ち運ぶ前にわざわざ「WiFiをオフにする」ことで改善していたのですが、なかなか毎回行うのは面倒です。

ですが今回、遂に抜本的な対策を見つけたのでご紹介します。本記事執筆時点で日本語の記事がなかったので、書いてみました。

まずはここをチェック

MacBook Proがスリープせず、バッテリー消費が激しい場合、まずはここをチェックしましょう。

蓋を閉じてもスリープさせないアプリが起動していないか?

InsomuniaXというアプリなど、「MacBookをスリープさせない」アプリというものがあります。このようなアプリが起動していないことを確認しましょう。

省エネルギー設定のPower Napを確認する

MacBookには「PowerNap」という、スリープ中でもメールチェックなどをする機能があります。「スリープ中にそんなことしなくていい!」という方は、これをオフにしましょう。

PowerNap

アップデートが最新かチェック

AppStoreを確認して、アップデートがないか確認しましょう。「最新のOSにしたら直った!」という報告もあります。

Bluetooth 設定を確認する

システム環境設定の「Bluetooth」の詳細設定を確認しましょう。Bluetothデバイスのせいでスリープから覚めているかもしれません。

bluetooth

システムの共有環境設定を確認する

私は「共有」機能を使用していませんでしたが、該当する方は確認してみて下さい。

Mac 上の共有サービスが利用されているためにスリープ状態にならない可能性があります。たとえば、Mac に接続されているプリンタが使用されていたり、Mac に保存されている共有ファイルにアクセスされている場合があります。適切な共有環境設定が有効になっていることを確認するには、アップルメニュー>「システム環境設定」と選択してから、「共有」をクリックします。

次に、サービスの横にある「入」チェックボックスの選択を解除して不必要なサービスをオフにします。

これらを試してもだめな時は

上記の対策を試してもダメな方は、Macの何らかのバグ?のせいでスリープしてくれない可能性があります。

特に、私のように2015年以降のMacBook、MacBook Proをお使いの方は、この可能性が高いです。

ちょっと確かめて見ましょう。スリープしてくれない?と思ったら、
アプリケーションの中から「ユーティリティ」→「コンソール」を起動して、検索窓に「wake reason」と入れてみて下さい。

wake reason

するとこのように、「Wake reason: ARPT (Network)」とか、「ARPT: Wake Reason: Wake on Scan offload」といったメッセージが出てきています。これはネットワークアクセスでスリープから覚めている証拠です。

メッセージが見当たらない場合は、「▲先頭」というボタンをクリックすると履歴を過去にさかのぼれますので試してみて下さい。

同じようなメッセージが出る方は、下記の対策をすることで症状が改善するかもしれません。

対策

対策はこちらのサイトに記載がありました。

MacBook Pro 13 with Retina display consumes 10% battery overnight with the lid closed, is this normal?

(MacBookPro 13インチRetinaディスプレイが、蓋閉じてるのに一晩で10%もバッテリー減るんだけど、平気?)

ここで素晴らしい対策が載っていたので、共有します。

ターミナルでこのコマンドを実行する

アプリケーション→ユーティリティ→ターミナルで、このコマンドを入力してreturnしてください。

ioreg -l | grep IOPlatformFeatureDefaults

ターミナル

すると、このようなメッセージが出るかと思います。

{"TCPKeepAliveDuringSleep"=Yes,"DNDWhileDisplaySleeps"=No,"TCPKeepAliveExpirationTimeout"=43200,"NotificationWake"=Yes}

TCPKeepAliveDuringSleepがNo

DNDWhileDisplaySleepsがNo

NotificationWakeがYes

の場合、下記の対策をしましょう。

電源を切り、再度電源を入れたら「⌘ R」を押したままにする

⌘Rを押しながら起動することで、リカバリーモードという特殊なモードで起動します。

リカバリーモードのターミナルでこのコマンドを入力

リカバリーモードが起動したら、ターミナルを起動しましょう。

起動したら、このコマンドを入力します。

csrutil disable

そのあと、MacBookを再起動しましょう。

もう一度ターミナルを起動

もう一度ターミナルを起動して、今度はこのコマンドを入力します。

ioreg -l | grep board-id

出てきた文字列が重要なので、画面から消さないで下さい。お使いのMacBookにより、このようなメッセージが出てきます。

例:私と同じMacBook Pro (Retina, 13-inch、Early 2015)のとき → Mac-E43C1C25D4880AD6.plist

フォルダ内の同じファイル名を開く

/System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/X86Plat formPlugin.kext/Contents/Resources

フォルダの中に、先ほどと同じファイル名のファイルがありますので、開いて編集します。

編集できない場合、「右クリック→情報を見る」から、読み書き権限を変更したりする必要があります。

ファイルを編集する

ファイル内の3つの箇所を探して書き換え、上書き保存します。3つの箇所のtrueとfalseを逆に入れ替えるように書き換えることになると思います。

<key>TCPKeepAliveDuringSleep</key>
<true/>
<key>NotificationWake</key>
<true/>
<key>DNDWhileDisplaySleeps</key>
<false/>

再起動してもう一度リカバリーモードで起動

MacBookを再起動して、再び⌘Rでリカバリーモードに突入します。

ターミナルでコマンドを実行

同じくターミナルで、今度はこのようなコマンドを実行します。

csrutil enable

再起動して完了!

これで終了です。お疲れ様でした!

MacBookがちゃんとスリープしているかを確認して下さい(^^) 私はこれで解決しました!