MacBook Pro Retina 睡眠耗电现象修复

5,694 阅读3分钟

MacBook Pro Retina 睡眠耗电现象修复

经过测试,MacBook Pro (Retina, Mid 2015)在盒盖睡眠的时候会频繁的被唤醒,导致夜间掉电比较严重(有的网友一个晚上掉电10%以上),根据"syslog | grep -i "Wake reason"显示,也是有被频繁唤醒的记录,虽然掉电没有他们的那么严重,研究了一下各路的解决方案,找到了最终的一个解决方案

如果你在终端中输入 "syslog | grep -i "Wake reason"有像下面的情况的,那么就请注意了,因为这个问题似乎已经存在一段时间了,并且问题集中在2015年后的机型上,网上有挺多讨论的,并且在最新的系统(macOS Sierra 10.12.1 (16B2657)),苹果并没有修复这个问题,只能靠我们自己来手动解决了

升级到macOS Sierra之后,被唤醒的情况有所好转,Sierra在休眠之后会自动禁用掉WiFi连接,但是还是会被唤醒

syslog

产生问题的原因

论坛上大部分的回答都是集中在app唤醒,Power Nap,网络唤醒,重置SMC等解决方案,如果你尝试了上面的各种办法还是没有解决的话,可以继续往下读

我们通过分析系统日志(上图)就可以看到,我们的机器被TCP超时频繁的唤醒,所以,最简单的解决办法就是每次在盒盖前,把WiFi手动断开就可以,如果是不爱折腾的同学可以考虑考虑.也就动动手关掉WiFi嘛

解决问题

既然我们知道,导致休眠失败的原因是网络频繁被唤醒,那么要嘛手动关闭网络,要嘛自动关闭网络,如果有个工具,可以检测系统休眠状态,并且对其进行WiFi的切断与唤醒就好了.

正好我发现了这篇文章
A Macbook Pro's insomnia solution

这位外国友人的解决方案,正是我上面说的,通过sleepwatcher来监听系统休眠情况,并且对其WiFi进行操作

手动挡司机

首先,得先安装sleepwatcher,这里推荐使用brew形式来安装,如果还没有用上brew的同学,请点击获取Homebrew
在终端中输入/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

随后安装sleepwatcher执行下面语句brew install sleepwatcher

SleepWatcher默认执行wake事件配置文件是在~/.wakeup,执行sleep事件配置文件是在~/. sleep所以我们将下面两个脚本复制到用户目录下

.sleep

#!/bin/bash
 
status=$(networksetup getairportpower en0 | grep -Ei "On$")
 
if [ -f /tmp/wifi.on ]; then
    rm /tmp/wifi.on
fi
 
if [ "" !=  "$status" ]; then
    echo "`date` -- WiFi is On ... storing statement" >> /tmp/sleep.log
    
    touch /tmp/wifi.on
    networksetup setairportpower en0 off
fi

.wakeup

if [ -f /tmp/wifi.on ]; then
    echo "`date` -- Enablig WiFi" >> /tmp/sleep.log
    sleep 3
    networksetup setairportpower en0 on
fi

最后执行,令上面两个脚本生效,省得重启

cp /usr/local/Cellar/sleepwatcher/2.2/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist

关于脚本的解释,可以看原文

自动挡用户

作者本人也是写了一个shell脚本来帮助大家,只需要根据README写的步骤来执行shell,就可以完成安装.
下载解压后进入该目录,在终端输入

bash PleaseSleep install等待安装完成

如果日后需要删除的话,在终端输入
bash PleaseSleep uninstall

下载地址:PleaseSleep.7z

相关阅读

可以参考下面几篇文章,对这个问题有个整体的认识

MacBook Pro Retina 睡眠耗电现象深究

关于休眠耗电问题求助

A Macbook Pro's insomnia solution

rMBP 2015 Wake Reason: ARPT (Network)