RL RanceLee的博客
← 返回主页

Mac 常醒助手

作者信息
公众号:HelloRanceLee · 博客:https://blog.discoverlabs.ac.cn/
微信:en297171205 · 小红书:HelloRanceLee

随手附个广告 📚

我有《Obsidian 实战手册》¥29.9
预设文件夹和插件的 OB 模板仓库 ¥49.9(PDF+仓库)
以及《AI 实战手册》¥29.9
微信 en297171205


🌐 English version →(海外用户请走 Gumroad 购买,$3.99)

⬇️ 下载最新版本 v1.8 · 更新于 2026-05-30 · 售价 29.9 元 · 微信 en297171205 / 小红书 HelloRanceLee · 10 语言自动检测系统语言

它是做什么的

Mac 常醒助手 是一个 macOS 菜单栏小程序,用来自动切换 Mac 的睡眠策略。状态栏会一直显示当前状态:

接电源时 拔电源时
状态栏显示「常醒」 状态栏显示「休眠」

它的默认模式是 插电常醒

  • 接通电源时:尽量保持 Mac 常醒,适合下载、渲染、跑自动化任务、远程连接等场景
  • 拔掉电源时:自动恢复正常休眠,避免离开电源后继续耗电
  • 手动退出时:会先恢复正常休眠,不会把系统一直留在常醒状态
  • 开机自动启动:默认跟随登录启动,也可以在菜单里取消勾选「开机自动启动」

它也提供 永不休眠 模式:无论是否接电源,都尽量保持常醒。

还提供 夜间休眠时段:你可以设个时段(比如 23:00-07:00)让 Mac 在你睡觉时也休眠,到结束时间它会自动唤醒并恢复插电常醒(合盖也能醒,系统级定时唤醒)。

适合谁

  • 希望 Mac 接电源时不中断任务的人
  • 经常远程连回家里 Mac 的人
  • 需要让下载、同步、渲染、自动化脚本持续运行的人
  • 想让 Mac 跟着自己作息走(白天常醒、夜里休眠)的人
  • 不想每次手动改系统睡眠设置的人

如果你只是偶尔临时防止屏幕熄灭,系统自带设置或其他免费工具可能已经够用。

购买与激活

软件下载本身是公开的,但核心功能需要激活后才能使用。

  • 售价:29.9 元
  • 购买方式一:小红书直接下单 → http://xhslink.com/o/395H8sYsCxt(点开就是商品页,付完款我私信发激活码)
  • 购买方式二:加微信 en297171205
  • 备用入口:小红书可以搜账号 HelloRanceLee 也能找到我
  • 付款后我会发你一个激活码
  • 一个激活码绑定一台 Mac

未激活时,插电常醒永不休眠 两个模式会置灰,程序会保持系统正常休眠。

加微信时请认准下面这个头像和名字,避免加错人:

微信名片:RanceLee,微信号 en297171205

完整安装教程

下面九张图按步骤走完一遍。

第 1 步:下载并解压

点击上方 下载最新版本 按钮拿到 MacAwakeGuard-安装包.zip,双击解压会得到一个 MacAwakeGuard-安装包 文件夹。打开这个文件夹,里面有 3 个文件:

1. 先双击我安装.command
2. MacAwakeGuard.app
3. 使用说明.md

建议直接下载到系统自带的 下载(Downloads) 文件夹,并在这里解压。正常解压后会出现 MacAwakeGuard-安装包 文件夹,下面的修复命令也按这个默认路径写好,可以直接复制。

⚠️ 请双击 1 号文件,不要直接双击 2 号 .app,否则会触发 macOS 的最丑陋拦截弹窗(看起来像病毒,实际不是)。

第 2 步:跑安装脚本

双击 1. 先双击我安装.command请走 1 号脚本,不要双击 2 号 .app —— 1 号脚本会复制 App 到 ~/Applications/、清除安全标记、注册开机自启动。

如果你不希望它下次开机自动启动,安装完成后点菜单里的「开机自动启动」,取消勾选即可。以后升级重新安装,也会记住你的选择,不会偷偷改回自启动。

跑完终端会显示「安装完成」:

安装完成

如果 1 号文件提示「没有正确的访问权限」

如果你看到下面这个弹窗,说明 1 号安装脚本的执行权限丢了:

1 号安装脚本没有正确的访问权限

处理方法:

  1. 打开 macOS 自带的 终端(按 Command + 空格,输入 terminal,回车)。
  2. 复制下面这行,粘贴到终端里回车:
chmod +x ~/Downloads/MacAwakeGuard-安装包/"1. 先双击我安装.command"
  1. 回到 下载(Downloads)→ MacAwakeGuard-安装包 文件夹,重新双击 1. 先双击我安装.command

如果 2 号 App 提示「无法打开」

如果你看到下面这个弹窗,通常不是软件坏了,而是你直接点了 2 号 App:

2 号 MacAwakeGuard App 无法打开

不要直接打开 2 号。请回到文件夹里,双击 1. 先双击我安装.command,让 1 号脚本来安装和启动。

⚠️ macOS 14(Sonoma)及以上的用户:第一次双击 .command 时 macOS 可能直接拦下(弹「Apple 无法验证 1. 先双击我安装.command…」对话框,按钮只有「完成 / 移到废纸篓」,没有 Open)。这是 macOS 14+ 加严了对未公证 .command 文件的拦截——按下面第 2.5 步走系统设置放行后,重新双击 1. 先双击我安装.command,这次就能跑通。

第 2.5 步:遇到 macOS 拦截弹窗 → 一次性放行

macOS 在两个时机可能弹拦截,走同一套放行流程,区别只是被拦的对象(.command 脚本 vs .app 文件),实际看你 Mac 命中哪种:

  • 场景 A:你刚双击 1. 先双击我安装.command 时直接被拦——弹窗标题写「未打开 “1. 先双击我安装.command”」,描述写「Apple 无法验证 “1. 先双击我安装.command” 是否包含可能危害 Mac 安全或泄漏隐私的恶意软件」。这种是 macOS 14+ 对未公证 .command 文件的检查,最常见。
  • 场景 B:脚本跑完启动 App 时被拦——旧版 macOS 13 弹「(null)」并带 Open 按钮(直接点 Open 即可,跳到本节末尾的 macOS 13 路径);少数 macOS 14+ 配置也可能再拦一次 .app(弹「Apple 无法验证 MacAwakeGuard…」),按下面流程同样处理即可。

macOS 14(Sonoma)及以上:系统设置放行(一次性)

不管被拦的是 .command 脚本还是 .app 文件,三步操作放行:

第 1 步:弹窗里点 「完成」(千万不要点「移到废纸篓」——那会把脚本/App 直接删掉)。

macOS 14+ 拦截:「完成 / 移到废纸篓」

第 2 步:打开 系统设置 → 隐私与安全性,往下滚到 「安全性」 段,找到 「已阻止 “1. 先双击我安装.command”(或 “MacAwakeGuard”)以保护 Mac」 那一行,点右边的 「仍要打开」

系统设置 → 隐私与安全性 → 仍要打开

第 3 步:弹新对话框「打开 “1. 先双击我安装.command”?」(或 “…/MacAwakeGuard”),按钮里有「移到废纸篓 / 仍要打开 / 完成」三个——点中间的「仍要打开」,然后输入 Mac 登录密码。

仍要打开 二次确认对话框

放行完成。接下来:

  • 如果你是场景 A(.command 被拦):重新双击 1. 先双击我安装.command,这次会跑通整个安装;脚本最后会自动启动 .app(一般不再弹)。
  • 如果你是场景 B(.app 被拦):菜单栏右上角直接出现 Mac 常醒助手图标,不用再做别的。

macOS 13 及更早:弹「(null)」直接点 Open

老版 macOS 在 .app 启动时弹「(null)」警告,按钮里有 Open

macOS 13 旧版 (null) 警告

直接点 Open 即可。一次性。.command 在老版 macOS 一般不会被拦。


为什么会弹这些拦截:Apple 公证要 99 美元/年的开发者账号,目前销量还小,暂时没做。代价是这一次手动放行。一次性的,macOS 会记住「你已批准」,以后开机自启动不再弹。

罕见情况下上面流程都失败:在 Finder 里右键 ~/Applications/MacAwakeGuard.app → 选「打开」绕过,同样一次性。

第 3 步:菜单栏看到「未激活」

点 Open 之后,屏幕右上角菜单栏会出现 Mac 常醒助手图标,标题显示「未激活」。点开看到菜单:

菜单栏未激活状态

此时插电常醒、永不休眠都置灰用不了,需要先激活。

第 4 步:输入激活码

菜单点「输入激活码…」,弹窗里粘贴卖家发给你的激活码(HSGD- 开头):

输入激活码

点「激活」。

第 5 步:激活成功 → 复制权限配置

激活成功后弹窗:

激活成功弹窗

点「复制权限配置」按钮。它会复制一段 sudoers 命令到剪贴板。会再弹一个提示:

权限配置已复制

第 6 步:打开终端

Command + 空格 打开 Spotlight,输入 terminal,回车打开终端:

Spotlight 搜终端

第 7 步:粘贴权限配置

在终端里按 Command + V 粘贴刚才复制的命令,回车。会要你输入 Mac 登录密码(输密码时屏幕没回显是正常的,盲打就行)。看到 parsed OK 表示成功:

终端粘贴权限并 parsed OK

这条命令只授权本工具调用 pmset 切换睡眠开关与设置定时唤醒,不授权其他系统权限。配完一次永久生效。

第 8 步:点「立即刷新」

回到菜单栏 Mac 常醒助手,点「立即刷新」让它拿到新权限:

点立即刷新

状态栏图标会从「未激活」变成「常醒」(如果当前接电源)。装上就忘掉它,菜单栏会根据电源状态自动切换。

菜单里的「开机自动启动」可以随时开关:勾选表示下次登录自动启动,取消勾选表示下次登录不自动启动,不需要打开终端。

第 9 步(可选):设置夜间休眠时段

如果希望 Mac 跟着你的作息走(你睡觉时它也睡,省电),点开「夜间休眠时段」子菜单:

夜间休眠时段子菜单

点「设置时段…」输入开始和结束时间(HH:MM 格式,支持跨午夜如 23:00-07:00)。保存后:

  • 进入时段(如 23:00):Mac 立即休眠,即使插着电也睡
  • 时段内:自动维持休眠
  • 结束时段(如 07:00):Mac 会自动唤醒并恢复插电常醒(系统级定时唤醒,合盖也能醒)

此功能仅在「插电常醒」模式下生效,「永不休眠」模式会覆盖它。


后续软件升级时,回到这个页面下载最新版,解压后重新运行 1. 先双击我安装.command 即可,旧激活码自动保留。

当前版本没有经过 Apple 公证(Apple 开发者证书 99 美元/年,没做是目前销量还小,暂时没做)。脚本启动 App 时 macOS 会弹一次首次启动警告——按你 macOS 版本走第 2.5 步介绍的两条路径之一(Sonoma+ 走系统设置 → 隐私与安全性 → 仍要打开;macOS 13 及更早直接点 Open)。一次性,以后开机自启不再弹。


更新日志

v1.8 · 2026-05-08

  • 小更新(2026-05-30):菜单新增「开机自动启动」勾选项,用户可以直接开关登录自动启动,不再需要手动删除 LaunchAgent。升级脚本会尊重用户选择:如果用户关过自启动,重新安装新版不会自动改回开启
  • 修复(中高):「夜间休眠时段」结束后保持唤醒——v1.7 之前在合盖 + 插电状态下,RTC 准点唤醒成功,但 App 没有在 wake 瞬间把 disablesleep 设回 1,约 10 秒后被 macOS Clamshell Sleep 强制打回 sleep,导致本地 cron / agent 等定时任务跑不了。v1.8 注册 NSWorkspaceDidWakeNotification(AppKit 层)+ IORegisterForSystemPower(IOKit 底层)双路 sleep/wake 事件监听
  • 新增(中高):wake handler 走"快速恢复路径"——wake 瞬间先抢 applySleepDisabled:1 阻断 macOS Clamshell Sleep,再做完整状态 refresh。条件:已激活 + 插电常醒模式 + 不在夜间休眠时段 + AC 供电。永不休眠 / quiet hours 内 / 拔电状态都不抢锁,避免违背用户 intent
  • 行为不变:检查间隔默认仍是 30 分钟(不增加扫描频率);其他模式(永不休眠 / 不开 quiet hours)行为完全保持

v1.7 · 2026-05-07

  • 修复(中高):Quiet Hours 状态机全面收紧——apply / cancel / 启动 / 激活四条路径任何一处 syncRepeatWakeSchedule 失败时,都强制 quietHoursEnabled=NO + 持久化,并弹明确提示,不再留下"夜间休眠时段开着但没设自动唤醒"的半瘫
  • 修复(高):激活流程改为完全异步——之前 sendLicenseRequest: 用信号量在主线程同步等 15 秒,UI 冻结而且超时后回调写入栈变量是野指针风险。v1.7 改成 completion handler,URLSession 回调统一派发到主线程;菜单状态行新增"激活中…“显示进度;新增 isActivationInProgress 防多次连点造成并发请求
  • 修复(中)HSGRunCommand 双 pipe 改并发读取——之前先读 stdout 再读 stderr 再 wait 的顺序,在子进程大量写 stderr 时仍可能死锁。v1.7 用 dispatch_group_async 并发读两个 pipe,再 waitUntilExit,彻底消除任何 stderr/stdout 大小关系下的死锁
  • 修复(中)applicationWillTerminate + restoreAndQuit 都补 best-effort cancelRepeatWake——之前菜单退出和系统正常终止路径只 restore disablesleep,遗漏了 App 设置的 pmset repeat,用户重启 Mac 后系统仍会半夜醒来
  • 修复(中):安装脚本改用 osascript 礼貌退出 + pkill fallback——CodeX 实测确认 pkill -TERMlaunchctl bootout SIGTERM 都不会触发 applicationWillTerminate,原方案依赖 pkill 触发清理是错的。v1.7 改成先 osascript 礼貌让 App 走标准 terminate 流程清状态,等最多 5 秒,超时再 pkill 兜底
  • 修复(中):版本号比较前清洗 v 前缀和 -rc1 后缀——之前远端误填 v1.4 / 1.4-rc1 会被 NSNumericSearch 永远判定有新版
  • 修复(中):安装脚本不再无脑 rm -rf bundle——先杀旧实例(osascript polite + pkill fallback)等 1 秒让 applicationWillTerminate 把 disablesleep 还原干净再删,避免双 MacAwakeGuard 进程同时跑互相覆盖 pmset
  • 修复(低)applyRepeatWakeAtHour pmset 写入成功但 canonical 读取失败时整体视为失败,不再留下"claimed=YES 但 canonical=空"的不可验证状态
  • i18n:新增 status.activatingdialog.quiet_hours_auto_disabled.{title,body_format}dialog.quiet_hours_off_partial.{title,body_format}(10 语言全覆盖)

v1.6 · 2026-05-07

  • 修复:pmset 所有权检查现在 apply 和 cancel 两条路径都做——v1.5 只在 cancel 路径做 canonical 严格比对,apply 路径在 wakeScheduleClaimed=YES 时仍跳过「已有 schedule 确认」弹窗,可能静默覆盖用户手动改过的 schedule。v1.6 在 apply 入口先验证所有权,不一致就清 claimed 状态让流程自然走确认弹窗
  • 修复:用户在「已有 schedule 确认」弹窗点 Cancel 时,Quiet Hours 不再保存为开启——v1.5 这里有半瘫 bug:到点 Mac 会休眠但没设自动唤醒计划,等于"夜间睡了但早上不醒”。v1.6 改成 sync 失败时 revert 所有内存状态 + 不写 NSUserDefaults
  • 修复pmset -g sched 读取区分三态(成功有 events / 成功无 events / 命令失败)。用户手动 pmset repeat cancel 删过 schedule 后,App 的 cancel 会识别为"已无 events"清掉 claimed 状态返回成功,不再留下"检测到非本工具设置的定时唤醒"的错误提示
  • 清理:删除旧版升级迁移逻辑——会制造"claimed=YES 但没 canonical"的状态,叠加 apply 路径所有权验证后反而每次启动多绕一圈
  • i18n:新增 error.read_wake_schedule_failed(10 语言同步),用于 pmset -g sched 命令本身执行失败的情况

v1.5 · 2026-05-07

  • 修复pmset repeat 防误删机制升级——v1.4 只比对 hour/minute,可能误判同时刻的其他事件;v1.5 改成 canonical 字符串严格比对:App 设置 schedule 后立即记录 pmset -g sched 原始输出作为基线,cancel 前比对完整字符串;多条 repeating event 一律保守跳过 cancel
  • 修复:cancel 跳过后没清 wakeScheduleClaimed 的 bug——v1.4 用户改过 schedule 后,下次再开 quiet hours 会跳过「已有 schedule 确认」弹窗静默覆盖;v1.5 失去所有权时立即清 claimed 状态,下次重新走确认弹窗
  • 文档:英文页 Try-before-buy 验收清单去掉「(null) 警告可点击」的措辞(macOS 14+ 用户没有 Open 按钮,措辞会误导)
  • 文档:海外邮件 Permission Setup Failed 模板的手动 sudoers fallback 规则同步 App copyPermissionCommand 完整版(之前少 4 条)
  • 仓库清理.claude/ 加入 .gitignore

v1.4 · 2026-05-07

  • 修复:「退出并恢复正常休眠」失败弹窗按钮文案不准确,改成「复制权限配置 / 重试 / 仍然退出」三个明确选项(之前第三个按钮复用「稍后」容易被误读为「暂不处理」)
  • 修复:夜间定时唤醒的错误现在会显示在菜单状态行(之前 wakeScheduleError 已经独立保存但没纳入菜单显示优先级,可能被普通刷新覆盖)
  • 修复pmset repeat cancel 加防误删机制——cancel 前会比对当前系统 pmset -g sched 与 App 自己设过的 schedule(hour/minute/weekdays),不一致则跳过 cancel 并提示用户检查
  • 文档:完整重写 macOS 14+(Sonoma)首次启动警告的处理流程:两种拦截场景(双击 .command 被拦 / .app 被拦)+ 通用系统设置放行流程 + 3 张图文示例
  • 文档:国内 README 的 sudoers 授权范围说明补足,明确覆盖夜间唤醒所需的 pmset repeatpmset schedule 子命令

v1.3 · 2026-05-07

  • 修复:Worker 端激活改用条件 UPDATE,杜绝两台机器几乎同时激活同一个码时的竞态覆盖
  • 修复:夜间定时唤醒的设置错误现在用单独字段保留,不再被普通刷新覆盖;权限不足时弹窗提示重新复制权限配置
  • 修复:从「永不休眠」切回「插电常醒」时,如果当前已经在夜间时段内,App 会立即让 Mac 休眠(之前会卡住直到下次时段开始)
  • 修复:「退出并恢复正常休眠」如果 sudoers 失效,不再静默退出 — 弹窗提供「复制权限配置 / 重试 / 仍然退出」三个选择
  • 修复:德语 .strings 文件中双引号未转义导致整个文件无法解析,德语用户现在能看到正确的本地化 UI
  • 文案:「夜间休眠时段」开启时检测已有 pmset 计划的描述改为更准确的「弹窗提示,降低误覆盖风险」(之前的「完全保留」是过度承诺)

v1.2 · 2026-05-07

  • 10 语言 UI:自动检测系统语言(中文 / English / 日本語 / Español / 한국어 / Deutsch / Français / Português / Русский)
  • 新增:自动检查更新(每 24 小时静默检查一次,菜单可手动触发)
  • 修复:开启「夜间休眠时段」前检测已有 pmset repeat 计划并弹窗提示,降低误覆盖风险
  • 修复:分发包签名实际生效(之前 codesign 失败被吞掉,导致客户解压后被 Gatekeeper 严格验证拒绝)
  • 修复:服务端授权配置缺失时,错误信息从「激活码不存在」改为「授权服务配置缺失」,便于排查

v1.1 · 2026-05-06

  • 新增:「夜间休眠时段」功能,到点 Mac 自动休眠 + 时段结束自动唤醒(即使合盖也能醒,系统级 pmset repeat wakeorpoweron
  • 子菜单可设置时段(支持跨午夜)和检查间隔

v1.0 · 2026-05-04

  • 首发:「插电常醒」+「永不休眠」两个核心模式
  • 菜单栏图标显示当前状态
  • 激活码 + 一码一台 Mac 绑定

如有问题欢迎到公众号 HelloRanceLee 留言。