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连接,但是还是会被唤醒
产生问题的原因
论坛上大部分的回答都是集中在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
相关阅读
可以参考下面几篇文章,对这个问题有个整体的认识