Mac 滑鼠加速:怎樣關掉它,而且關得住

到處都能搜到的做法是 defaults write 加一次重新登入。它只動了兩層裡的一層——而在 macOS 26 上這兩層並不一致:即時指標參數讀到 0.6875,偏好卻讀到 3。這就是加速「又回來」的原因。

兩層,而且它們不一定要一致

有一層是系統此刻正在用的即時值,另一層是登入時會被回復的持久化偏好。它們是兩個獨立的儲存。只寫偏好,意味著你的改動要等到下次登入才生效——在那之前,誰握著即時值,誰說了算。

這不是推測。在 macOS 26 上、把「跟蹤速度」放在中間位置實測:

即時  HIDPointerAcceleration                        0.6875
偏好  defaults read -g com.apple.mouse.scaling      3
即時  HIDMouseAcceleration(通用鍵)                196608   = 16.16 定點下的 3.0
偏好  defaults read -g com.apple.scrollwheel.scaling 0.3125
即時  HIDScrollAcceleration(通用鍵)               20480    = 0.3125

同一個滑桿讀出兩個數字,因為它們是兩樣東西。而那個「通用鍵」才和偏好精確相等。

半個網際網路都在用的那個 API 名,並不存在

很多教學——包括我們拿到的任務說明——都寫著 IOHIDSetPointerAcceleration。這個符號在任何在售的 macOS 上都不存在:SDK 標頭裡沒有、.tbd 裡沒有,對已載入的 IOKit 映像做 dlsym 回傳 NULL。

<IOKit/hidsystem/IOHIDLib.h> 裡真正宣告的是另一組:

前四個在 10.12 起標記為棄用,但仍然回應——而且關鍵在於:它們都不是「跟蹤速度」滑桿。它們是隔壁的另一個參數。

那麼真正管用的是哪條路

要控制跟蹤速度,即時路徑是通用的那一對:IOHIDCopyCFTypeParameter 與 IOHIDSetCFTypeParameter,鍵用 HIDMouseAcceleration 與 HIDScrollAcceleration。兩者都是公開的,且都沒有被標記棄用。

實測行為:寫入 2.0 再讀回得到 2.0;回復 3.0 讀回 3.0。寫入立即生效,而且可逆。

因為偏好才是重開機後活下來的那一層,工具必須兩個都寫:偏好負責下次登入之後,參數負責此刻。

另有兩個值得知道的細節:HID 參數是 16.16 定點,所以 3.0 存成 196608;而 -1 是有文件的哨兵值,意思是「關閉指標加速」,不是「很慢」。

滾動是另一根軸

關掉滑鼠加速並不會改變滾輪。滾動加速有自己的參數——HIDScrollAcceleration,與 com.apple.scrollwheel.scaling 互為孿生——所以一篇只講「滑鼠加速」的頁面,可能讓你得到一個手感正常的指標,和一個仍然一跳一跳的滾輪。

怎麼核對現在到底哪層在生效

別信「設定成功」的提示,把值讀回來。在 IOHIDSystem 服務上開啟參數埠、取出該鍵,再和偏好比對。如果兩個數不一致,說明你寫的不是那個正在做決定的那一層。

另外還有一個按服務的屬性 HIDUseLinearScalingMouseAcceleration——Apple 自己的標頭說 WindowServer 會為線性跟蹤設定它。它可以被寫到指標服務上,但公開客戶端可能被拒絕,所以把它當作「盡力而為」,而不是當作機制本身。

誠實的邊界

這是一個系統級的輸入參數。直接讀原始 HID 的應用程式、以及自己做視角處理的遊戲,可以完全繞開加速,改與不改都不受影響。這裡也不會改變觸控板的行為——因為觸控板根本不是從同一條路報上來的。

相關

全部指南 · 滑鼠滾輪一格一格地跳 · DDC/CI 無回應 · 該用哪個工具?