叫醒睡着的 Mac

睡着的 Mac 仍然叫得醒,前提是它没有睡得太沉。

Mac 睡着了连不上?

在已配对列表上左滑选“唤醒”(Wake-on-LAN)再连接。前提:Mac 的 系统设置 → 电池/能源 开启“唤醒以供网络访问”;接电源或有线网络时最可靠。

叫醒了还是连不上

  • Mac 要保持开机,TouchNow Host 要在运行中——关掉 App 就不会接受连接。
  • MacBook 不要合上盖,合盖会立刻进入睡眠。
  • 插着电源出门。用电池时 macOS 会把 Wi-Fi 一并关掉,任何远程连接都叫不醒它。
  • 到「系统设置」把「显示器关闭后防止自动进入睡眠」打开。MacBook 在「电池 → 选项」里,台式 Mac 在「节能」里。屏幕照样会熄,只是机器不会睡死。

叫醒了,画面却一直停在「正在接收画面」

Wake-on-LAN 把 Mac 叫醒时,它进入的是 DarkWake:机器在跑、网络通了、Host 也收得到你的连接,但显示器还没通电。没有显示器就没有画面缓冲区,抓取画面的 API 开得起来却一帧都送不出——所以你看到的是「连上了,但画面永远停在正在接收」。

这不是网络慢,也不是权限没给。macOS 的「防止系统闲置睡眠」挡不住这件事,因为 DarkWake 之后接的是维护睡眠(Maintenance Sleep),不是闲置睡眠。

TouchNow Host 的处理方式是:检测到显示器仍在睡眠时,发出一个用户活动声明(IOPMAssertionDeclareUserActivity),实测 38 毫秒内把 DarkWake 提升成完整唤醒并点亮屏幕;同时先押住抓取,轮询到显示器真的醒了才开始串流(上限 6 秒),避免在没有画面的状态下空转。

想自己确认:在 Mac 上跑 pmset -g log,找 DarkWake 那几行。唤醒成功时系统会把它记成 HID Activity。

不在同一个 Wi-Fi,其实也叫得醒——但有时限

Wake-on-LAN 的包只能在同一个局域网里送,所以照理出门在外叫不醒。但实测(macOS 26、Apple Silicon)睡着的 Mac 仍然叫得醒,走的是另一条路。

macOS 睡眠期间,网卡会保住已经建立的 TCP 连接pmset -g log 里会看到 TCPKeepAlive=active)。Host 的信令连接在睡眠期间仍然留在房间里,你的 iPhone 一连上,服务器把通知送过去就足以触发 DarkWake(日志记成 wifibt 唤醒)。这条路跨网络有效,也不用设置路由器。

但它会过期。日志里看得到 powerd request=TCPKATurnOff wakeAt= 后面接一个约四天后的时间——睡太久这个机制会静静关掉,于是变成「有时叫得醒、有时叫不醒」。真的要长期在外,让 Mac 保持开机、或开启「显示器关闭后防止自动进入睡眠」比较可靠。

还有一点常被混在一起:MacBook 用电池睡眠时 Wi-Fi 会整个关掉,Wake-on-LAN 必然失效,这是 Apple 的硬限制。但上面那条 TCP 保活的路,实测在电量 2% 时仍然有效——两者不是同一回事。