关于 macOS 10.15 DELL 无法自动休眠的问题

⚠️ 警告 :截止于 2021.11.19 该方法可能不再适用。

故障表现

出现问题的电脑的表现状态为:

  • 点击休眠屏幕黑屏
  • 键盘背光亮 1 分钟后熄灭(正常)
  • 电源键常亮
  • 风扇一直旋转(温度较高)

分析过程

于是我使用了如下命令:

1
log show --last 1d | grep "Wake reason"

得到的结果如下(截取关键):

1
2
3
powerd: [powerd:sleepWake] 
Wake reason: "<private>"  
identity: "<private>"

该日志并无关键信息,于是便使用了如下命令:

1
cd ~/Desktop && pmset -g log > log.txt

或者可使用:

1
pmset -g log

或者

1
pmset -g assertions

得到如下结果(截取关键信息):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Assertion status system-wide:
   BackgroundTask                 0
   ApplePushServiceTask           0
   UserIsActive                   1
   PreventUserIdleDisplaySleep    0
   PreventSystemSleep             0
   ExternalMedia                  0
   PreventUserIdleSystemSleep     0
   NetworkClientActive            0
   
Listed by owning process:
   BackgroundTask named: "com.apple.parsec-fbf.flush"  
   
UserIsActive named: "com.apple.iohideventsystem.queue.tickle" 
serviceID: "100000387"
name: "IOHIDEventDriver"
product: "Keyboard"
eventType: "3"

UserIsActive named: "com.apple.iohideventsystem.queue.tickle"
serviceID: "100000421"
name: "AppleUserHIDEventSe"
product: "2.4G"
Mouse eventType: "17"

Timeout will fire in 600 secs Action =
Timeout Action Release No kernel assertions.

Idle sleep preventers: IODisplayWrangler...

分析如上信息多少都和

1
2
"com.apple.iohideventsystem.queue.tickle"
"com.apple.parsec-fbf.flush"

有关,于是便使用搜索引擎对已上信息进行搜索,找到一个帖子:

http://bbs.pcbeta.com/viewthread-1847399-1-1.html

里面有一个 @yjplayer 提到的一点

手动睡眠,盒盖睡眠完全正常,
就是自动睡眠倒计时完了只是黑屏没睡眠。
还是要用老办法,
用命令不加载那个文件就可以自动睡眠

这个老办法引起了我的注意,于是我便开始尝试使用「parsec-fbf」

作为关键词进行搜索....

找到了这篇帖子:

http://bbs.pcbeta.com/viewthread-1836895-2-1.html

里面有一个 @maojinbing 提到的一点

如果楼主的手动睡眠(即点击睡眠菜单或按下电源按钮)是成功的,建议备份好文件,彻底停用这个文件。副作用:可能影响 siri 的正常使用...

这里提到了副作用,然后在追答后面还提到了:

你弄错了,是 parsec-fbf 其他不动
/PrivateFrameworks/CoreParsec.framework/parsec-fbf

这里有了具体位置

便猜测是:parsec-fbf 用于定期刷新 上传 Siri Search 的分析数据

这也能解释上面说的副作用

于是先尝试把这个 parsec-fbf 开机启动关闭掉,看看会不会出现这种情况

解决方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 显示当前的启动脚本
launchctl list

# 开机时自动启动
sudo launchctl load -w [path/to/script]

# 停止正在运行
sudo launchctl unload [path/to/script]

# 去除开机启动
sudo launchctl unload -w [path/to/script]

于是我便执行了如下命令:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 停止运行 parsec-fbf
launchctl unload /System/Library/LaunchAgents/com.apple.parsec-fbf.plist

# 去除 parsec-fbf 开机启动
launchctl unload -w /System/Library/LaunchAgents/com.apple.parsec-fbf.plist

# 检查(提示信息说明还在运行)
launchctl list |grep "parsec-fbf"

# 清除 parsec-fbf 的缓存
cd ~/Library/Caches
rm -R com.apple.parsecd

重启检查效果