1.1
当前版本
2026 年 10 月 24 日
这一版是一次实机返工。第一版在真机上「一次都没成功」——用户拔了显示器、拔了电源, 等半天键盘灯还亮着。复盘出五个问题,根子上都是软件说了假话。这一版把它们逐个修掉。
- 修复蓝牙状态不再自欺。旧版写完偏好文件立刻读回自己写的值,永远「成功」——实际蓝牙还开着。在 macOS 15 上那条老办法已经彻底失效。现在改用
system_profiler读真实状态,并且只有在拿到蓝牙权限时才调用私有 API(没权限就调会被系统直接杀掉进程)。 - 修复请求睡眠 ≠ 睡了。
pmset sleepnow被断言挡住时不报错,它只是什么都不做。旧版只要没抛异常就切到「外出中」,界面再写死一句「系统已进入睡眠」。现在请求后会回读日志确认真的Entering Sleep,没睡成就重试,最多三次;三次都失败就停在原地告诉你是谁占着,绝不假装出门。 - 修复拔线检测认 ID,不认数量。这是「为什么不灭灯」的真正原因。拔掉显示器后,
CGGetActiveDisplayList仍然返回 1——一块残影屏占着位置,数量永远等不到 0,倒计时根本不启动。现在按基线显示器 ID 判断,外加比对 EDID 厂商型号,防止影子屏沿用原屏 ID。 - 修复恢复失败不再吃掉快照。旧版恢复失败照样清空状态文件,导致下一次拍到的「原始设置」已经被改脏,从此永远恢复不回来——一个会自我固化的错误。现在失败会保留快照,首页显示「上次没能恢复原设置」并提供重试。
- 修复共享服务按端口判定。不再只看
launchctl的开关状态,而是直接判断 445 / 5900 / 548 端口还有没有人监听——那才是「真的关掉了」。 - 新增强力模式。外出期间机器连续醒着满 10 分钟就强制让它睡,30 秒可取消。显示器插着或有人远程登录时不会动手。默认关闭,需在设置里手动打开。
- 新增--diagnose 体检命令。一行命令读出你这台机器上到底谁在阻止睡眠、当前的
pmset设置、蓝牙状态、定时唤醒任务。只读,不改任何东西。 - 新增拔线页兜底按钮。万一哪台机器的显示栈比预想的还古怪,也可以手动让它立刻睡下去,不会卡在那一页出不了门。
- 改进唤醒统计加上排除规则:刚插上显示器那一下的唤醒不算,因为你人就在旁边。误报一次,你下次就不信它了。
- 改进唤醒分类里,暗唤醒和通知唤醒合并显示为「后台唤醒 N 次」,只有真实唤醒才单独标红。避免每次出门都被小事打扰。
- 改进报告建议只针对软件还能控制的事提,硬件和人为因素只陈述事实——比如「外接键盘还在连着,走之前拔掉它」,而不是给一堆你根本做不到的建议。
- 改进产品名从
HeadlessKnightMaster改短为Knight。Finder、活动监视器、崩溃报告里显示的都是它,太长的名字没人念得出来。
1.0
2026 年 10 月 23 日
第一个能跑的版本,功能框架已经齐全,但因为上面的五个问题,在真机上没有一次真正成功过。 保留在这里作为记录。
- 新增菜单栏 App 主体,12 个界面,300pt 单窗口,全程不出现第二个窗口。
- 新增外出模式作为事务:进入时拍快照 → 应用变更 → 离开时读状态文件、审计日志、出报告、恢复快照。
- 新增九项自动动作:关阻止睡眠的程序、锁睡眠设置、关蓝牙、关网络唤醒、关 Power Nap、关 TCP Keepalive、清定时唤醒、暂停 Time Machine、关共享服务。
- 新增唤醒三级分类:暗唤醒 / 通知唤醒 / 真实唤醒。
- 新增root 后台守护进程,走 Unix socket 并用
getpeereid()校验对端 uid,不用 XPC——因为 ad-hoc 签名没有 team id,XPC 的签名校验会失败。 - 新增14 组测试共 198 个用例,其中专门有一组叫「诚实性测试」,用来守住「不许说假话」这条底线。
想要当前版本?
下载 1.1