<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pmset on Tuan's Blog</title><link>https://blog.cloudorz.com/tags/pmset/</link><description>Recent content in Pmset on Tuan's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>mt</copyright><lastBuildDate>Sun, 01 Nov 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://blog.cloudorz.com/tags/pmset/index.xml" rel="self" type="application/rss+xml"/><item><title>MacBook 插电合盖不睡、用电池照常休眠</title><link>https://blog.cloudorz.com/p/macbook-lid-closed-no-sleep-on-ac/</link><pubDate>Sun, 01 Nov 2026 10:00:00 +0800</pubDate><guid>https://blog.cloudorz.com/p/macbook-lid-closed-no-sleep-on-ac/</guid><description>&lt;img src="https://blog.cloudorz.com/p/macbook-lid-closed-no-sleep-on-ac/cover.svg" alt="Featured image of post MacBook 插电合盖不睡、用电池照常休眠" /&gt;&lt;h2 id="起因"&gt;起因&#10;&lt;/h2&gt;&lt;p&gt;MacBook 插着电源挂着 SSH、下载、编译或者跑 Agent，想合上盖子让它自己跑，结果一合盖，系统就睡了，任务全断。&lt;/p&gt;&#10;&lt;p&gt;我想要的效果是：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;插着电源&lt;/strong&gt;：合盖不睡眠，任务继续跑；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;用电池&lt;/strong&gt;：合盖照常休眠，别在包里把电池耗光。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="原理"&gt;原理&#10;&lt;/h2&gt;&lt;p&gt;macOS 合盖时会强制睡眠，&lt;code&gt;caffeinate&lt;/code&gt; 和 KeepingYouAwake 这类防休眠工具都挡不住。能挡住的只有系统级开关：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo pmset -a disablesleep &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;问题是这个开关是&lt;strong&gt;全局&lt;/strong&gt;的，不区分电源。打开以后，用电池合盖也不会睡。所以需要一个工具在&lt;strong&gt;插电时打开、拔电时关闭&lt;/strong&gt;它。这里用 &lt;strong&gt;Amphetamine + Power Protect&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="工作原理" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cloudorz.com/p/macbook-lid-closed-no-sleep-on-ac/principle.svg"&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Amphetamine&lt;/strong&gt;：Mac App Store 免费下载，无广告、无内购，支持按条件自动启动会话（Trigger）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Power Protect&lt;/strong&gt;：Amphetamine 官方配套脚本，需要单独安装。它让 Amphetamine 可以免密切换 &lt;code&gt;disablesleep&lt;/code&gt;，并保证合盖状态下插拔电源时行为正确。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="配置步骤"&gt;配置步骤&#10;&lt;/h2&gt;&lt;h3 id="1-安装-amphetamine-并设为开机自启"&gt;1. 安装 Amphetamine 并设为开机自启&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;Mac App Store 搜索 &lt;strong&gt;Amphetamine&lt;/strong&gt; 并安装。&lt;/li&gt;&#10;&lt;li&gt;打开后菜单栏会出现一个药丸图标。&lt;/li&gt;&#10;&lt;li&gt;点图标 → &lt;strong&gt;Preferences&lt;/strong&gt; → &lt;strong&gt;General&lt;/strong&gt; → 勾选 &lt;strong&gt;Launch Amphetamine at login&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Amphetamine 必须在运行，Trigger 才会生效。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="2-安装-power-protect"&gt;2. 安装 Power Protect&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;在 Amphetamine 里手动启动一次合盖模式会话：会话选项中取消勾选 &lt;em&gt;Allow system sleep when display is closed&lt;/em&gt;，然后启动。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Apple Silicon 机型会弹出 Power Protect 提示，点 &lt;strong&gt;Learn More&lt;/strong&gt;，按链接下载并安装。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;安装时用 Touch ID 或管理员密码确认。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;在终端验证是否装好：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo -n pmset -a disablesleep &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;OK：免密生效&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;输出 &lt;code&gt;OK&lt;/code&gt; 说明成功；如果提示需要密码，说明没装成功。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;安全性&lt;/strong&gt;：Power Protect 只为 &lt;code&gt;pmset -a disablesleep 1&lt;/code&gt; 和 &lt;code&gt;pmset -a disablesleep 0&lt;/code&gt; 两条命令添加 sudo 免密规则，不能拿来提权，其他 sudo 操作照旧需要密码。可以用 &lt;code&gt;sudo ls /etc/sudoers.d/&lt;/code&gt; 找到对应文件，确认里面只有这两条命令。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h3 id="3-开启-triggers"&gt;3. 开启 Triggers&#10;&lt;/h3&gt;&lt;p&gt;Preferences → &lt;strong&gt;Triggers&lt;/strong&gt; → 勾选顶部的 &lt;strong&gt;Enable Triggers&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;h3 id="4-创建插电不睡的-trigger"&gt;4. 创建“插电不睡”的 Trigger&#10;&lt;/h3&gt;&lt;p&gt;点左下角 &lt;strong&gt;+&lt;/strong&gt; 新建 Trigger：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Name&lt;/strong&gt;：随意，例如 &lt;code&gt;dont sleep when adapter plugin&lt;/code&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Criteria&lt;/strong&gt;：点 &lt;strong&gt;+&lt;/strong&gt;，选择 &lt;strong&gt;Battery &amp;amp; Power Adapter&lt;/strong&gt;，双击编辑：&#10;&lt;ul&gt;&#10;&lt;li&gt;滑块拖到最左边，或拖到 10% 左右当作保险；&lt;/li&gt;&#10;&lt;li&gt;❌ &lt;strong&gt;不要勾选&lt;/strong&gt; &lt;code&gt;…or power adapter is connected&lt;/code&gt;；&lt;/li&gt;&#10;&lt;li&gt;✅ &lt;strong&gt;勾选&lt;/strong&gt; &lt;code&gt;Only when power adapter is connected&lt;/code&gt;。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Additional Options&lt;/strong&gt;：&#10;&lt;ul&gt;&#10;&lt;li&gt;✅ &lt;code&gt;Allow display to sleep&lt;/code&gt;：屏幕可以熄灭，省电也护屏，不影响任务运行；&lt;/li&gt;&#10;&lt;li&gt;❌ &lt;code&gt;Allow system to sleep when display is closed&lt;/code&gt;：&lt;strong&gt;不勾&lt;/strong&gt;，这是合盖不睡的关键；&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Allow screen saver to run after&lt;/code&gt;：无所谓。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;最后点 &lt;strong&gt;Save&lt;/strong&gt;。配置好之后大概是这样：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Trigger 配置示意" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cloudorz.com/p/macbook-lid-closed-no-sleep-on-ac/trigger-settings.svg"&gt;&lt;/p&gt;&#10;&lt;p&gt;编辑完成后，条件列表里应该只有这一条：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Criterion&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Value(s)&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Battery &amp;amp; Power Adapter&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Only when power adapter is connected&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h4 id="常见坑别用或逻辑"&gt;常见坑：别用“或”逻辑&#10;&lt;/h4&gt;&lt;p&gt;不要配置成“电量 ≥ 100% &lt;strong&gt;或&lt;/strong&gt; 电源已连接”。充满电后拔电，电量仍是 100%，条件继续成立，会话会在电池下保持不睡：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="两种条件写法的区别" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cloudorz.com/p/macbook-lid-closed-no-sleep-on-ac/criteria-pitfall.svg"&gt;&lt;/p&gt;&#10;&lt;h3 id="5可选低电量保险"&gt;5.（可选）低电量保险&#10;&lt;/h3&gt;&lt;p&gt;Preferences → &lt;strong&gt;Battery&lt;/strong&gt; → 开启“电量低于 10% 时结束会话”之类的选项。万一哪次拔电后没恢复，也不会把电池耗光。&lt;/p&gt;&#10;&lt;h2 id="验证"&gt;验证&#10;&lt;/h2&gt;&lt;h3 id="状态切换开盖即可测"&gt;状态切换（开盖即可测）&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;操作&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;预期结果&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;插上电源&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;菜单栏药丸图标变为激活状态&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;拔掉电源&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;几秒内图标恢复为未激活&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;随时可以查看系统开关的状态：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pmset -g &lt;span class="p"&gt;|&lt;/span&gt; grep -i sleepdisabled &lt;span class="c1"&gt;# 1 = 合盖不睡，0 = 正常&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;插电时应该是 &lt;code&gt;1&lt;/code&gt;，拔电后应该是 &lt;code&gt;0&lt;/code&gt;：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="终端验证" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.cloudorz.com/p/macbook-lid-closed-no-sleep-on-ac/verify-terminal.svg"&gt;&lt;/p&gt;&#10;&lt;h3 id="合盖实测"&gt;合盖实测&#10;&lt;/h3&gt;&lt;p&gt;在终端跑一个持续任务：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ping 1.1.1.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;测试 A：插电合盖&lt;/strong&gt;。等 2 分钟后开盖，ping 没有中断就是成功 ✅&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;测试 B：合盖状态下拔电&lt;/strong&gt;。等 2 分钟后开盖，查看睡眠日志：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pmset -g log &lt;span class="p"&gt;|&lt;/span&gt; grep -E &lt;span class="s2"&gt;&amp;#34;Sleep |Wake &amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; tail -5&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;拔电之后的时间点有 Sleep 记录，说明电池下正常休眠 ✅&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="排查与还原"&gt;排查与还原&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Trigger 不生效&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;确认 Amphetamine 正在运行；&lt;/li&gt;&#10;&lt;li&gt;确认 Enable Triggers 已经勾选；&lt;/li&gt;&#10;&lt;li&gt;确认 Trigger 本身处于启用状态。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;拔电后没睡&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;检查 &lt;code&gt;sleepdisabled&lt;/code&gt; 是否仍是 &lt;code&gt;1&lt;/code&gt;；&lt;/li&gt;&#10;&lt;li&gt;检查 Criteria 是否误用了“或”逻辑；&lt;/li&gt;&#10;&lt;li&gt;检查 Power Protect 是否装好，用第 2 步的免密命令测试。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;strong&gt;完全还原&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;删除或停用 Trigger，退出 Amphetamine；&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;删除 &lt;code&gt;/etc/sudoers.d/&lt;/code&gt; 里 Power Protect 对应的文件；&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;执行下面的命令，确保合盖睡眠恢复：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo pmset -a disablesleep &lt;span class="m"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="注意事项"&gt;注意事项&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;合盖运行时散热比开盖差，长时间重负载的任务尽量放在通风的硬表面上，别放在包里或床上。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;disablesleep&lt;/code&gt; 是全局开关，重启后依然保留。如果卸载 Amphetamine 前它是 &lt;code&gt;1&lt;/code&gt;，记得手动改回 &lt;code&gt;0&lt;/code&gt;。&lt;/li&gt;&#10;&lt;li&gt;想用开源方案的话，&lt;a class="link" href="https://github.com/sshipanoo/agenton" target="_blank" rel="noopener"&#10; &gt;Agent On&lt;/a&gt; 的逻辑和这套配置一致：插电禁用合盖睡眠，拔电立即恢复。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item></channel></rss>