Lunar 5.6.6 alpha 3 版本技术解析:环境光驱动的 Auto XDR、`displays` CLI 单属性输出与菜单栏图标隐藏
Lunar 5.6.6 alpha 3 版本技术解析:环境光驱动的 Auto XDR、displays CLI 单属性输出与菜单栏图标隐藏
本篇基于 Lunar 仓库的 5.6.6 alpha 3 发布说明,完整还原该版本引入的「基于环境光的 Auto XDR」特性、三项功能改进(Curve Slope 自动居中、displays 命令单属性多屏输出、Configuration 页隐藏菜单栏图标)的具体行为,并结合 DisplayController、HDRSettingsView、CLI 等源码,说明这些特性的实现位置、可配置参数与适用边界,帮助读者理解并正确启用相关能力。
版本概览:alpha 3 的定位
ReleaseNotes/5.6.6a3.md 属于 Lunar 5.6.6 系列中的 alpha 3 迭代,其内容可归纳为一个特性(Features)加三项改进(Improvements):
- 特性:基于环境光的 Auto XDR(Ambient-light Auto XDR)。
- 改进:
- 对与源显示器完全相同的目标显示器,自动把 Curve Slope 设为中点;
- 使用
displaysCLI 命令打印单个属性时,支持在多显示器场景下分别输出; - 在 Configuration 页新增 Hide Menubar Icon(隐藏菜单栏图标)设置。
下面逐项展开,并在特性章节给出源码级印证。
功能一:基于环境光的 Auto XDR
行为定义
发布说明对该特性的定义非常明确:
- 当环境光足够亮时,XDR Brightness 会自动启用;
- 当环境光低到「普通亮度下依然清晰可见」时,XDR 会自动关闭;
- 该功能仅在 MacBook Pro 2021 单独使用(不接外接显示器)时生效。
换言之,这是一条「环境光 → 内置屏 XDR 亮度」的自动开关链路:由内置环境光传感器读数驱动,在强光场景(例如阳光下)自动把内置屏拉升到 XDR 高亮范围,在弱光场景自动回落,避免不必要的功耗与屏幕发热。
源码实现:传感器任务、阈值与状态切换
从源码结构看,该特性的运行主体位于 DisplayController。关键证据包括:
-
开关与阈值来源:
autoXdrSensor、autoXdrSensorShowOSD等布尔量以及autoXdrSensorLuxThreshold(亮度阈值,单位 lux)都从Defaults/CachedDefaults读取,其中阈值通过autoXdrSensorLuxThresholdPublisher订阅更新(见 DisplayController.swift#L650-L655)。这些默认项在 DataStore 中登记,例如.autoXdrSensorLuxThreshold(见 DataStore.swift#L58)。 -
任务启停与硬件约束:
setupXdrTask()在订阅开关变化时,会先做一次硬件校验,只有builtinDisplay满足display.isMacBookXDR、并且能读到SensorMode.getInternalSensorLux()的环境光,才会启动xdrSensorTask(见 DisplayController.swift#L2029-L2043)。从这段guard可推断:只有内置屏为 XDR MacBook(发布说明所称 MacBook Pro 2021)且环境光可用时,自动链路才真正运转,这与「仅限 MacBook Pro 2021 单独使用」的描述相吻合。 -
状态切换与防抖:
autoXdrAmbientLightPublisher是一个带防抖的PassthroughSubject,在去抖后读取builtinDisplay,把结果写入d.enhanced,并把xdrState置为.enabledAutomatically或.disabledAutomatically(见 DisplayController.swift#L625-L639)。这说明「自动启用/自动关闭」在内部被区分为与「手动切换」不同的状态,便于 UI 和 OSD 呈现。 -
取消与暂停原因:
cancelAutoXdr()与autoXdrSensorPausedReason等字段(见 DisplayController.swift#L2054-L2072)用于在用户干预(例如按 Esc)时取消一次自动切换,并把「暂停原因」反馈给界面。
用户侧可配置项
在设置界面 HDRSettingsView 中,autoXDRSensorSettings 一段集中暴露了与发布说明对应的交互控件(见 HDRSettingsView.swift#L78-L144):
- 主开关:
Toggle XDR Brightness based on ambient light,绑定autoXdrSensor。 - 阈值滑杆:文案显示「当环境光高于
\(threshold)lux 时自动启用 XDR」,滑杆百分比与 lux 之间通过pow(..., 0.24 / 4)做了非线性映射,并叠加了XDR_MAX_LUX、XDR_LUX_LEAST_NONZERO等常数(见 HDRSettingsView.swift#L92-L118)。 - Reset 按钮:点击后把阈值复位到
XDR_DEFAULT_LUX(见 HDRSettingsView.swift#L109)。 - OSD 提示:
Show OSD when toggling XDR automatically,绑定autoXdrSensorShowOSD,用于在自动切换时弹出提示,并支持按 Esc 中止 Auto XDR(见 HDRSettingsView.swift#L129-L142)。 - 实时读数:界面还会显示
Current ambient light: <lux>,当链路被暂停时显示autoXdrSensorPausedReason(见 HDRSettingsView.swift#L119-L127)。
适用前提与限制:该特性依赖内置环境光传感器与 MacBook XDR 内置屏,发布说明明确指出仅在 MacBook Pro 2021 单独使用(不接外接显示器)时生效;从源码的
isMacBookXDR硬件校验也可推断,接入外接显示器或更换机型后,这条自动链路可能不满足启动条件。
改进一:Curve Slope 对「同源」目标显示器自动居中
发布说明写道:对与源显示器完全相同的目标显示器,会自动把 Curve Slope(曲线斜率)设为中点。从命名与上下文看,这属于 Sync Mode 一类场景下的亮度映射校准——当目标屏与源屏是同型号时,直接取中点可避免额外的斜率偏差。该行为属于内部自动化逻辑,用户无需手动干预;发布说明本身未给出更多参数细节,此处如实保留其「自动设为中点」的表述。
改进二:displays CLI 支持在多屏下打印单个属性
Lunar 的命令行接口实现在 CLI.swift 中。displays 子命令本身支持一系列筛选与输出标志,例如 --json、--all、--edid、--system-info 等(见 CLI.swift#L1316-L1338)。
本次改进针对的是「打印单个属性」这一用法:在存在多台显示器时,命令会逐台输出该属性,而不是只处理其中一台。从源码结构看,handleDisplays 会对筛选后的每一台 display 循环处理,并对「读取/打印某属性」的分支逐屏调用 printDisplay 与属性输出逻辑(见 CLI.swift#L2299-L2319)。这一循环正是「多显示器分别打印单属性」的落地方式,便于用户在多外接屏环境下逐台核对同一属性的取值。
适用说明:以上行为以当前仓库的 CLI 实现为准。
displays命令的详细参数与属性取值范围,建议在具体版本中结合--help输出确认,本文不对其余子命令做延伸。
改进三:Configuration 页新增 Hide Menubar Icon
发布说明在 Configuration 页新增了 Hide Menubar Icon 设置。该设置对应的默认项为 .hideMenuBarIcon,并在多处被消费:
- 设置项位置:
Hide menubar icon开关位于 QuickActionsLayoutView 的菜单栏相关设置区(见 QuickActionsLayoutView.swift#L112),与Show brightness near menubar icon、Alternate menubar icon相邻。 - 生效逻辑:AppDelegate 中订阅了
hideMenuBarIconPublisher,并据此控制statusItem.isVisible = !CachedDefaults<a href="https://link.gitcode.com/i/3ec9dc3ae453bcf0ca455c704b29cd4e" target="_blank">.hideMenuBarIcon](见 [AppDelegate.swift#L1911-L1915)。 - 默认项登记:
.hideMenuBarIcon在 DataStore.swift 中注册并参与缓存(见 DataStore.swift#L150、DataStore.swift#L832)。
从源码结构看,该设置的作用是把状态栏项 statusItem 的可见性取反,从而让菜单栏图标隐藏;配合 AppDelegate.swift#L1087-L1097 中围绕 hideMenuBarIcon 与 didBecomeActiveAtLeastOnce 的分支,可推断它还参与了「隐藏图标后如何重新唤起应用」的激活判定。用户若需要恢复图标,可在同一设置区关闭该开关。
小结
Lunar 5.6.6 alpha 3 以「环境光驱动的 Auto XDR」为核心,把内置 MacBook XDR 屏的高亮切换交给环境光传感器自动完成,并提供了阈值滑杆、OSD 提示与 Esc 取消等可控细节;同时通过三项改进(同源目标屏 Curve Slope 自动居中、displays 命令多屏单属性输出、隐藏菜单栏图标)提升了多屏与日常使用体验。以上特性与参数的落地位置,均可在 DisplayController、HDRSettingsView、CLI、QuickActionsLayoutView 等源码文件中进一步核对。