肇鑫的日常博客

日常

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就需要重新存储,所以还是不要备份了。需要的时候我重装一下就好了。🐒

简单说一下在macOS下使用联合创新32寸4K HDR显示器的感受

我目前使用的系统是macOS 13 Ventura,硬件是Mac Mini M1,有HDMI和雷劈3/USB4接口。显示器是联合创新的32寸,分辨率3840x2160,支持HDR 400,接口有DP、Type-C、HDMI x 2。

所需要的所有特性

高分辨率下的HiDPI

HiDPI下的字体更加漂亮。高分辨率下的HiDPI可以显示更多的内容。但是不是所有的连接方式都能支持到最高分辨率下的HiDPI。

雷劈3转DP、Type-C接口直连最高支持3008x1692分辨率下HiDPI。HDMI直连最高支持2560x1440分辨率下的HiDPI。

前段时间,网上一直流传一个所谓苹果电脑连接的最佳分辨率。里面把4K显示器贬低得不行,认为必须得是iMac 24那样的4.5K分辨率,或者是27寸的5K分辨率才适合macOS,如果DPI数不够,效果就会很差。我当时就觉得那个是谣言,现在自己买了32寸的4K显示器,发现一样可以开HiDPI,证实了那的确就是个谣言。

当启用HiDPI后,macOS有时会提示“使用缩放分辨率可能会影响性能”。对于3840x2160这个原声分辨率来说,HiDPI下只有1920x1080这个分辨率没有这个提示,这是因为1920x1080的宽、高刚好是3840x2160的一半,即二者之间是0.5倍,倒数是2,是整数,因此性能无影响。

高动态范围/HDR

雷劈3转DP、HDMI直连下支持高动态范围/HDR。Type-C直连不支持。

有些人提到开启高动态范围之后,屏幕会发灰的问题。这是因为高动态范围需要同时在macOS系统和显示器设置中同时开启。macOS中开启了高动态范围,显示器同时要在设置中打开HDR模式。如果只开了macOS的,没开显示器的,就会发灰。

高动态范围/HDR和HiDPI之间的冲突

另外,同时开启高动态范围和HDR之后,即便没有性能的提示,HiDPI的效果也会受到影响。字体不再平滑,而是变得干瘪。不过,我找到了一个小技巧,如果显示器打开HDR,但是macOS系统不开启高动态范围。那么HiDPI的字体就还是正常的。这样也简化了看电影时的设置调整,只需要打开/关闭高动态范围就可以了。无需再调整分辨率什么的。

苹果自己的显示器应该没有这个问题。当然,我没有用过支持高动态范围的苹果显示器,所以这是我的猜测。
原来是带宽的问题,更换Type-c转DP1.4的线之后,问题消失。使用Type-c转DP1.2的线才有这个问题。

关于视频黑色发灰的问题

可以通过显示器的菜单,将“动态亮度”设置为“精细”来解决。

不过最好不要开这个功能,开了之后一些国产剧的妆容会变丑。

音量调节、亮度调节

我的显示器自带喇叭。因此,无论是哪种方式连接,都会同时传输视频和音频。不过同时,macOS系统本身的音量、亮度调整也都失效了。苹果对此的说法是,当使用HDMI和DP接口连接时,传输的音、视频数据的音量、亮度都是固定的,因此只能使用显示器上的按钮进行音量和亮度的调节。

我不知道苹果自己的显示器是不是也这样,这样的确有些不方便。不过第三方显示器实在便宜,苹果的又实在太贵了。

2023年2月14日更新

加快开机屏幕点亮速度的方法

显示器默认是采用自动识别信号源,这样哪个信号源有信号,它就会显示那个信号源的内容,不必自己手动切换信号源。缺点是开机之后显示会很慢。尤其是系统从睡眠到唤醒,明明苹果表都已经解锁了,还需要好几秒屏幕才会点亮。

如果你经常使用的是固定的信号源,只是偶尔才使用其他的信号源,那么可以将自动改成手动,设置为经常使用的那个信号源。这样可以大大提高屏幕点亮的速度。需要用其他信号源时,使用显示器的菜单手动切换就可以了。

120Hz刷新率

当屏幕分辨率设置为1920x1080p时,显示器的刷新率在Windows和macOS下都可以设置为120Hz。

2023年2月25日更新

换用type-c转DP1.4的线之后,打开HDR之后,字体不在变丑了。所以之前字体变丑的原因应该是之前用的转DP1.2的线带宽不足造成的。

DP1.4的线还可以支持4K下的10位色显示。而HDMI 2.0则不支持。只能支持到8位色。

另外,我的显卡GTX 970只支持DP1.2,并且DP下不支持HDR传输。因此,还是用HDMI连更实用。