Unlag Neo:解决 Macbook Neo 光标卡顿问题,低 CPU/GPU 占用的实用方案!
Unlag Neo:修复 Macbook Neo 光标卡顿问题
在 Macbook Neo(系统为 macOS Tahoe 26.5.1)上,当光标靠近屏幕边缘或进入终端窗口时,会出现卡顿现象。
卡顿原因
目前尚不清楚具体原因。但在卡顿发生时,系统会从硬件光标切换到软件光标(`CGCursorIsDrawnInFramebuffer()` 从 `0` 变为 `1`),所以可能是 Macbook Neo 在这个切换过程中出现了卡顿。也许在屏幕边缘,鼠标只有一半被渲染,而在终端中有其他图形处理操作,因此 macOS 想在这些场景下使用软件光标,但具体原因并不明确。另外,只有在屏幕锁定约 17 秒后才会使用硬件光标,在此之前不会出现卡顿。
彻底修复方法
要么直接修复卡顿问题(希望苹果公司来解决),要么作为过渡方案,强制始终使用软件光标。若要直接强制使用软件光标,可能需要对 WindowServer 进行逆向工程,但这可能需要关闭系统完整性保护(SIP)等操作,也可能并不需要。而且硬件/软件光标的切换可能只是一种关联现象。我们还可以研究一下 Mac 解锁约 17 秒后发生了什么。
临时可行的“修复”方法
你也可以将 macOS 的颜色滤镜(如蓝/黄滤镜)设置为低强度,但这会稍微改变屏幕颜色,并且如果同时开启了夜览模式,该方法可能无效。此外,还可以更改鼠标光标大小。为了保持颜色和光标正常,我们也可以进行屏幕录制。不过,屏幕录制时屏幕右上角会有一个指示器。也许关闭 SIP 后可以禁用该指示器,但还未进行研究。本质上,任何能强制合成器(?)使用软件光标的操作都可以解决卡顿问题。
其他思路
找出终端窗口的特殊之处,然后创建一个应用程序,使其执行相同的操作并将窗口覆盖在所有内容之上。无论如何,选择了屏幕录制的方法。
目前最喜欢的“修复”方法:屏幕录制
对来说,屏幕录制是最不烦人的解决方案。指示器足够小,并且在播放全屏视频时(认为此时指示器会很烦人),可以关闭屏幕录制。显然,这样的修复方法会使指示器失去原本的作用,但认为有两种类型的指示器。还有一种更大的指示器,认为应用商店的应用会使用,所以觉得这样做问题不大。使用该方法后,光标不再卡顿。
对 CPU/GPU 占用低
每 10 秒录制 1 个像素(基本上是写入 `/dev/null`,不会写入 SSD)。
操作方法
此 Gist 中有一个脚本(create_unlag_neo_app.sh)。该脚本会创建一个 `.app` 文件,无需开发者账户或 Xcode 等即可启动。可以在终端中按以下方式使用该脚本:
chmod +x create_unlag_neo_app.sh./create_unlag_neo_app.sh# -> 创建 "Unlag Neo.app"脚本创建的应用。将 `Unlag Neo.app` 放在某个位置,比如 `/Applications` 文件夹。运行该应用并授予所需的权限。在菜单栏中,可以关闭该应用,也可以尝试“全屏暂停”功能。认为该功能在隐藏指示器方面表现不错,在 VLC、YouTube 和其他一些应用中进行了测试。
调试
如果你想修改 `create_unlag_neo_app.sh` 脚本并多次重建应用,macOS 的权限设置界面可能会重置,并且表现得有些奇怪。你可以尝试在脚本中将 "Unlag Neo" 改为其他名称,或者手动将应用图标拖到权限设置中,或者尝试删除 "~/Library/Preferences/Unlag Neo.plist" 文件,或者执行 `killall cfprefsd` 命令,也可以直接使用 Xcode。
