oabdrabo/DisplayDeck

GitHub: oabdrabo/DisplayDeck

一款 macOS 菜单栏应用,提供全面的显示器与窗口控制功能,包括屏幕禁用、强制 HiDPI、亮度增强、色温调节、窗口透明度及防休眠等。

Stars: 11 | Forks: 1

DisplayDeck — total control of your Mac's displays and windows 禁用和启用屏幕 · 强制 HiDPI · EDR 增强亮度 · 暖色调 · 窗口透明度、模糊效果、置顶和画中画 · 保持唤醒。 [![发布版本](https://img.shields.io/badge/release-v2.2.1-2ea44f?style=flat-square)](https://github.com/oabdrabo/DisplayDeck/releases/latest) [![许可证](https://img.shields.io/badge/license-MIT-3da639?style=flat-square)](LICENSE) [![平台](https://img.shields.io/badge/macOS-14%2B-000?style=flat-square&logo=apple&logoColor=white)](#-requirements) [![Apple Silicon](https://img.shields.io/badge/Apple_Silicon-555?style=flat-square)](#-requirements) [![Objective-C](https://img.shields.io/badge/Objective--C-438eff?style=flat-square)](#-how-it-works) [![网站](https://img.shields.io/badge/website-635bff?style=flat-square&logo=githubpages&logoColor=white)](https://oabdrabo.github.io/DisplayDeck/) [**功能**](#-features) · [**截图**](#-screenshots) · [**安装**](#-install) · [**要求**](#-requirements) · [**工作原理**](#-how-it-works) · [**常见问题**](#-faq) · [**支持**](#-support--sponsors) · [**许可证**](#-license)
## ✨ 功能 | | | |---|---| | 🖥️ **禁用 / 启用任何显示器** | 在合盖/无头模式(headless)下关闭内置屏幕,使其在打开盖子时保持关闭。可选项:当连接外部显示器时自动禁用内置屏幕——并带有**安全保护机制**,如果断开连接(或失效/幽灵外部显示器条目)会导致您没有可用的屏幕,它会重新启用内置屏幕。 | | ⤢ **强制 HiDPI** | 通过镜像私有的 `SLVirtualDisplay` 为原生不支持该功能的显示器添加清晰的缩放(retina)分辨率,以及一个“更多空间”的超采样级别。可选写入**持久的“清晰 HiDPI”覆盖配置文件**。 | | ☀️ **亮度 + 增强** | 内置屏幕通过 `DisplayServices` 调节,外部显示器通过 DDC/CI 调节,内嵌**自动亮度**开关,以及**超过 100% 的 EDR 增强**,限制在显示器真实的、学习到的余量范围内(在内置屏幕上较为温和,在真正的 XDR/HDR 面板上提升明显)——保留原始色彩,并在 Mission Control 中自动暂停。 | | 🌡️ **暖色调** | 通过 gamma 渐变实现针对单个显示器的色温滑块(f.lux / Night-Shift 风格)—— 6500 K 中性 → ~3400 K 暖色,设置会持久化保存,在 0% 时恢复原生的 ColorSync。 | | 🪟 **窗口透明度** | 为**任何**应用程序设置单应用或全局窗口透明度,通过注入到 Dock 中的独立脚本组件实现(无需外部工具)。可选的**毛玻璃模糊效果**、单应用的**保持置顶**,以及**画中画**(将窗口缩小为仍可使用的浮动角落)。 | | ☕ **保持唤醒** | 通过 IOKit 唤醒断言使 Mac 及其显示器不会进入睡眠——可无限期唤醒或设置持续时间。替代 KeepingYouAwake。 | | 🔤 **文本平滑** | 调整 macOS 的灰度抗锯齿(关闭 → 强效),使文本在外接、非 Retina 或缩放的显示器上不会显得细弱或模糊。全局有效;重新登录后生效。 | 菜单栏图标是一个可交互的**咖啡杯**:左键点击切换保持唤醒状态(满杯 = 唤醒),右键点击打开菜单。 ## 📸 截图 菜单栏咖啡杯:

Menu-bar mug icon

菜单 —— 针对单个显示器的**亮度**(带有内嵌的 **Ⓐ** 自动亮度开关)和**暖色调**滑块,以及针对单个应用的**透明度**行,带有毛玻璃效果、保持置顶和画中画开关:

Main menu

子菜单 —— 保持唤醒持续时间、精选的**分辨率**选择器(★ = 面板原生),**强制 HiDPI**“更多空间”级别,以及分组的**设置**:

Keep Awake durations Resolution picker

Force HiDPI sizes Settings

## 📦 安装 **Homebrew** (cask): ``` brew install --cask oabdrabo/tap/displaydeck ```
从源码安装 ``` git clone https://github.com/oabdrabo/DisplayDeck.git cd DisplayDeck make install # builds, ad-hoc signs, copies to /Applications, launches ``` 需要 Xcode Command Line Tools (`xcode-select --install`)。其他目标:`make`(仅构建)、`make zip`(发布构件)、`make clean`、`make uninstall`。
默认在登录时启动 —— 在菜单栏图标下切换:**设置 → 登录时启动**。该应用程序为**临时签名**(未公证),因此 Gatekeeper 可能会在首次打开时发出警告;Homebrew cask 会为您移除隔离标志,或者右键点击一次选择 **打开**。 ## 🧹 卸载 ``` brew uninstall --cask displaydeck # if installed via Homebrew ``` 从源码卸载,或移除为实现透明度而安装的 Dock 脚本组件: ``` make uninstall # removes the app + (with admin) the scripting addition & sudoers entry ``` ## ⚙️ 要求 - **在 Apple Silicon 上运行 macOS 14+。** - **窗口透明度 / 模糊 / 保持置顶**需要**禁用 SIP**并添加 `-arm64e_preview_abi` 启动参数 —— 这些设置允许将 payload 注入到 Dock 中。首次使用会提示输入一次管理员密码以安装脚本组件;之后它会静默加载。*(显示器 / HiDPI / 亮度 / 暖色调功能无需这些即可运行。)* - **画中画**功能需请求一次辅助功能权限。 ## 🔧 工作原理 - 禁用显示器使用私有 API `CGSConfigureDisplayEnabled`;强制 HiDPI 将面板镜像到一个固定在所需逻辑尺寸的私有 `SLVirtualDisplay` 上,“清晰 HiDPI”会在 `/Library/Displays/.../Overrides` 下写入显示器覆盖配置文件。 - 透明度注入了一个 payload 到 Dock(`task_for_pid` + 一个 arm64e 引导程序),通过专用的 unix socket 调用 `SLSSetWindowAlpha` / `SLSSetWindowBackgroundBlurRadius` / `SLSSetWindowLevel`。注入技术改编自 [yabai](https://github.com/koekeishiya/yabai)(MIT 许可证);详见 `sa/loader.m`。 - 暖色调使用公开的 `CGSetDisplayTransferByTable` 加载每个通道的 gamma 渐变;亮度增强是一个无边框的 EDR 覆盖层(`CAMetalLayer`,正片叠底混合),每一帧都会根据实时的 `maximumExtendedDynamicRangeColorComponentValue` 进行限制。 - 画中画通过辅助功能 API(`AXUIElement`)调整/移动真实窗口,并复用“保持置顶”功能实现浮动效果。 由于这些是私有 API,其行为可能会在不同的 macOS 版本之间发生变化。 ## 🗂️ 项目结构 ``` src/ main.m app entry point app/ AppDelegate — status item, menu, UI display/ DisplayManager, HiDPIInjector, Brightness, BrightnessBooster (EDR boost), ColorTemperature (warmth) transparency/ WindowTransparency — in-app client for the Dock payload window/ WindowPiP — Accessibility-based picture-in-picture power/ Caffeine — keep-awake power assertion common/ DDUtil — shared error/AppleScript helpers sa/ scripting addition injected into Dock (loader.m, payload.m) tools/ build_icon.m — generates AppIcon.icns resources/ Info.plist ``` ## ❓ 常见问题 **这会损害我的 Mac 吗?** 不会。它使用的是 Apple 自身的框架(无需内核扩展),并且它执行的所有操作都是可逆的 —— 显示器会重新启用,暖色调和亮度会重置,窗口会恢复,退出应用程序会撤销实时的覆盖层。 **亮度增强是真实的,还是仅仅是一个调暗的把戏?** 真实的。它是一个 EDR(扩展动态范围)覆盖层,可驱动面板超过其正常的 100%,每一帧都被限制在显示器的*实际*余量范围内 —— 在标准面板上提升适中,在 XDR/HDR 面板上提升明显。它会保留色彩,并在 Mission Control 期间自动暂停。 **为什么窗口透明度需要禁用 SIP?** 使其他应用程序的窗口透明意味着需要向 Dock 注入一个小的 payload,macOS 仅允许在关闭 SIP 并加上 `-arm64e_preview_abi` 启动参数的情况下执行此操作。其他所有功能 —— 显示器控制、HiDPI、亮度、暖色调、保持唤醒 —— 在原装机器上即可工作。 **它可以在 Intel Mac 上运行吗?** 不能 —— 仅限 Apple Silicon。增强功能依赖于 EDR,且 Dock 注入路径为 arm64e。 **更新会重置我的设置吗?** 不会。亮度、暖色调和各应用的偏好设置保存在您的用户默认配置中,并在更新后依然有效。 ## 💖 支持与赞助 DisplayDeck 是免费的开源软件,没有跟踪或广告。如果它对您有用,您可以通过付费支持持续开发 —— 随意支付,支持一次性或按月支付:

Donate once via Stripe   Sponsor monthly via Stripe

## 📄 许可证 [MIT](LICENSE) © 2026 Omar Abdrabo
标签:CVE监控, Objective-C, 显示器管理, 桌面工具, 窗口管理, 菜单栏应用