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> 里真正声明的是另一组:
IOHIDSetMouseAcceleration/IOHIDGetMouseAcceleration→HIDPointerAccelerationIOHIDSetScrollAcceleration/IOHIDGetScrollAcceleration→HIDScrollAccelerationIOHIDSetAccelerationWithKey/IOHIDCopyCFTypeParameter/IOHIDSetCFTypeParameter
前四个在 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 无响应 · 该用哪个工具?