买了个新 mac 把旧 air 丢了回去 然后发现 macos26 似乎有爆音
于是按照网上传授方案 killall coreaudiod ,还没几分钟,又开始爆音。
没绷住问 gpt ,经过研究 原来是 Timemachine 从旧机器上带来了个 ToDeskOutputDriver.driver (之前装过 todesk 用过几次就嫌不干净卸载了)
现在最可疑的是 ToDeskOutputDriver
上一轮日志的模式是:
coreaudiod
↓
HAL client timeout
↓
HostApplicationDisplayID:
com.apple.audio.Core-Audio-Driver-Service.helper
↓
PID 4415
↓
HALC_ProxyIOContext skipping cycle
↓
out-of-order message
而现在我们知道:
PID 4415
=
Core Audio Driver (ToDeskOutputDriver.driver)
所以实际更像:
┌→ BuiltInSpeakerDevice
App → CoreAudio ───┤
└→ ToDeskOutputDriver.driver
↓
Driver timeout
↓
CoreAudio realtime graph
missed deadline
↓
Built-in speaker 爆音
这也解释了一个之前看起来很奇怪的现象:
明明输出设备是 MacBook Pro 内置扬声器,为什么第三方 client timeout 能让内置扬声器爆音?
因为 CoreAudio 的 HAL clients / driver work loop 并不是“只有当前输出设备才参与整个实时系统”。一个异常的 HAL driver/client 可以让共享实时 audio work loop miss deadline 。
现在可以直接做决定性实验
不用卸载整个 ToDesk 。
先退出 ToDesk ,然后把它的 HAL driver 暂时移出 HAL:
sudo mkdir -p /Library/Audio/Plug-Ins/HAL.disabled
sudo mv \
/Library/Audio/Plug-Ins/HAL/ToDeskOutputDriver.driver \
/Library/Audio/Plug-Ins/HAL.disabled/
甚难绷住,卸载程序就好像有什么大病一样。