我在我的 Macbook Air 上安装了 Debian(为什么?因为有趣。),而且它实际上运行得很好。
然而,在注意到一个名为“kidle_inject”的进程占用了所有内核上 100% 的 CPU 后,我想检查温度,“传感器”告诉我温度徘徊在 96 摄氏度。风扇几乎没有运行。
我注意到,在 OSX 上,只要我打开系统,它就会运行(可能刚才还很热),而在 Debian 上我几乎听不到它的声音,而且笔记本电脑在触摸时似乎也更热。在 Debian 上。
有没有办法让 Debian 更积极地使用风扇?
答案1
http://allanmcrae.com/2010/05/simple-macbook-pro-fan-daemon/事实证明这是一个有用的开始。
在 中/sys/devices/platform/applesmc.768/
,有一些有用的选项可用于控制风扇速度。
其中“fan1_min”和“fan1_max”是最小和最大风扇速度,“fan1_output”是直接控制风扇的设置,“fan1_manual”使系统忽略最小和最大设置并直接响应更改到“fan1_output”。
如何自动控制这些是下一个议程。
编辑:另外,请小心这些设置,因为很可能只是关闭风扇,使您的系统面临过热的危险。
第二次编辑:
该页面上的信息似乎有点过时,因为我发现温度传感器读数与风扇设置位于同一目录中,而不是该页面建议的其他目录中。
第三次编辑:根据该页面上的算法,我编写了一个快速的 python 脚本,当以 root 身份运行时,它似乎工作得很好:
#!/usr/bin/python
import time
import glob
import math
last_temp = 0
while True:
time.sleep(1)
files = glob.glob("/sys/devices/platform/applesmc.768/temp*_input")
temp = 0
for file in files:
with open(file) as openfile:
sensor_temp = openfile.read()
temp = max(int(sensor_temp)/1000, temp)
with open("/sys/devices/platform/applesmc.768/fan1_input") as fan1_input:
current_speed = int(fan1_input.read())
increasing = temp > last_temp
last_temp = temp
if increasing:
if temp <= 65:
speed = max(current_speed, 2000)
elif 65 < temp < 80:
step = (6200 - 2000) / ((80 - 65) * (80 - 64) / 2)
speed = max(current_speed, math.ceil(2000 + (temp - 65) * (temp - 64) / 2 * step))
elif temp >= 80:
speed = 6200
else:
if temp >= 80:
speed = 6200
elif 55 < temp < 80:
step = (6200 - 2000) / ( (80 - 55) * (80 - 54) / 2 )
speed = min(current_speed, math.floor(6200 - (80 - temp) * (81 - temp) / 2 * step))
elif temp <= 55:
speed = 2000
print "Temperature: " + str(temp) + " Increasing?: " + str(increasing) + " Current speed: " + str(current_speed) + " Target: " + str(speed)
with open("/sys/devices/platform/applesmc.768/fan1_min", "w") as fan1_input:
#with open("/home/werner/testtemp", 'w+') as fan1_input:
fan1_input.write(str(int(speed)))