How to start the processor fan early to avoid high temperatures..

How to start the processor fan early to avoid high temperatures.

Miguel Menéndez Comments

For some strange reason, in recent days my laptop’s processor is getting too hot and the fan takes a long time to start to lower the temperature.

I don’t have time to investigate why. The laptop is a Lenovo X240 with Arch, I have done the following:

~$ sudo -i
~# sensors

It returns this:

Adapter: ISA adapter
Package id 0:  +69.0°C  (high = +100.0°C, crit = +100.0°C)
Core 0:        +64.0°C  (high = +100.0°C, crit = +100.0°C)
Core 1:        +69.0°C  (high = +100.0°C, crit = +100.0°C)

acpitz-acpi-0
Adapter: ACPI interface
temp1:        +62.0°C  (crit = +200.0°C)

thinkpad-isa-0000
Adapter: ISA adapter
fan1:           0 RPM
temp1:        +62.0°C  
temp2:         +0.0°C  
temp3:         +0.0°C  
temp4:         +0.0°C  
temp5:         +0.0°C  
temp6:         +0.0°C  
temp7:         +0.0°C  
temp8:         +0.0°C 

High temperature equal to critical temperature? 100°C… To boil water!

I install the package thinkfan (from AUR). I would also install the lm_sensors package but it already was:

~# pacman -Ql thinkfan

I check that the configuration file for the thinkpad_acpi module has been created:

~# cat /usr/lib/modprobe.d/thinkpad_acpi.conf

And returns:

options thinkpad_acpi fan_control=1

If not:

~# echo "options thinkpad_acpi fan_control=1" > /usr/lib/modprobe.d/thinkpad_acpi.conf

In both cases, restart the computer.

After the restart I load the thinkpad_acpi module:

~# modprobe thinkpad_acpi

And I check the fan status:

~# cat /proc/acpi/ibm/fan

It returns:

status:         enabled
speed:          0
level:          auto

The fan is available but off (goes at 0 revolutions per minute)… And the processor at 80°C and rising.

To set the temperature thresholds I have to create the file /etc/thinkfan.conf (there are examples in /usr/share/doc/thinkfan/examples/). Before creating this file, I must know where the temperature sensors are:

~# find /sys/devices -type f -name "temp*_input"

It returns this:

/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp6_input
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp3_input
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp7_input
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp4_input
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp8_input
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp1_input
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp5_input
/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp2_input
/sys/devices/platform/coretemp.0/hwmon/hwmon2/temp3_input
/sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input
/sys/devices/platform/coretemp.0/hwmon/hwmon2/temp2_input
/sys/devices/virtual/thermal/thermal_zone0/hwmon0/temp1_input

Now, with this data I create the configuration file /etc/thinkfan.conf:

~# nano /etc/thinkfan.conf

With the following content:

tp_fan /proc/acpi/ibm/fan

hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp6_input
hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp3_input
hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp7_input
hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp4_input
hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp8_input
#hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp1_input
hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp5_input
hwmon /sys/devices/platform/thinkpad_hwmon/hwmon/hwmon1/temp2_input
hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp3_input
hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input
hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp2_input
hwmon /sys/devices/virtual/thermal/thermal_zone0/hwmon0/temp1_input

#  Syntax:
#  (LEVEL, LOW, HIGH)
#  LEVEL is the fan level to use (0-7 with thinkpad_acpi)
#  LOW is the temperature at which to step down to the previous level
#  HIGH is the temperature at which to step up to the next level

(0,     0,      55)
(1,     48,     60)
(2,     50,     61)
(3,     52,     63)
(4,     56,     65)
(5,     59,     66)
(7,     63,     32767)

I test the configuration:

~# thinkfan -n

If any sensor fails (cannot find it), comment its line in the file /etc/thinkfan.conf. When everything is correct, the previous command will return something similar to:

Temperatures(bias): 0(0), 52(0), 52(0), 49(0), 50(0) -> level 0
Temperatures(bias): 0(0), 50(0), 52(0), 51(4), 50(0) -> level 1
Temperatures(bias): 0(0), 46(0), 46(0), 44(0), 47(0) -> level 0
Temperatures(bias): 0(0), 57(15), 61(19), 61(22), 50(2) -> level 7
Temperatures(bias): 0(0), 48(0), 50(0), 50(0), 51(0) -> level 2
Temperatures(bias): 0(0), 45(0), 46(0), 45(0), 47(0) -> level 0

And you will hear how the fan starts from level 1!

It only remains to activate the thinkfan service:

~# systemctl enable thinkfan

Sources: Arch Wiki, Thinkwiki and Amirul Abu at Medium.