休眠之後,外接顯示器亮度被重置
你把顯示器調暗,闔上蓋子,回來一看又是亮的。或者你改了解析度、拔插了線,同樣的事情發生。系統設定裡沒有任何地方能把它設回去——因為系統自己也沒有保存這個值。
到底發生了什麼
在第三方顯示器上,亮度與對比度存在顯示器內部,透過 DDC/CI 存取;如果這塊面板沒有實作 DDC/CI,那麼唯一還能控制的就是 CoreGraphics 伽馬表。無論哪條路,macOS 都不會保存這個值。從休眠喚醒、改解析度、重新插拔,都意味著顯示器被重新配置,你設過的東西就這樣沒了——面板回到它自己的預設狀態。
為什麼想當然的修法沒用
最自然的修法是:監聽喚醒通知,然後把值寫回去。這會失敗,原因很具體——面板在喚醒之後需要一點時間才會回應 DDC/CI。你在通知到達的瞬間就寫,這次寫入會被直接丟掉。這就是為什麼很多自己寫的小腳本「有時候靈、有時候不靈」。
可靠的做法是:等一等(我們等 2.5 秒),再寫;如果沒寫進去,就重試。我們的重試節奏是 1 秒、2 秒、4 秒。而且第一次嘗試時面板可能根本還沒出現在匯流排上——這不是錯誤,這是正常的先後順序。
這不是推測:它是我們原始碼裡 SelfHealEngine.wakeDelay 上的註解,也是這個功能存在的原因。
今天就能用的辦法
- 在顯示器自己的 OSD 裡設定。由面板自己保存的值,能撐過休眠、解析度變化和重開機。
- 用一個處理了喚醒路徑的免費工具。MonitorControl 做 DDC 亮度與音量,而且開源——如果你只要亮度和音量,就用它,不要給我們付錢。這話我們也寫在對比頁裡。
- 或者讓應用替你寫回。DisplayPilot 會監聽喚醒與顯示器重配置,等待、把記住的硬體狀態寫回去,失敗就重試。你可以關掉自動重放,只留一個「立即重放一次」按鈕,把控制權握在自己手上。
如果亮度完全回不來
那是另一個故障——可能是面板沒有實作 DDC/CI,也可能是線材或介面不傳它。區分辦法在《DDC/CI 無回應》裡。