肇鑫的日常博客

日常

Mac睡眠时经常异常唤醒问题的处理

问题

最近从英特尔芯片的iMac 5K,换成了苹果芯片的Mac mini。一切都好,就是电脑在睡眠之后,经常会异常唤醒。表现为显示器由黑转亮,同时显示为无信号;键盘背景灯变亮;外置机械硬盘启动,发出噪音。然后几秒后,电脑又睡眠了。这个过程在电脑睡眠不久就会出现,而且会连续多次出现。

这个问题对于Mac mini这种无电池的台式机还算是小问题,最多就是有点儿烦人,费些电。但是如果是使用电池的Macbook,问题就严重多了。论坛上甚至有人反馈说,自己的电脑的电池电量,一小时就耗光了。

处理

确定了问题,就要研究如何处理。网上有很多种说法。甚至苹果自己也专门为这个问题开了技术说明。

如果 Mac 意外睡眠或唤醒

你可以先尝试使用苹果的提供的方法,如果还是没能解决你的问题。你再来使用我的方式。不过,我更建议你先使用我的方式进行调查,确定原因了之后,再使用苹果的或我的方式进行处理。

分析问题

网上对于这个问题的分析有多个思路。比如利用各种日志,通过命令行过滤来查询是什么原因唤醒了系统之类的。这些方法能查到原因,但是那些原因,一般都写得很技术,往往需要上网去查是什么意思,而且指向虽然有了,但是好多却不具备可操作性。

这里,我们采取更直接的方式,直接使用pmset来进行电源设置的查询。

我注意到Ventura下M1芯片的Mac min的节能设置中,并没有Power Nap的选项。我以为是Ventura的原因,毕竟我用M1不久。但是后来我在论坛上看到,有网友指出,苹果在M1芯片的Mac,移除了Power Nap的选项。我猜测,苹果大概是认为M1芯片的Mac足够省电,所以就把这个选项移除了。保持默认开启状态。

这个是我目前正常,没有异常唤醒状态的电源设置

zhaoxin@zhaoxins-Mac-mini-M1 ~ % pmset -g
System-wide power settings:
Currently in use:
 disksleep            10
 powernap             0
 womp                 1
 networkoversleep     0
 sleep                1 (sleep prevented by powerd, mds_stores)
 Sleep On Power Button 1
 ttyskeepawake        1
 tcpkeepalive         0
 autorestart          0
 standby              0
 displaysleep         10

每个选项的具体含义,可以参考下面的链接。

pmset
另外提一下第8行的sleep项,如果你的系统无法睡眠。那可能是有应用阻止了它睡眠。你可以看看这一行括号里的应用。这些应用都是可能阻止系统睡眠的。注意,是可能,而不是一定。所以你可以先尝试将能关闭的应用先关闭了,然后再来重新执行pmset -g这个命令,看看是不是生效了。然后再次尝试睡眠。

我的Mac mini,因为是从英特尔平台的系统迁移过来的,所以powernap默认时关闭的,如果是全新安装的系统,这一项应该是开启的。此外tcpkeepalive默认是开启的。在我的系统中,这一项的开启是导致系统的在睡眠后还被频繁唤醒的主要原因。

我的理解是,当系统睡眠后,如果tcpkeepalive还开着,那么系统就会因为各种通知唤醒。同时,由于苹果系统中的一些bug,一些可能具备网卡功能设备,比如各种USB设备(因为存在USB网卡这种设备),也能将系统唤醒。比如,我就在日志中发现,系统被我的M.2的外置移动硬盘唤醒过。

sudo pmset -a tcpkeepalive 0
sudo pmset -a powernap 0 // 如果有需要的话

现在再睡眠你的电脑,应该就不会有异常唤醒了。

New macbook Pro M1 chip waking when asleep with log "SMC.OutboxNotEmpty" wake reason

苹果芯片版macOS虚拟机的安装方法

改用苹果芯片的macOS之后,连虚拟机都不会装了。一开始用VM Fusion,提示架构不对。于是又安装了Arm64的VM Fusion技术预览版,还是提示架构不对。

后来理解了,原来之前安装时一直用的pkg格式的安装包也不能用了,因为它是x86架构的。需要下载IPSW格式Arm版专用的。

虚拟机换成UTM,下载Monterery的IPSW刷机包。这次终于安装上虚拟机了。而且这个虚拟机占用还挺小了。我分配了4GB的内存,100GB的磁盘空间。结果运行虚拟机的时候,我的16GB内存的Mac mini居然都不需要启用交换分区。证明这个虚拟机内存占用还蛮少的,然后CPU的占用率也才50%,风扇也没转。看起来这个UTM还是不错的。

之所以安装这个,是因为有时候我向苹果报bug的时候,需要进行系统之间的对比。安装一个虚拟机,就不必经常在不同系统间进行切换了。

需要注意的是,安装好虚拟机之后,需要第一时间跑到时光机和CCC里,把虚拟机所在的文件夹添加到排除文件里,不要进行备份。因为这个文件夹有100多G,每次变动,这100多G就需要重新存储,所以还是不要备份了。需要的时候我重装一下就好了。🐒

最终决定留下这台联合创新的32寸4K显示器

用了几天这款联合创新的32寸4K显示器,我决定把它留下了。这款显示器最大的特色就是便宜,32寸4K,HDR400,价格算上活动,最终只要1799。

当然,这款的缺点也很明显。按照目前的说法,就是只支持单一背光。目前技术上更先进的mini LED的显示器,都是分区背光,这样HDR的级别能够达到1000,甚至更高。

如果不选择这款,就可以选择联合创新的另外一款27寸4K显示器,mini LED背光,价格最低只要2199,价差400块,倒是能接受。不过那款目前京东缺货。而且27寸相比32寸来说,还是小了一些。虽然HDR1000的参数比HDR400要好,但是我觉得看视频,还是屏幕更大的才更好。另外,27寸那款的背光分区只有384个,而同品牌新推出的另外一款拥有1000+的背光分区,但是价格也同时飙升到了4999。这个价格我就算了。

32寸的其他mini LED的显示器也是同样的情况,价格起码是1799的3倍,都还处于早期的高价状态。

这么多年对于IT市场的观察,不难看出,显示器的技术不断推陈出新,而老款的价格则逐年下降。目前5、6千的显示器,过不了两三年,就会降到2千左右。而在我看来,32寸的4K显示器还远谈不上完美,即便加上mini LED背光也还是一样。

远的不说,我们来看看苹果出的4万块的Pro Display XDR,它采用32寸屏,6K分辨率,6016x3384,同时支持HDR1600,背光分区有576个。

那么我们简单预测一下几年之后的显示器,应该就是具有更高的分辨率,更多的背光分区数,以及更便宜的价格。至于尺寸,我觉得32寸已经是我的极限了,再大的显示器我已经不愿意接受。唯一能考虑的可能是曲面屏,这样屏幕才可以更大一些。

所以,既然目前高价的显示器也都还谈不上完美,我就先买一个便宜够用的过渡一下好了。