fancontrol
Control system cooling fans
TLDR
Start fancontrol using default /etc/fancontrol configuration file
Start fancontrol using custom configuration file path
SYNOPSIS
fancontrol [OPTION]... [CONFIGFILE]
PARAMETERS
-c, --config FILE
Specify config file (default: /etc/fancontrol)
-t, --test
Test mode: log intended actions without changing speeds
-s, --stop
Stop the running daemon instance
-f, --force
Start even if PID file indicates running instance
-i, --pid-file FILE
PID file path (default: /var/run/fancontrol.pid)
-d, --nodm
Disable dynamic kernel module loading
-V, --version
Print version and exit
-h, --help
Display usage summary
DESCRIPTION
fancontrol is a lightweight daemon from the lm-sensors package that dynamically adjusts PC fan speeds based on hardware temperature sensors. It monitors temperatures via the kernel's hwmon interface and modulates PWM fan outputs to balance cooling efficiency and acoustic noise.
It relies on a plain-text configuration file (default: /etc/fancontrol) specifying sensor-fan mappings, PWM ranges (min/max values), hysteresis, and polling intervals. This config is generated by running pwmconfig as root, which probes hardware, tests PWM-capable fans, and creates safe defaults.
Once configured, fancontrol runs continuously as a background process (PID tracked in /var/run/fancontrol.pid), updating fan speeds every interval seconds. It supports multiple fans/sensors, averaging temps if needed, and includes safeguards like min PWM to prevent stalls.
Requires kernel support for the monitoring chip (e.g., via modules like coretemp, nct6775). Ideal for desktops/servers; laptops often use firmware control. Commonly managed via systemd (fancontrol.service).
CAVEATS
Requires root privileges for daemon mode and hwmon access.
Must run pwmconfig first for config.
Hardware-specific; not all fans/chips supported.
Single instance only; PID conflicts halt starts.
Kernel modules (e.g., pwm-fan) must load.
CONFIG FILE FORMAT
Key-value pairs like:
INTERVAL=10 (polling sec)
FCTEMPS=hwmon1/pwm2=hwmon1/temp2_input,hwmon1/temp3_input (fan=temp mappings)
MINTEMP=hwmon1/pwm2=40, MAXTEMP=hwmon1/pwm2=60
MINSTART=hwmon1/pwm2=150, MINSTOP=hwmon1/pwm2=100 (PWM vals 0-255)
SETUP STEPS
1. sensors-detect (detect chips)
2. pwmconfig (probe/test/generate config)
3. Edit /etc/fancontrol if needed
4. systemctl enable --now fancontrol (or run manually)
HISTORY
Introduced in lm-sensors 2.6.5 (circa 2003) by Rudolf Marek and others. Evolved with Linux kernel hwmon/pwm APIs; current versions (3.x+) in 2020s support modern chips like those from Nuvoton/ITE. Actively maintained via lm-sensors GitHub.
SEE ALSO
pwmconfig(8), sensors(1), sensors-detect(8), lm-sensors(7)


