https://github.com/Attiv/clamOpen/tree/main
一个常驻菜单栏的小工具:在连接外接显示器时,真正关闭 MacBook 内置屏(背光熄灭、停止渲染),而盖子保持打开。效果等同合盖( clamshell ),但你仍能用摄像头、Touch ID 、键盘,散热也更好。
以前搜过好像只能用俩磁铁吸到电脑上假装合盖了,现在有一个私有的 API 可以做到
功能
- 🖥️ 菜单栏一键开 / 关内置屏
- 🤖 自动模式 —— 接外接屏自动关内置、拔掉自动恢复
- 🛟 防崩溃恢复 —— 独立的「恢复内置屏」 App ,即使主程序挂了、屏幕全黑,也能用 Spotlight 盲打救回
- 🔒 安全优先 —— 没有外接屏时拒绝关闭内置屏;拔线 / 退出自动恢复
- 🪶 仅菜单栏(无 Dock 图标)、无后台守护进程、不永久改动系统
实现原理
ClamOpen 通过 CoreGraphics / SkyLight 的私有符号关闭内置屏:
CGError CGSConfigureDisplayEnabled(CGDisplayConfigRef config, CGDirectDisplayID display, bool enabled);
放在标准的显示器重配置事务里调用:
var config: CGDisplayConfigRef?
CGBeginDisplayConfiguration(&config)
CGSConfigureDisplayEnabled(config, builtinDisplayID, false) // false = 禁用
CGCompleteDisplayConfiguration(config, .forSession)
CGBeginDisplayConfiguration/CGCompleteDisplayConfiguration是公开的 CoreGraphics 接口。CGSConfigureDisplayEnabled是真正干活的私有符号。通过dlsym(RTLD_DEFAULT, "CGSConfigureDisplayEnabled")在运行时取得(它就在 CoreGraphics / SkyLight 内),因此不需要链接私有框架,也不需要任何 entitlement 。- 之后内置屏的
CGDisplayIsActive == false:背光关闭、不再渲染 —— 视觉上和合盖一致,但盖子开着。 forSession作用域表示设置只在当前登录会话有效;因此注销或重启一定会恢复内置屏。
目前只在 19 款 intel mbp 上测试过,需要的可以试试