Skip to content

Commit 88ccd6f

Browse files
ddasyclaude
andcommitted
Add "息屏" (Screen Off): dim built-in + DDC-off external, no render stall
New "息屏 / Screen Off" end action, placed at the top of "When Time's Up". Instead of sleeping the display (which downclocks the GPU and stalls renders), it goes truly black while keeping everything awake: - built-in display: brightness → 0 via DisplayServices (also the GPU's wake anchor so rendering keeps running) - external display: DDC/CI power-off (IOAVService, VCP D6=0x04) for a real black, not just dim - caffeinate -dis; no screen lock On return, a global mouse-event monitor (after a 1.5s grace) restores the built-in brightness and re-lights the external by forcing a DisplayPort link retrain (brief resolution toggle) — the external can't be woken over DDC once its panel is off. Also rename 熄屏 → 息屏 across the Chinese UI and both READMEs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017nR7Fg1zHxacjNKoqQzorD
1 parent 5c6db45 commit 88ccd6f

3 files changed

Lines changed: 189 additions & 12 deletions

File tree

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,11 @@ Click the 💤 icon in the menu bar:
9696
| | 5 / 10 / 15 / 30 min, 1 hour | Starts a countdown; **click again to cancel** |
9797
| | Custom… | Enter any number of minutes; **remembered & pre-filled** next time |
9898
| | Never | Keep the screen on forever (menu bar shows ``) |
99-
| **When Time's Up** | Lock Screen | Lock only |
99+
| **When Time's Up** | Screen Off | **Built-in** brightness → 0 and **external** display → DDC power-off (both true black, **no lock**); keeps things awake so the GPU keeps rendering. On return, auto-restores brightness and re-lights the external via a DisplayPort link retrain |
100+
| | Lock Screen | Lock only |
100101
| | Lock & Turn Off Display | Lock + power down the display |
101102
| | Lock, Off & Sleep | Lock + put the Mac to sleep |
103+
| | Lock, Off & Stay Awake | Lock + power down the display, but keep the system awake |
102104
| **Timed Lock** | Timed Lock… | A two-line dialog: **"Lock after `[N]` min idle"** and **"Run for `[M]` min, then stop."** Auto-locks every time you're idle that long, until the time's up. **Click again to stop.** Both values are remembered & pre-filled |
103105
| **Language** | English · 中文 · Español · العربية · Português (Brasil) · 日本語 · Deutsch | Switch the whole menu instantly |
104106
| **Launch at Login** | toggle | Auto-start when you log in (a standard macOS Login Item). `install.sh` turns it **on** by default — uncheck here to disable |
@@ -116,6 +118,8 @@ SleepBar is a friendly menu-bar wrapper around capabilities already built into m
116118
|---|---|
117119
| Keep awake / countdown | `caffeinate -dis -t <seconds>` (no `sudo`, auto-expires) |
118120
| Turn off display | `pmset displaysleepnow` |
121+
| Screen Off — built-in | `DisplayServicesSetBrightness` to 0 + `caffeinate -dis`; `IOHIDSystem` `HIDIdleTime` watches for your return and auto-restores brightness |
122+
| Screen Off — external | `IOAVServiceWriteI2C` sends DDC power-off (VCP `D6=04`) for true black; on return, a brief resolution switch (`CGConfigureDisplayWithDisplayMode`) forces a DisplayPort link retrain to re-light it |
119123
| Sleep | `pmset sleepnow` |
120124
| Lock screen | `SACLockScreenImmediate` from `login.framework` |
121125
| Timed Lock — idle detection | `CGEventSource.secondsSinceLastEventType` (read-only system idle time; **no Accessibility permission**) |

README.zh-CN.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@
2121

2222
睡前你常常想再给电脑安排点事 —— 让脚本跑完、让 AI 把任务处理完、等下载结束。但 macOS 的「关闭显示器」时间是**固定**的:这次想撑 5 分钟,下次想撑 1 小时,每次都要钻进系统设置里改来改去,太麻烦。
2323

24-
**SleepBar** 把这件事搬到菜单栏:点一下,选个时长,这段时间屏幕保持常亮;**到点后自动锁屏、熄屏,甚至直接休眠** —— 你想怎样,它就怎样。任务跑完,电脑也睡了。
24+
**SleepBar** 把这件事搬到菜单栏:点一下,选个时长,这段时间屏幕保持常亮;**到点后自动锁屏、息屏,甚至直接休眠** —— 你想怎样,它就怎样。任务跑完,电脑也睡了。
2525

2626
> 全程不修改你的系统设置、不需要 `sudo`。计时一结束就恢复原状。
2727
2828
## ✨ 功能特性
2929

3030
- ⏱️ **倒计时关屏** —— 预设 5 / 10 / 15 / 30 分钟、1 小时,或**自定义任意时长**,菜单栏实时显示剩余时间。
31-
-**立即执行** —— 不想等倒计时?点「立即」一键直接锁屏 / 熄屏 / 休眠。
31+
-**立即执行** —— 不想等倒计时?点「立即」一键直接锁屏 / 息屏 / 休眠。
3232
- 🔒 **锁屏** —— 到点把屏幕锁到登录界面。
33-
- 🖥️ **熄屏** —— 锁屏的同时关闭显示器,更省电
33+
- 🖥️ **息屏** —— 「锁定并息屏」锁屏 + 关显示器更省电;另有独立的「息屏」让**内置屏亮度调到 0、外接屏经 DDC 关到真黑**(都不锁屏、不休眠显示器),屏幕全黑但 GPU 渲染不停摆,适合挂着跑渲染 / AI 任务过夜;回来动一下键鼠自动恢复(外接屏靠 DisplayPort 链路重训点亮)
3434
- 💤 **休眠** —— 到点直接让整机进入睡眠。
3535
- ♾️ **强制不锁屏(永不)** —— 一键让屏幕一直常亮、绝不自动关闭,适合长任务 / 演示 / 看片。
3636
- 🔁 **定时锁屏** —— 一句话设定:*「无操作 **5** 分钟即锁屏,持续 **2** 小时后自动停止」*。两个数字、一句话:多久没动键鼠就锁、整件事跑多久。设定后,每次空闲到时长就自动锁一次,解锁后重新开始计时,直到「持续」时间结束。「持续」是固定倒计时,**锁屏 / 解锁都不会重置它****无需任何权限**(只读取系统空闲时间,绝不拦截输入)。
@@ -96,9 +96,11 @@ sleepbar
9696
| | 5 / 10 / 15 / 30 分钟、1 小时 | 选中即开始倒计时;**再点一次取消** |
9797
| | 自定义时长… | 弹窗输入任意分钟数,**记住并预填**上次的值 |
9898
| | 永不 | 屏幕一直常亮,绝不自动关闭(菜单栏显示 ``) |
99-
| **到时间后** | 锁定屏幕 | 仅锁屏 |
100-
| | 锁定并熄屏 | 锁屏 + 关闭显示器 |
101-
| | 锁定、熄屏并休眠 | 锁屏 + 直接休眠 |
99+
| **到时间后** | 息屏 | **内置屏**亮度调到 0、**外接屏**经 DDC 关屏(都真黑、**不锁屏**),保持唤醒、GPU 渲染不停摆;动一下键鼠**自动恢复**(外接屏靠链路重训点亮) |
100+
| | 锁定屏幕 | 仅锁屏 |
101+
| | 锁定并息屏 | 锁屏 + 关闭(休眠)显示器,更省电 |
102+
| | 锁定、息屏并休眠 | 锁屏 + 整机直接休眠 |
103+
| | 锁定、息屏且不休眠 | 锁屏 + 关闭显示器,但系统保持唤醒不休眠 |
102104
| **定时锁屏** | 定时锁屏… | 两行弹窗:**「无操作 `[N]` 分钟即锁屏」****「持续 `[M]` 分钟后自动停止」**。空闲到时长就自动锁一次,直到「持续」时间结束。**再点一次停止。** 两个值都会记住并预填 |
103105
| **语言** | 中文 · English · Español · العربية · Português (Brasil) · 日本語 · Deutsch | 整个菜单即时切换 |
104106
| **开机自启** | 开关 | 登录时自动启动(标准 macOS「登录项」)。install.sh 安装后默认**开启**,不需要就在这里取消勾选 |
@@ -115,7 +117,9 @@ SleepBar 只是把 macOS 自带的几个系统能力包了一层友好的菜单:
115117
| 功能 | 底层 |
116118
|---|---|
117119
| 保持常亮 / 倒计时 | `caffeinate -dis -t <秒>`(无 `sudo`,到点自动失效) |
118-
| 熄屏 | `pmset displaysleepnow` |
120+
| 关闭显示器 / 锁屏息屏 | `pmset displaysleepnow` |
121+
| 息屏 · 内置屏 | `DisplayServicesSetBrightness` 仅对内置屏调 0 + `caffeinate -dis`;用 `IOHIDSystem``HIDIdleTime` 检测回归后自动恢复亮度 |
122+
| 息屏 · 外接屏 | `IOAVServiceWriteI2C` 发 DDC 电源关(VCP `D6=04`)关到真黑;回来时切一次分辨率再切回(`CGConfigureDisplayWithDisplayMode`)强制 DP 链路重训点亮 |
119123
| 休眠 | `pmset sleepnow` |
120124
| 锁屏 | `login.framework``SACLockScreenImmediate` |
121125
| 定时锁屏 —— 空闲检测 | `CGEventSource.secondsSinceLastEventType`(只读系统空闲时间,**无需辅助功能权限**) |

0 commit comments

Comments
 (0)