BudHold — MacBook合盖不休眠远程保活熄屏挂机VNC不断连

BudHold 是一个基于 Swift、IOKit 与 SwiftUI 编写的原生电源保活与远程值守工具,仓库未随附许可证文件,使用前需先与作者确认授权方式。它阻止电脑进入睡眠,即使 MacBook 合上盖子且没有外接显示器,或者显示器被关闭,系统、网络与桌面图形帧缓冲仍保持活跃,让 VNC、屏幕共享或 SSH 可以随时连上,不会遇到黑屏或断联。二进制最低部署目标为 macOS 13,以 Universal Binary 同时原生支持 Apple Silicon 与 Intel 芯片,属于系统工具这一类。它不改动系统默认睡眠策略,开关关闭后立刻回到原状。

场景痛点

MacBook 合盖默认进入硬件休眠,想把笔记本留在家里远程跑任务、挂下载或做屏幕共享,常常一合盖就断联;家里的笔记本合盖静置一晚,第二天再连往往已经睡死,要走到机器前掀开盖子才能唤醒。单纯调高系统的空闲睡眠时限也管不住合盖这个动作,关屏后远控软件还容易抓到黑屏,屏幕共享对面只看到一块黑,自己远程操作不受画面亮度影响,只能重启或合盖重来。临时改 pmset 参数又记不住、用完关不掉。这个工具推荐里的值守思路,是把防休眠做成可开关的常驻程序,效率工具要解决的就是合盖即掉线这件事;至于数字生活里把机器留在原处值守的日常习惯,这个常驻开关正好补上缺口。

主要功能特点

  1. 实时获取当前 macOS 版本与硬件状态
    • 自动通过 sw_vers、sysctl 与 IOKit 获取当前系统版本(如 macOS 27.0.1 (Build 26A434))、芯片型号(如 Apple M4)、合盖传感器状态(AppleClamshellState)、内核休眠锁(SleepDisabled)、供电与电池百分比以及本机局域网/虚拟网 IP。
  2. 三层防休眠架构(合盖 + 关屏均不睡眠)
    • 第一层(IOKit 断言 + caffeinate):同时持有 PreventUserIdleSystemSleep 与 PreventUserIdleDisplaySleep 断言,阻止系统空闲睡眠。
    • 第二层(内核级合盖不休眠 pmset disablesleep):配置 pmset -a disablesleep 1 tcpkeepalive 1 womp 1,阻止 MacBook 合盖时触发硬件休眠。
    • 第三层(显示帧缓冲保活 IOPMAssertionDeclareUserActivity):当检测到显示器休眠或合盖时,周期性唤醒 GPU 帧缓冲渲染管线,解决 macOS 关屏/合盖后远控软件抓屏黑屏或画面卡死的问题。
  3. 物理熄屏挂机模式(背光 0% 防窥省电)
    • 在开盖状态下,支持通过 DisplayServices 将屏幕物理背光直接降至 0%(屏幕全黑),但 GPU 图形渲染保持活跃,远程控制画面依然清晰流畅;本地按下 Esc 键或点击按钮即可恢复原本亮度。
  4. 免密切换与电池防闷烧安全保护
    • 一键配置免密切换:支持配置 /etc/sudoers.d/budhold,首次授权后,日常开关「合盖不休眠」无需每次弹窗输入密码。
    • 低电量自动恢复休眠:当使用电池供电且电量低于设定阈值(默认 20%)时,自动解除合盖不休眠锁,防止将笔记本装入背包后过热或亏电。
    • 支持定时模式与开机自启:支持不限时、1/2/4/8/24 小时定时保活,以及 LaunchAgent 开机自启动。

三层防休眠架构

第一层用系统电源断言配合 caffeinate 阻止系统与显示器空闲睡眠。第二层用 pmset 写入 disablesleep、tcpkeepalive、womp 三项参数,阻止合盖触发硬件休眠。第三层在检测到合盖或关屏时周期性唤醒 GPU 帧缓冲渲染管线,避免远控抓屏黑屏卡死。三层叠加,系统与网络在合盖状态下仍保持响应。

物理熄屏挂机

开盖状态下,BudHold 通过 DisplayServices 把屏幕物理背光降到 0%,屏幕全黑但 GPU 渲染保持活跃,远程画面依然清晰,适合不想让旁人看到屏幕、又要机器继续运行的场合。本地按 Esc 或点按钮即可恢复亮度,不用重启。这套系统增强思路不改写系统电源策略,只在需要时挂上保活断言,退出后回到默认。

免密切换与低电量保护

配置 /etc/sudoers.d/budhold 后完成首次授权,日常开关合盖不休眠不再每次弹密码框,免密范围仅限执行 pmset。电池供电且电量低于默认 20% 阈值时,自动解除合盖不休眠锁,避免装在背包里持续运行积热亏电,低电量保护建议保持开启。手动恢复默认睡眠可执行 budhold off。

定时保活与开机自启

保活时长支持不限时与 1、2、4、8、24 小时几档,到点自动回到系统默认策略,适合只挂一段任务,24 小时档适合长时间挂任务,不限时则要配合低电量保护使用。LaunchAgent 方式开机自启,不必每次登录手动点开。状态页实时显示系统版本、芯片型号、合盖传感器状态、内核休眠锁、电池百分比与本机 IP,连上远端前可先确认休眠锁状态,方便排错。

状态栏界面与命令行双形态

图形界面常驻菜单栏,未启用时只显示简洁图标,启用后标出状态,⌘K 切换合盖不休眠、⌘B 切换熄屏挂机,界面跟随深浅色。点关闭、程序坞退出或 ⌘Q 都只是隐藏转后台,菜单里的「退出 BudHold」才结束程序。配套命令行提供开关、熄屏与免密配置子命令,适合写进脚本。作为实用软件,它把图形与命令两条路都留了出来。

自行编译与安全边界

项目用 Swift 包管理器构建,生成应用与命令行工具,仓库无预编译包,需自行打包编译签名。开启合盖不休眠后,别把未关机笔记本放进密闭包内以免积热。在Mac 优化增强这条线上它偏值守用途,系统优化之外也提醒保留低电量保护;软件工具的取舍在于免密与内核参数按说明配置。

官方网站

GitHub 访问

下载地址

https://pan.quark.cn/s/65901f7b034b

相关推荐

Avatar photo

JameCling

我是 格律诗的软件世界 的作者,一名专注于软件工具、AI 技术和数字效率领域的独立研究者。
多年来,我持续关注互联网工具的发展趋势,体验不同平台的软件产品,并研究它们如何帮助用户提升效率。
我的工作不仅是整理软件信息,而是通过实际测试、功能分析和使用场景研究,帮助用户判断一个工具是否真正值得使用。
格律诗的软件世界 的每一篇文章都希望提供真实、有价值的信息,包括工具特点、使用方法、优缺点分析以及适合的人群。
我相信,好的工具能够改变工作方式,而准确的信息能够帮助用户做出更好的选择。