开源工具 LayoutKeeper:macOS 外接屏插拔后窗口连桌面一键恢复

一位开发者在 V2EX 分享了开源工具 LayoutKeeper(GPL-3.0 协议),用于解决 macOS 频繁切换外接显示器后窗口布局错乱的问题。作者每天在公司与家中的两块外接屏之间插拔切换,每次 macOS 都会将窗口挤回内建屏,需手动逐一拖回。现有工具 Stay 虽能恢复窗口位置,但无法还原窗口所在的桌面(Space),导致编辑器、通讯软件、浏览器堆叠在同一桌面。LayoutKeeper 针对此痛点实现三项核心功能:一是通过显示器 EDID 信息(厂商、型号、序列号)识别不同外接屏,为每块屏单独保存布局,无需手动切换场景;二是保存并恢复窗口所属的桌面编号,跨桌面恢复需 macOS 26 及以上版本,基于 SkyLight 私有接口实现,仅需辅助功能权限,无需关闭 SIP 或注入 Dock;三是首次确认后插线即自动恢复。近期发布的 0.6.7 版本重写了自动恢复逻辑,修复重复执行问题,支持陌生显示器恢复,并改为按 Chrome 用户配置匹配窗口;0.6.8 版本改用系统通知,同时砍掉拔线后自动删空桌面等两个功能,作者承认此前的删除方案会导致桌面重新编号。该工具目前仅支持单块外接屏,Finder 窗口无法跨桌面移动,且因依赖私有 API,系统大版本更新后可能失效。项目已开源在 GitHub。

事件分析

该项目的技术看点在于调用 macOS 私有框架 SkyLight,实现了官方 API 未开放的桌面级窗口管理能力。这种做法在窗口管理类工具中并不罕见,但每次系统大版本更新都伴随失效风险,作者通过启动时自动检测并自动降级的方式做了兜底。功能取舍上,0.6.8 主动移除自动删空桌面功能并公开承认此前判断有误,说明私有接口行为难以完全预测,项目迭代高度依赖真实使用场景的持续反馈。从生态角度看,苹果长期未在系统层面提供按显示器记忆窗口布局的能力,这一空白催生了 Stay 等付费工具,LayoutKeeper 补足的是跨桌面恢复这一细分缺口,且以开源方式降低了使用门槛。后续走向上,能否支持多显示器、如何应对私有 API 变动,将决定该项目用户规模的上限。

核心观点:真实高频的自用痛点是最好的开发驱动力,macOS 的体验缺口正被社区用私有 API 开源方案一点点补上。

原文链接:V2EX 分享发现

C code80.ai · AI 编码 API 聚合 Claude / GPT 多模型统一接入,稳定不限速,按量计费,几行配置接入 Claude Code。 了解一下 ›

抢沙发

评论前必须登录!

立即登录   注册