A Linux fan control daemon
#fancon
A Linux user-space fan control daemon
sudo add-apt-repository ppa:hbriese/fancon; sudo apt-get update
sudo apt install fancon
wget https://github.com/hbriese/fancon/releases/latest/download/fancon_amd64.deb
sudo dpkg -i ./fancon*.deb; sudo apt install -f
wget https://github.com/hbriese/fancon/releases/latest/download/fancon.x86_64.rpm
sudo yum –nogpgcheck install ./fancon*.rpm
git clone https://aur.archlinux.org/fancon.git; cd fancon
makepkg -sirc
/etc/fancon.conf is automatically created on first run once the tests complete
Only 'sensor' & 'temp_to_rpm' for each fan is required to be manually configured
config {
update_interval:
1000 #Milliseconds between updating fan speeds dynamic
: true #Interpolate speeds between temps e.g(30 : 800, 50 : 1200)
results in 1000
@40 smoothing_intervals : 3 #Intervals over which to smooth RPM changes
top_stickiness_intervals : 2 #Intervals to wait before decreasing
RPM temp_averaging_intervals : 3 #Intervals to average
temperatures over -
eliminating temp spikes
}
devices {
fan {
type:
SYS #One of : SYS(default), DELL, NVIDIA;
may excluded if SYS label : "hwmon3/fan1" #Name of device -
anything you want sensor
: "CPU Package" #Sensor to read -
specify by label temp_to_rpm : "39: 0%, 40: 1%, 75: 50%, 90: 100%"
#temp(optional : f | F; default °C) : RPM(optional : % | PWM; default RPM)
# 40 : 0 % Stopped at or below 40°C(°C is used if F is omitted)
# 50 : 1 % Lowest running speed at 50°C
# 75 : 50 % 50 % of max RPM at 75°C, \
could also be written as 75 : 180PWM in this case
# 194f : 100 % Full speed at 194°F(194f = 90°C)
rpm_to_pwm
: "0: 0, 3206: 128, 4954: 180, 7281: 255" #Mappings of RPM to PWM
start_pwm : 128 #PWM at which the fan starts
#interval : 500 #Fan - specific update time; increasing improves test accuracy
ignore
: false #Don't control or test device; may be excluded if false
#Following only applicable to SYS &DELL devices
driver_flag : 2 #Driver flag to enable manual control pwm_path
: "/sys/class/hwmon/hwmon3/pwm1" #Path to read /
write PWM rpm_path
: "/sys/class/hwmon/hwmon3/fan1_input" #Path to read RPM
#Following only applicable to SYS devices
enable_path
: "/sys/class/hwmon/hwmon3/pwm1_enable" #Path to enable PWM control
}
fan{
type : NVIDIA label : "980_Ti" sensor : "980_Ti_temp"
temp_to_rpm : "54: 0%, 55: 1%, 90: 100%" rpm_to_pwm : "850: 0, 3832: 255"
start_pwm : 128 interval : 500 id : 0 #Only applicable to NVIDIA devices
} sensor {
type:
SYS #One of : SYS(default), NVIDIA;
may excluded if SYS label : "CPU Package" #Name of device -
anything you want input_path
: "/sys/class/hwmon/hwmon5/temp1_input" #Path to
read(only applicable to SYS devices)
}
sensor {
type:
NVIDIA
label:
"980_Ti_temp" id : 0 #Only applicable to NVIDIA devices
}
}
fancon arg [value] ...
h help Show this help
s status Status of all fans
e enable Enable control of all fans
e enable [fan] Enable control of the fan
d disable Disable control of all fans
d disable [fan] Disable control of the fans
t test Test all (untested) fans
t test [fan] Test the fan (forced)
f force Test even already tested fans (default: false)
m monitor Monitor all fans
m monitor [fan] Monitor the fan
r reload Reload config
c config [file] Config path (default: /etc/fancon.conf)
service Start as service
daemon Daemonize the process (default: false)
stop-service Stop the service
i sysinfo [file] Save system info to file (default: sysinfo.txt)
recover Recover control of enabled devices
nv-init Init nvidia devices
v verbose Debug logging level
a trace Trace logging level
sudo systemctl status fancon
sudo systemctl start fancon
sudo fancon service
fancon monitor
journalctl -u fancon
fancon verbose
fancon trace
First try detecting devices using lm-sensors
sudo sensors-detect
Check to see if your device is detected
sensors
Devices (fans & sensors) that:
May be configurable by altering their configuration
X11 access is required for NVIDIA control
You will need to configure the unset environmental variable.
Manually configure the unset environmental variable(s)
Inside /etc/profile
export XAUTHORITY=...
; You can find the XAuthority file by running xauth info
xhost si:localuser:root
; May be necessary on Waylandhttps://wiki.archlinux.org/index.php/Running_GUI_applications_as_root
sudo apt install clang cmake lm-sensors libsensors5 libsensors4-dev libboost-system-dev libboost-filesystem-dev libboost-log-dev libpthread-stubs0-dev libpstreams-dev libprotobuf-dev protobuf-compiler libgrpc++-dev protobuf-compiler protobuf-compiler-grpc libxnvctrl-dev libx11-dev
git clone https://github.com/hbriese/fancon.git && cd fancon; mkdir build; cd build
cmake -DNVIDIA_SUPPORT=ON .. && make -j && sudo make install
sudo apt install clang cmake lm-sensors libsensors5 libsensors4-dev libboost-system-dev libboost-filesystem-dev libboost-log-dev libpthread-stubs0-dev libpstreams-dev libprotobuf-dev protobuf-compiler libgrpc++-dev protobuf-compiler protobuf-compiler-grpc
git clone https://github.com/hbriese/fancon.git && cd fancon; mkdir build; cd build
cmake -DNVIDIA_SUPPORT=OFF .. && make -j && sudo make install
CMake Option | Default | Description |
---|---|---|
NVIDIA_SUPPORT | ON | Support for NVIDIA GPUs |
PROFILE | OFF | Support for Google Perf Tools CPU & heap profilers |
LINT | OFF | Run Clang-Tidy |