GitXplorerGitXplorer
c

zcfan

public
105 stars
9 forks
3 issues

Commits

List of commits on branch master.
Unverified
2c9dd133c597b43fee2819e353ba5cd38e3d369a

detect_suspend: Simplify logic

ccdown committed a month ago
Unverified
4c1561c8e193fa9c3f342956b1f737e7fdbae3bc

suspend: Detect and handle fan level reset on resume

ccdown committed a month ago
Unverified
b0eb3a3873cb27a8b1db5729bb5737bb08796ae2

clang-everything: Disable -Wdeclaration-after-statement

ccdown committed a month ago
Unverified
ae6081f34ebe2d6d10556e726c2b5750384ad131

service: Templatise systemd service file

ccdown committed 2 months ago
Unverified
0c3ac328d9870b6e516cca321c39494ad97fd622

watchdog: Reset timer instead of writing fan level to avoid spinup

ccdown committed 2 months ago
Verified
751f1f7a47fab1c9b1fdb50272d6be8df6a1b988

Make fan levels configurable

jjamielinux committed 8 months ago

README

The README file for this repository.

zcfan | Tests

Zero-configuration fan control daemon for ThinkPads.

Features

  • Extremely small (~250 lines), simple, and easy to understand code
  • Sensible out of the box, configuration is optional (see "usage" below)
  • Strong focus on stopping the fan as soon as safe to do so, without inducing throttling
  • Automatic temperature- and time-based hysteresis: no bouncing between fan levels
  • Watchdog support
  • Minimal resource usage
  • No dependencies

Usage

zcfan has the following default fan states:

Config name thinkpad_acpi fan level Default trip temperature (C)
max_temp full-speed (or 7 if unsupported) 90
med_temp 4 80
low_temp 1 70

If no trip temperature is reached, the fan will be turned off.

The fan will also only be reduced once the temperature is now at least 10C below the trip temperature for the current fan state. This can be tuned with the config parameter temp_hysteresis.

To override these defaults, you can place a file at /etc/zcfan.conf with updated trip temperatures in degrees celsius and/or fan levels. As an example:

max_temp 85
med_temp 70
low_temp 55
temp_hysteresis 20

max_level full-speed
med_level 4
low_level 1

Hysteresis

We will only reduce the fan level again once:

  1. The temperature is now at least temp_hysteresis Celsius (default 10C) below the trip point, and
  2. At least 3 seconds have elapsed since the initial trip.

This avoids unnecessary fluctuations in fan speed.

Comparison with thinkfan

I wrote zcfan because I found thinkfan's configuration and code complexity too much for my tastes. Use whichever suits your needs.

Compilation

Run make.

Installation

  1. Compile zcfan or install from the AUR package
  2. Load your thinkpad_acpi module with fan_control=1
    • At runtime: rmmod thinkpad_acpi && modprobe thinkpad_acpi fan_control=1
    • By default: echo options thinkpad_acpi fan_control=1 > /etc/modprobe.d/99-fancontrol.conf
  3. Run zcfan as root (or use the zcfan systemd service provided)

Disclaimer

While the author uses this on their own machine, obviously there is no warranty whatsoever.