叫醒睡著的 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% 時仍然有效——兩者不是同一回事。