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

2017年2月18日

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

OSが最新かチェック

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%もバッテリー減るんだけど、平気?)

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

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

ターミナルでこちらのコマンドを実行→パスワード入力します。

sudo pmset -b tcpkeepalive 1

すると警告が出ます。 ※問題が有りそうなら、

sudo pmset -b tcpkeepalive 1

で元にもどせます。

Warning: This option disables TCP Keep Alive mechanism when sytem is sleeping. This will result in some critical features like ‘Find My Mac’ not to function properly.
警告:システムがスリープしているときにTCP Keep Alive機能が無効になります。これにより、”Find My Mac”(Macをなくしたときに見つける機能)のような重大な機能がうまく動かなくなるかもしれません。

さて、電源を抜いた状態で

pmset -g

を実行してみてください。

tcpkeepalive 0

と表示されると思います。これで、スリープ中にネットワークに接続しない設定になりました。

この状態で、MacBookがちゃんとバッテリーを消耗せずにスリープしているかを確認して下さい(^^) 私はこれで解決しました!

注意

sudo pmset -b tcpkeepalive 0

このコマンドでは、バッテリーで稼働しているときの設定のみ変更します。なので電源をつないだ状態で

pmset -g

しても、

tcpkeepalive 1

になりますよ。

以下は、10.12.3以前で有効だった対策のようです

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

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

ioreg -l | grep IOPlatformFeatureDefaults

ターミナル

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

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

TCPKeepAliveDuringSleepがNo

DNDWhileDisplaySleepsがNo

NotificationWakeがYes

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

リカバリモードで起動

macの電源を切り、再度電源を入れるときに「Command⌘+R」を押したままにします。

Command⌘キーと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を再起動して、再びCommand⌘Rでリカバリーモードに突入します。

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

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

csrutil enable

再起動して完了!

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

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