部分联想主板BIOS风扇控制只有 Intelligent Cooling Engine (ICE) 功能,无法手动修改风扇转速曲线。
我发现手上这块主板在进入系统后风扇就变成固定转速,而且
看不到转速,那第一步就是先安装驱动。通过 sensors
得知控制器为IT8792E,从网上找到了可用的驱动:a1wong/it87 (github.com) 按照文档 sensors-detect
安装即可。make & make install
然后加载驱动,需要忽略资源冲突,强制设备id为IT8792E的0x8733:
modprobe it87 ignore_resource_conflict=1 force_id=0x8733
然后就能在 sensors
里看到风扇转速、电压了。
Linux中我们一般通过Hwmon来手动调整风扇转速,路径是
,*是设备序号。/sys/class/hwmon/hwmon*
但是到了这里发现无论怎么调整参数,转速都不会变化,唯一有区别的就是 pwm1_enable
设置为手动模式 1 的时候,转速为2600RPM左右,自动模式 2 的时候转速为900RPM。这个问题无论是驱动还是BIOS造成的,都没法简单解决。但是这两个转速正好可以当成两档来控制,所以我写了个脚本监控CPU温度,到达临界温度后指定 pwm1_enable
模式来切换转速。
#!/bin/bash sleep 3 modprobe it87 ignore_resource_conflict=1 force_id=0x8733 sleep 5 getPath() { # $1 which path: 0 it8792 1 coretemp cd /sys/class/hwmon find=false for subdir in `ls` do cd $subdir nameVar=$(head -n 1 name) if [ $1 = 0 ] then if [ $nameVar = "it8792" ] then find=true it8792_path=$(pwd) fi else if [ $nameVar = "coretemp" ] then find=true coretemp_path=$(pwd) fi fi if $find ;then echo "Find path." break fi cd .. done } it8792_path="" coretemp_path="" getPath 0 echo $it8792_path if [ -z $it8792_path ]; then exit fi getPath 1 echo $coretemp_path if [ -z $coretemp_path ]; then exit fi cd $it8792_path echo 2 > pwm1_enable cd $coretemp_path while true do sleep 2 temp=$(head -n 1 temp1_input) mode=$(head -n 1 $it8792_path/pwm1_enable) if (( $temp > 50000 )) then if [ $mode = "2" ]; then echo 1 > $it8792_path/pwm1_enable fi else if [ $mode = "1" ]; then echo 2 > $it8792_path/pwm1_enable fi fi done
再把这个脚本注册到systemd开机自启就行了,先在
下新建文件 /usr/lib/systemd/system
It87FanControl.service
,内容为
[Unit] Description=It87FanControl [Service] ExecStart=/home/it87_fan.sh #你的脚本路径 [Install] WantedBy=multi-user.target
然后
开启服务就可以了。这样就能够开机后自动加载驱动,并根据温度两档调整转速。systemctl enable It87FanControl.service