How to Control ThinkPad Fan Speed in Ubuntu 24.04

This is a step by step beginner’s guide shows how to control the fan speed in Lenovo ThinkPad laptop running Ubuntu 24.04.

The fan speed control solution differs depends on computer manufacturers. For my ThinkPad T480s, fan is usually not spinning when doing the basic web browsing and other light works.

But if you want, it’s easy to set a fixed fan speed, or adjust the speed automatically according to the core temperature.

Step 1: Enable the Kernel Option for Fan Control

Linux Kernel includes a thinkpad_acpi module for supporting ThinkPad laptops. It supports fan control operations, but disabled by default due to safety reasons.

1. To enable this fan control feature, open terminal (Ctrl+Alt+T) and run command to create a config file under /etc/modprobe.d/ directory:

Advertisements
sudo nano /etc/modprobe.d/thinkpad_acpi.conf

The command uses nano command line text editor that works in most Linux Desktops. You may replace it with gnome-text-editor for Ubuntu 24.04 or other Linux with recent GNOME Desktop, mousepad for XFCE, or pluma for MATE.

2. When file opens, simply add the line below:

options thinkpad_acpi fan_control=1

Then save it. For nano text editor, press Ctrl+S to save and Ctrl+X to exit.

3. To apply the change, just run command below to remove the kernel module, then re-load it:

sudo modprobe -r thinkpad_acpi && sudo modprobe thinkpad_acpi

4. To verify, use command:

systool -v -m thinkpad_acpi

Run sudo apt install sysfsutils to install the tool if command not found. In the terminal output, the “fan_control” parameter equals to “Y” means the feature is enabled.

Step 2: Set Fan Speed Manually

After enabled the Kernel module option, you can manually set fan speed by writing custom level value into /proc/acpi/ibm/fan file. This can be done by either running single command in terminal or using a graphical tool.

Option 1: Single Command to Set Fan Speed

To set fan speed from in a terminal window, use command:

echo level 0 | sudo tee /proc/acpi/ibm/fan

The command will set fan speed to level 0 (fan off). For choice, you may replace it with level 1, level 2, …, level 7.

For example, set medium fan speed with level 4:

echo level 4 | sudo tee /proc/acpi/ibm/fan

Or, set the maximum regulated speed with level 7:

echo level 7 | sudo tee /proc/acpi/ibm/fan

The default is level auto, which can be set via command:

echo level auto | sudo tee /proc/acpi/ibm/fan

While there’s also level disengaged for the maximum unregulated speed, that’s even much faster than the maximum regulated speed.

After changing the fan speed, either run command to monitor your fan speed or just move your ear closer to the air outlet and listen to the fan noise.

cat /proc/acpi/ibm/fan

Option 2: Use Graphical Tool to set Fan Speed

If you would like to use a graphical tool to control your fan speed, then here’s an open-source tool thinkfan-ui available for choice.

For Arch and Manjaro Linux, it’s available as thinkfan-ui package in the AUR repository.

While, Debian and Ubuntu based system can download the .deb package from its project page:

Download ThinkFan-UI (under Assets)

Then double-click the .deb package in file manager to install via either App Center or Software Install.

Once installed, launch it and use either the pop-up dialog or top-right system indicator to monitor and control fan speed:

Step 3: Auto Fan Speed According to CPU/GPU Temperature

If the default auto fan control does NOT meet your need, then you may use thinkfan to auto-adjust fan speed according to the CPU/GPU temperature.

Thinkfan automatically writes speed level into the /proc/acpi/ibm/fan file, according to the core device temperature reported by lm-sensors. By editing the config file, user can control how fast the fan is spinning according to given temperature range.

1. First, open terminal (Ctrl+Alt+T) and run command to install thinkfan, as well as lm-sensors:

sudo apt install thinkfan lm-sensors

2. Then, run the command below to detect your laptop monitoring chips or sensors:

sudo sensors-detect

In terminal output, you may hit Enter to choose default answers for all questions.

3. Before configuring thinkfan, you need to find out where to read the core temperatures from.

To do so, use command:

find /sys/devices -type f -name "temp*_input"|sed 's/^/hwmon /g'

In the terminal output, you may copy all the outputs, or choose some of them accordingly, then use for next step.

In my case, according to the hardinfo (System Profiler and Benchmark) tool, only the 5 highlight lines (see screenshot below in terminal) are the ones that monitoring my CPU cores temperatures. Since my laptop does not have dedicated GPU, I’m going to use them in next steps.

4. Edit /etc/thinkfan.conf file, by running command:

sudo gnome-text-editor /etc/thinkfan.conf

Replace gnome-text-editor according to your desktop environment, or use nano that works in most desktops.

When file opens, add following lines:

  • First, add the line below to tell which file to control fan speed:
    tp_fan /proc/acpi/ibm/fan
  • Then, add lines below to tell where to read the core temperatures:
    hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon9/temp3_input
    hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon9/temp4_input
    hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon9/temp1_input
    hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon9/temp5_input
    hwmon /sys/devices/platform/coretemp.0/hwmon/hwmon9/temp2_input

    You need to replace them according to last step!!!

  • Finally, configure temperature ranges and which speed level the fan should run in the ranges.
    (0, 0,  50)
    (2, 50, 60)
    (4, 60, 70)
    (7, 70, 32767)

    In the case, fan off when CPU temperature in range of 0 to 50, low speed for 50 ~ 60, medium speed for 60 ~ 70, and maximum speed when temperature higher than 70. You can add/skip speed levels (0 ~ 7) and change the temperatures as you prefer.

5. After saving the file in last step, run the command below to test if it’s working properly.

thinkfan -n

6. If everything goes well, you may start thinkfan as systemd service to control your fan speed automatically.

systemctl start thinkfan thinkfan-sleep thinkfan-wakeup

Undo:

If you want to restore the fan control of your ThinkPad to its previous state, first open terminal (Ctrl+Alt+T) and run command to remove the Kernel module config file:

sudo rm /etc/modprobe.d/thinkpad_acpi.conf

Then, re-load to disable the fan control option:

sudo modprobe -r thinkpad_acpi && sudo modprobe thinkpad_acpi

Next, remove thinkfan and thinkfan-ui if installed, via command:

sudo apt remove thinkfan thinkfan-ui