由于笔者这款 Macbook Pro (Retina, 15-inch, Late-2013) 的两个风扇在最大风扇转速运转时噪声实在是大,而一直以来都没想到什么好方法在限制的同时又可以保持自动转速控制。然而最近在搜索时发现了两篇文章(链接见文末)可以修改 SMC 的风扇最大转速限制,在笔者尝试后发现确实可以实现,在这分享一下。
首先,请非常明确一点,无比清楚自己的所作所为,如果造成 Macbook 损坏后果自负。笔者的 Mac 型号是 Macbook Pro (Retina, 15-inch, Late-2013),系统为 macOS Sierra 10.12.5,其他环境下不保证能用。
这里需要使用到的工具为 Macs Fan Control(https://www.crystalidea.com/macs-fan-control),这里需要使用到它程序包内的 smc-write 程序来读取和写入关于风扇的 smc 数据。
首先,使用 smc-write -f
读取两个风扇默认最大最小转速。
然后,再用 smc-write -k F0Mx -r
和 smc-write -k F1Mx -r
读取当前两个风扇最大转速代码
这里最大转速可以通过 smc-write -k F0Mx -k 转速hex
和 smc-write -k F1Mx -k 转速hex
来修改。转速值是 hex 格式的,可以通过执行 python -c 'print hex(转速rpm << 2)[2:]'
来计算,例如 python -c 'print hex(6156 << 2)[2:]'
。
这时,执行 smc-write -k F0Mx -k 6030
就可以修改左风扇最大转速为 6156 rpm 了。同理,执行 smc-write -k F1Mx -k 5910
就可以修改右风扇最大转速为 5700 rpm 了。
笔者写了一个 Apple Script 来更方便的控制最大转速:
display dialog "Limit maximum speed of fans" buttons {"Full", "Half", "Cancel"} default button 3
set the button_pressed to the button returned of the result
if the button_pressed is "Full" then
do shell script "/Applications/Macs\\ Fan\\ Control.app/Contents/Resources/smc-write -k F0Mx -w $(python -c 'print hex(6156 << 2)[2:]')"
do shell script "/Applications/Macs\\ Fan\\ Control.app/Contents/Resources/smc-write -k F1Mx -w $(python -c 'print hex(5700 << 2)[2:]')"
else if the button_pressed is "Half" then
do shell script "/Applications/Macs\\ Fan\\ Control.app/Contents/Resources/smc-write -k F0Mx -w $(python -c 'print hex(4158 << 2)[2:]')"
do shell script "/Applications/Macs\\ Fan\\ Control.app/Contents/Resources/smc-write -k F1Mx -w $(python -c 'print hex(3850 << 2)[2:]')"
else
#nothing to do
end if
这样,笔者执行这个 Apple Script,选择 Half,就能限制风扇转速为 4000rpm 左右了,可以大大降低噪音的同时,性能不会有很大的下降。
当电脑关机或者睡眠之后,设置会被重置,可以使用 EventScript 来自动执行 Apple Script 解决。
此外,如果需要更强力的散热,可以修改最大转速为超过默认值,并通过类似 iStat Menu 这样的工具指定转速,就可以让风扇“超频”。(当然,如果风扇出问题后果自负。)
参考链接: