Fan speed control

From ArchWiki
Revision as of 18:34, 7 January 2008 by Rudchenkos (talk | contribs) (more sophisticated formatting)
Jump to: navigation, search

Template:I18n links start Template:I18n entry Template:I18n entry Template:I18n links end

Controlling the speed (and sound!) of your CPU fan is easy!

This can ruin your hardware. A CPU fan is needed to cool your CPU and in this howto it will be turned off for a couple of seconds. If you are not comfortable with doing this, don't!'


First, you need to set up lm-sensors. This is explained here

Once you have lm-sensors installed, you should have a readout with 'sensors'.

$ sensors
Adapter: ISA adapter
VCore 1:   +1.14 V  (min =  +0.00 V, max =  +4.08 V)              
VCore 2:   +2.67 V  (min =  +0.00 V, max =  +4.08 V)              
+3.3V:     +3.39 V  (min =  +2.82 V, max =  +3.79 V)              
+5V:       +5.19 V  (min =  +3.47 V, max =  +0.40 V)       ALARM  
+12V:     +12.40 V  (min = +12.95 V, max =  +7.96 V)       ALARM  
-12V:      -7.01 V  (min =  +1.78 V, max = -10.63 V)       ALARM  
-5V:       -3.84 V  (min =  -7.66 V, max =  +2.29 V)              
V5SB:      +5.75 V  (min =  +0.08 V, max =  +0.54 V)       ALARM  
VBat:      +3.10 V  (min =  +0.54 V, max =  +0.13 V)       ALARM  
fan1:     2428 RPM  (min =    0 RPM, div = 4)                     
fan2:        0 RPM  (min = 1630 RPM, div = 4)              ALARM  
fan3:     2191 RPM  (min = 6367 RPM, div = 4)              ALARM  
temp1:       +38°C  (high =   +20°C, hyst =   +68°C)   sensor = thermistor           
temp2:     +39.5°C  (high =   +65°C, hyst =   +60°C)   sensor = diode           
temp3:     +38.0°C  (high =   +65°C, hyst =   +60°C)   sensor = thermistor           (beep)
vid:      +0.000 V  (VRM Version 2.4)
          Sound alarm enabled''

If your output does not display an RPM for your CPU fan, and you are positive it is running, you need to increase the fan divisor. If your fan speed is shown and higher than 0, skip the next step. Increasing fan_div:

The first line of the sensors output is the chipset your motherboard uses to read the speeds/temps/voltages. Make a backup first: Code:

cp /etc/sensors.conf /etc/sensors.conf_original

Edit the /etc/sensors.conf file as root

nano /etc/sensors.conf

and look up your exact chipset. The names all look alike, so make sure the one you are editing is yours. Add the line fanX_div 4 near the start of your chipset config. Replace the X with the number of your CPU fan's, for me that was 2. You have to figure out for yourself which one it is, but it's probably 1, 2 or 3.

Save, and run:

sudo sensors -s

which will reload the sensors.conf's set variables. Run sensors again and check if there is an RPM readout. If not, increase the divisor to 8, 16 or 32. YMMV!

You can safely ignore anything that's not fanX_div. I would advise you to leave the other default settings as they are.


Once you have lm sensors properly configured, run pwmconfig to test and configure speed control of your fans:


Follow the instructions in pwmconfig to set up basic speeds.

The default configuration options should create a new file, /etc/fancontrol.

Follow the instructions in pwmconfig to set up speeds.


Second warning: Some of the steps outlined below describe how to tweak fan speeds. Before doing this be sure you have a low cpu load and are comfortable playing around. If at any time during tweaking you notice the CPU temperature start to rise dramatically, do a echo "255" > /sys/class/hwmon/hwmon0/device/pwm1 to spin up the fan all the way until things cool down. Basically, you should know what your doing before fooling with the configuration file

If your want more control, you probably will need to tweak the generated configuration in order get the results you expect. Here is a sample configuration file:

FCFANS= hwmon0/device/pwm1=hwmon0/device/fan1_input
  • INTERVAL: how often the daemon should poll cpu temps and adjust fan speeds. Interval is in seconds.

The rest of the configuration file is split into (at least) two values per configuration option. Each configuration option first points to a PWM device which is written to which sets the fan speed. The second "field" is the actual value to set. This allows you to monitor and control multiple fans and temperatures (if your pc supports it).

  • FCTEMPS: The temperature input device to read for cpu temperature. The above example corresponds to /sys/class/hwmon/hwmon0/device/temp1_input.
  • FCFANS: The current fan speed, which can be read (like the temperature) in /sys/class/hwmon/hwmon0/device/fan1_input
  • MINTEMP: The temperature (°C) at which to SHUT OFF the cpu fan. Efficicent CPU's often will not need a fan while idling. Be sure to set this to a temperature that you know is safe. Setting this to 0 is not reccommended, use a sane value.
  • MAXTEMP: The temperature (°C) at which to spin the fan at it's MAXIMUM speed. This should be probably be set to perhaps 10 or 20 degrees (°C) below your CPU's critical/shutdown temperature. Setting it closer to MINTEMP will result in higher fan speeds overall.
  • MINSTOP: The PWM value at which your fan stops spinning. Each fan is a little different. Power tweakers can cat different values (between 0 and 255) to /sys/class/hwmon/hwmon0/device/pwm1 and then watch the cpu fan. When it stops, use this value.
  • MINSTART: The PWM value at which your fan starts to spin again. This is often a higher value than MINSTOP as more voltage is required to overcome inertia.


Try to run fancontrol:


It should start up and you'll probably hear your CPU fans spin down.

If it's working, in order to run at boot simply add "fancontrol" to DAEMONS in /etc/rc.conf, as a fancontrol init script is now provided by default!

Most of this howto is from [Ubuntu forums] and [Ubuntu guide].