我之前一直在用 AlDente 管理 MacBook 的电池充电,设置 80% 上限之类的。但有个问题一直困扰我——AlDente 在放电的时候,macOS 会认为”电池在掉电→该休眠了”,然后合盖就直接睡了。

试过 Amphetamine,大部分时候没问题,但偶尔还是会翻车。后来发现有个更根本的解法,一行命令搞定。

问题在哪

macOS 的休眠逻辑其实挺聪明的,但 AlDente 限充之后,电池处于放电状态,系统就判断”没在充电 + 空闲→休眠”。合盖更直接,直接触发 sleep。

Amphetamine 之类的应用是通过创建 assertion 来阻止休眠的,但它们是用户态的进程,有时候会被系统级别的行为覆盖掉。

解法:pmset disablesleep

终端里跑两行:

1
2
sudo pmset -a disablesleep 1
sudo pmset -a sleep 0

第一行告诉 macOS “任何情况下都不要进入睡眠”,第二行把休眠定时器设成 0(永不)。执行一次就行,重启后依然生效。

跑完之后,不管合不合盖、插不插电、放不放电,系统都不会休眠。显示器该关还是关,不影响。

想恢复的话:

1
2
sudo pmset -a disablesleep 0
sudo pmset -a sleep 10

为什么这比 Amphetamine 靠谱

Amphetamine 是在应用层阻止休眠,系统层面的 sleep 逻辑有时候还是会赢。pmset 是直接改系统的电源管理配置,属于内核级别的设置,优先级更高。

我现在三个同时跑着:pmset 禁止休眠 + Amphetamine + UURemote,三重保险,反正不会再翻车了。

怎么验证

pmset -g 看当前设置:

1
pmset -g

看到 SleepDisabled 1sleep 0 就说明生效了。

终端

也可以看 assertion 状态:

1
pmset -g assertions

能看到哪些进程在阻止休眠。

注意

这个设置对所有场景生效,包括合盖。如果你只是想合盖不睡但开盖正常休眠,可能需要更精细的配置

不插电的情况下合盖不睡会持续耗电,注意电量

如果你还想让显示器也永不关闭,去系统设置 → 锁定屏幕 → 不活跃时关闭显示器调一下

参考

Use caffeinate to prevent sleep on lid close on battery - Ask Different

macOS 在任何情况下都不要自动进入睡眠模式 - CSDN

How to stop Mac from sleeping: Built-in settings & Easy tools - Setapp