NAME fancontrol - automated software based fan speed regulation

SYNOPSIS fancontrol [configfile]

DESCRIPTION fancontrol is a shell script for use with lm_sensors. It reads its con- figuration from a file, then calculates fan speeds from temperatures and sets the corresponding PWM outputs to the computed values.

WARNING Please be careful when using the fan control features of your main- board, in addition to the risk of burning your CPU, at higher tempera- tures there will be a higher wearout of your other hardware components, too. So if you plan to use these components in 50 years, maybe you shouldnt use fancontrol at all. Also please keep in mind most fans arent designed to be powered by a PWMed voltage.

In practice it doesn t seem to be a major issue, the fans will get slightly warmer, just be sure to have a temperature alarm and/or shut- down call, in case some fan fails, because you probably wont hear it anymore ;)

CONFIGURATION For easy configuration, there s a script named pwmconfig(8) which lets you interactively write your configuration file for fancontrol. Alter- natively you can write this file yourself using the information from this manpage.

Since most of you are going to use pwmconfig(8) script, the config file syntax will be discussed last. First Im going to describe the various variables available for changing fancontrols behaviour:

INTERVAL This variable defines at which interval in seconds the main loop of fancontrol will be executed

FCTEMPS Maps PWM outputs to temperature sensors so fancontrol knows which temperature sensors should be used for calculation of new values for the corresponding PWM outputs.

FCFANS FCFANS records the association between a PWM and a fan. Then fancontrol can check the fan speed and restart it if it stops unexpectedly.

MINTEMP The temperature below which the fan gets switched to minimum speed.

MAXTEMP The temperature over which the fan gets switched to maximum speed.

MINSTART Sets the minimum speed at which the fan begins spinning. You should use a safe value to be sure it works, even when the fan gets old.

MINSTOP The minimum speed at which the fan still spins. Use a safe value here, too.

MINPWM The PWM value to use when the temperature is below MINTEMP. Typically, this will be either 0 if it is OK for the fan to plain stop, or the same value as MINSTOP if you don t want the fan to ever stop. If this value isnt defined, it defaults to 0 (stopped fan).

MAXPWM The PWM value to use when the temperature is over MAXTEMP. If this value isnt defined, it defaults to 255 (full speed).

The configuration file format is a bit strange:

VARIABLE=chip/pwmdev=value chip/pwmdev2=value2 VARIABLE2=...

Each variable has its own line. The variable name is followed by an equal sign and the device=value pairs. These consist of the path to the pwm output for which the value is valid, equal sign followed by the value and are separated by a blank. Path can be absolute or relative (from /sys/bus/i2c/devices or /sys/class/hwmon depending on the kernel version). Example:

MINTEMP=hwmon0/device/pwm1=40 hwmon0/device/pwm2=54

You have to play with the temperature values a bit to get happy. For initial setup I recommend using the pwmconfig script. Small changes can be made by editing the config file directly following the rules above.

THE ALGORITHM fancontrol first reads its configuration, writes it to arrays and loops its main function. This function gets the temperatures and fanspeeds from kernel driver files and calculates new speeds depending on temper- ature changes, but only if the temp is between MINTEMP and MAXTEMP. After that, the new values are written to the PWM outputs. Currently the speed increases quadratically with rising temperature. This way you wont hear your fans most of the time at best.

SEE ALSO pwmconfig(8), sensors(1).

AUTHOR Marius Reiner <>

lm-sensors 3 January 2009 FANCONTROL(8)