指南/Mac为什么无法睡眠

Mac为什么无法睡眠?如何找出是什么让它保持唤醒

Atta 🐬

Vitals创始人

发布于

简要回答

打开“终端”并运行pmset -g assertions。在“Listed by owning process”下面,每一行都列出一个正在阻止睡眠的App、持续了多久,以及它给出的原因。活动监视器会在“能耗”标签页的“防止睡眠”列中把同样的App标为“是”。常见原因有:浏览器标签页里没关的视频或通话、下载或备份、仍在运行的caffeinate命令,以及让Mac接通电源时保持唤醒的设置。在MacBook上,Vitals系统监控工具无需“终端”就能在“电池”标签页和菜单栏中列出这些App,并附上原因和持续时间。

如何找出是什么让Mac无法睡眠

  1. 01 打开“终端”并运行pmset -g | grep sleep。如果有东西在阻止睡眠,sleep这一行的末尾会有类似(sleep prevented by Google Chrome, powerd)的说明。
  2. 02 运行pmset -g assertions查看详情。在“Listed by owning process”下面,每一行都给出App及其PID、它阻止睡眠多久了、阻止的类型,以及named一词后面它给出的原因,例如"Video Wake Lock"。
  3. 03 忽略powerd的"Prevent sleep while display is on"和UserIsActive这几行。它们只表示你正在使用Mac,你停下来后就会消失。
  4. 04 打开活动监视器,点按“能耗”,查看“防止睡眠”列。标为“是”的就是同样的App,你可以直接在那里退出它。
  5. 05 退出这个App,或者关掉它正在做的事:播放视频的标签页、通话、下载。再运行一次pmset -g assertions,确认那一行已经消失。

Mac能睡眠但总是醒来,是另一个问题,有它自己的日志。请参阅下面的“Mac自己醒来时”。

只要没有东西要求它别睡,Mac就会睡眠。App通过创建电源断言来提出要求:macOS会记录下这个请求,附带App的名称和原因。视频播放器、通话、下载或备份提出这个要求都有正当理由。麻烦在于请求比理由活得更久:一个播放着静音视频的标签页,一个在另一个标签页里已经结束的通话,一个你忘在终端窗口里的caffeinate。下表把你看到的现象与可能的原因和查看位置对应起来。

Mac为什么一直保持唤醒

你注意到的现象可能的原因查看位置
屏幕一直不关 有App让显示器保持点亮:视频、通话、演示 pmset -g assertions: PreventUserIdleDisplaySleep
屏幕关了,但Mac一直不睡眠 下载、备份、同步或构建让系统保持唤醒 pmset -g assertions: PreventUserIdleSystemSleep
接通电源时从不睡眠 某个设置让它在接通电源时保持唤醒 “系统设置”→“电池”→“选项”,台式Mac则在“节能”中
它睡眠后,半夜又自己醒来 定时维护、网络或连接的设备 pmset -g log和pmset -g sched
运行过某条“终端”命令后一直保持唤醒 caffeinate仍在运行 活动监视器:搜索caffeinate
其他设备使用它的网络连接时一直保持唤醒 互联网共享 “系统设置”→“通用”→“共享”

各种断言类型的含义

pmset -g assertions中的每一行都会列出一种类型。其中三种会让Mac保持唤醒。其余的只是记录,看到它们很正常。

  • PreventUserIdleDisplaySleep或NoDisplaySleepAssertion:让屏幕保持点亮,Mac也随之保持唤醒。视频播放器、视频通话和演示会用它。
  • PreventUserIdleSystemSleep或NoIdleSleepAssertion:让Mac保持唤醒,但屏幕可以关闭。下载、备份、播放音乐和构建会用它。
  • PreventSystemSleep:接通电源时即使合上盖子也让Mac保持唤醒。很少见,通常是系统服务。
  • UserIsActive、BackgroundTask和ApplePushServiceTask:只是记录,本身不会阻止睡眠。

Mac自己醒来时

已经睡眠的Mac仍然可能在屏幕关闭的情况下自己短暂醒来,去收邮件、同步、备份或做维护。macOS把这称为“暗唤醒”(dark wake)。一晚上几次是正常的。几十次,或者屏幕亮起的完全唤醒,就说明是某个设备或设置的问题。

  1. 运行pmset -g log | grep -E "Wake from|DarkWake from" | tail -20查看最近20次唤醒。“due to”后面的文字说明了原因:lid表示你打开了盖子,rtc/Maintenance是定时维护唤醒,而USB、蓝牙或网络设备的名称则指向那个设备。
  2. 运行pmset -g sched查看macOS计划在稍后进行的唤醒,以及每次唤醒是系统的哪个部分要求的。
  3. 如果是某个设备在唤醒Mac,过夜时拔掉它,看看唤醒是否停止。
  4. 如果原因是网络唤醒,将“唤醒以供网络访问”设为“仅使用电源适配器时”或“永不”:MacBook在“系统设置”→“电池”→“选项”中,台式Mac在“系统设置”→“节能”中。

有意让Mac保持唤醒的设置

有些设置本来就是为了让Mac保持唤醒。在寻找出问题的App之前,先检查这些设置。

  • 在MacBook上:“系统设置”→“电池”→“选项”中的“使用电源适配器供电且显示器关闭时,防止自动进入睡眠”。
  • 在台式Mac上:“系统设置”→“节能”中的“显示器关闭时,防止自动进入睡眠”。
  • “系统设置”→“通用”→“共享”中的“互联网共享”,其他设备使用Mac的网络连接时,它会让Mac保持唤醒。
  • “系统设置”→“锁定屏幕”中将显示器关闭时间设为“永不”,这会让屏幕一直亮着,Mac也随之保持唤醒。

caffeinate,以及按需让Mac保持唤醒的App

caffeinate是让Mac在它运行期间一直保持唤醒的macOS命令。脚本和开发者工具会用它,防睡眠的菜单栏App也会用它。它在pmset -g assertions中以自己的名称显示,在活动监视器中显示为caffeinate。

如果是你启动的,在它的“终端”窗口中按下Control-C。如果不是,找出是哪个App启动的:在活动监视器中选取“显示”→“所有进程,分层显示”,在它的父进程下面找到caffeinate。退出父进程就能停止它。

Vitals能多做什么

在MacBook上,Vitals无需“终端”,就能用大白话指出是哪些App让它保持唤醒。

  • “电池”标签页中的“让此Mac保持唤醒”:每个App及其给出的原因(例如“正在播放视频”或“正在下载”)、它阻止睡眠多久了,以及是否让屏幕保持点亮
  • 有App阻止睡眠时,菜单栏下拉面板的“电池”部分也会显示同样的列表,合上盖子前就能检查
  • 浏览器无论有多少标签页在播放都只占一行,忘在终端里的caffeinate会显示为“已请求保持唤醒”
  • 没有东西阻止时显示“可以进入睡眠”

须知

  • 这个列表只在MacBook上提供。在Mac mini、iMac、Mac Studio或Mac Pro上,请用pmset -g assertions。
  • 它不包括macOS自身的进程,例如powerd、WindowServer以及接力期间的sharingd,它们只会短暂阻止睡眠。pmset -g assertions会显示全部内容。
  • Vitals不显示唤醒历史。pmset -g log可以。
购买Vitals $9 首发期$9,之后$29。14天内可退款。

常见问题

是什么让我的Mac保持唤醒?

在“终端”中运行pmset -g assertions。“Listed by owning process”下面的每一行都列出一个App、它阻止睡眠多久了以及原因。在活动监视器中,“能耗”标签页的“防止睡眠”列会把同样的App显示为“是”。

为什么合上盖子后Mac不睡眠?

使用电池时,不管App怎么要求,合上盖子都会让MacBook睡眠。接通电源、连接了外接显示器并合上盖子时,Mac会按设计继续运行;Apple称之为闭合显示器模式。如果不是这些情况它仍然保持唤醒,就在pmset -g assertions中查找PreventSystemSleep。

Mac为什么半夜自己醒来?

通常是为了维护、网络活动或连接的设备。运行pmset -g log | grep -E "Wake from|DarkWake from" | tail -20,看看“due to”后面的文字。如果原因是网络,将“唤醒以供网络访问”设为“仅使用电源适配器时”。

如何阻止App让Mac保持唤醒?

关掉它正在做的事,例如视频、通话或下载,或者退出这个App。如果是caffeinate,在它的“终端”窗口中按下Control-C,或退出启动它的App。

Mac从不睡眠有害吗?

它会耗电;放在包里的MacBook还会积热并耗光电池。当作服务器用的台式Mac则没有害处,只要这正是你想要的。

有没有能显示是什么让Mac保持唤醒的App?

在MacBook上,Vitals会在“电池”标签页和菜单栏下拉面板中列出让它保持唤醒的App,附上每个App给出的原因、它阻止睡眠多久了,以及是否让屏幕保持点亮。

术语表中的相关条目

更多指南