爱意满满的作品展示区。
Vitta

一个外接显示器后开盖关闭 mbp 显示器的小工具

  •  
  •   Vitta · 20h 1m ago · 410 views

    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 上测试过,需要的可以试试

    4 replies    2026-06-05 10:31:05 +08:00
    Zarhani
        1
    Zarhani  
       19h 57m ago
    我是自己 vibe 了 python 脚本,也是用的相同 API
    Vitta
        2
    Vitta  
    OP
       15h 36m ago
    @Zarhani 天热刚想起来这个事。。
    Zarhani
        3
    Zarhani  
       10h 26m ago
    @Vitta 现在有个问题:接入外接显示器,然后关闭 macbook 自带屏幕后,断开外接显示器,自带屏幕不会亮起来,而是彻底黑屏;我是在 python 脚本里面加了相关逻辑,如果没有外接显示器则强制给 id 为 1 的屏幕启动,然后用 karabiner-elements 搞了个快捷键,用快捷键去调用 python 脚本
    Vitta
        4
    Vitta  
    OP
       9 mins ago
    @Zarhani #3 我又弄了一个唤醒的 APP 在里面,黑屏后直接唤出 raycast 盲打 唤醒回车,昨天就用到了😂
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5706 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:40 · PVG 10:40 · LAX 19:40 · JFK 22:40
    ♥ Do have faith in what you're doing.