I noticed the other day (it was kind of hard to not notice, to be honest) that my laptop shut down abruptly when it overheated. This shouldn’t be the case, as the thermal controls on the mainboard should have spun up the fans.

After some poking around, I found that with the default ‘auto’ fan control, the top speed of ‘level 7′ only spins the fans around 4000RPM, even though when the feedback loop is disengaged (echo level disengaged > /proc/acpi/ibm/fan” they can spin up to 7000RPM, and bring the temperature down from the critical 100C mark.

This bug report suggests that something is completely amiss with the kernels thinkpad_acpi module, and nobody really knows why. The end result is that fans spin too slow on the Thinkpad range of laptops. This can, however, be resolved with a couple of edits and an additional package. The following instructions were tested on Ubuntu 12.10, most likely work exactly the same on all Debian versions and derivatives, and can be adapted for use on other Linux distros as well.

Firstly, enabled userland control of the Thinkpad fans with the following command -

echo options thinkpad_acpi fan_control=1 >> /etc/modprobe.d/thinkpad.conf
rmmod thinkpad_acpi
modprobe thinkpad_acpi

This will enable the new settings for your current session, and all future sessions too.

You should now be able to set the fan speed manually with commands such as –

echo level 0 > /proc/acpi/ibm/fan
echo level 7 > /proc/acpi/ibm/fan
echo level disengaged > /proc/acpi/ibm/fan
echo level auto > /proc/acpi/ibm/fan

The key bit here is to remember that ‘disengaged’ equates to ’127′ on the grand scale of speeds.

Next step is to install the thinkfan package, and enable automatic startup -

apt-get -y install thinkfan
sed -i s/START=no/START=yes/ /etc/default/thinkfan

Now, as above, the default fan speeds are too slow. So even if thinkfan commands a level 7 fan speed, it won’t be fast enough to keep your hardware cool. To make it run up to full speed, you have to disengage the feedback loop and let it run in failsafe mode. Don’t worry though, thinkfan will bring it back into ‘auto’ mode once temperatures are back to normal, so you can have normal battery life and normal noise levels once your compute process is complete.

Edit /etc/thinkfan.conf, and at the end adjust the endpoint for level 7, and insert a new line for fan speed 127. My thinkfan.conf is as below –

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

Save thinkfan.conf, and start thinkfan with this

/etc/init.d/thinkfan start
Once 66C is passed, it will enter disengaged mode, and run at full speed until it reaches 66C or below again.

My aging quad core i7 2.13GHz laptop will happily run BOINC now, at 97C, so I say it’s working :-)