Repository navigation
Releases: vindeckyy/fan-control
Release list
Fan Control v2.0.1 - Windows WMI Control
Fan Control v2.0.1
Windows hardware-control release plus a self-contained Linux AppImage.
Windows
Download the executables directly - each is a single self-contained file, no Python installation required:
- fan-control.exe - desktop dashboard (Edge WebView2 / bundled browser fallback).
- fan-ctl.exe - command-line client (
status,profile,mode,set,curves,diagnose, ...). - fan-daemon.exe - background thermal-control daemon.
Highlights:
- Real fan control on Uniwill/Tongfang ECs:
windows_wmitalks to EC RAM through the ACPI WMIAcpiTest_MULonginterface, the same channel the OEM control center uses.- Manual duty through EC user fan mode and the direct PWM registers (
0x1804/0x1809, 0-200 scale), with release back to firmware automatic control. - EC CPU/GPU temperatures and fan tachometer (RPM) readouts.
- Hardware-verified on a Gateway GWTN156-2BK (Tongfang GK5NR0O firmware).
- Manual duty through EC user fan mode and the direct PWM registers (
- Accurate detection:
available()requires the exactAcpiTest_MULongclass, so generic ACPI test classes no longer produce a false "hardware found". Writes now reach the EC instead of being silently accepted. - Administrator required for hardware control: run
fan-daemon.exefrom an elevated prompt, or install it as a SYSTEM startup task withscripts/install-service-windows.ps1.
Linux AppImage
fan-control-2.0.1-x86_64.AppImage bundles the full GTK4 + WebKitGTK 6 dashboard: CPython, PyGObject, GTK 4, WebKitGTK 6.0, and the built React UI. No system packages are needed beyond a recent glibc (built on Ubuntu 24.04).
chmod +x fan-control-2.0.1-x86_64.AppImage
./fan-control-2.0.1-x86_64.AppImage # dashboard
./fan-control-2.0.1-x86_64.AppImage daemon # daemon (run with sudo for EC access)
./fan-control-2.0.1-x86_64.AppImage ctl status --jsonThe dashboard is unprivileged; hardware control still requires the root daemon (AppImage daemon mode or the packaged fan-daemon).
Verification
SHA256SUMS.txt lists the SHA-256 digest of every attached asset. Source code archives are generated by GitHub for the tag.
Fan Control v2026.9.1
Fan Control v2026.9.1
A major architectural release introducing an unprivileged desktop dashboard, continuous background daemon with Unix domain socket RPC, unified thermal control, and full distribution packaging.
What changed
- Unprivileged Dashboard:
fan-guiand the GTK4 + WebKitGTK 6 workstation now run unprivileged as the desktop user. WebKit no longer runs as root. - Continuous Daemon & Socket IPC:
fan-daemonis now the sole root process owning the embedded controller and runs continuously. Opening the GUI no longer stops the systemd service. All mutations and telemetry travel over/run/fan-control/control.sock(0660 root:fan-control). - Unified Controller: Removed the duplicate hand-rolled decision loop from
fan-daemon.py.FanControlleris now the single source of truth across daemon, GUI, tray, and CLI. - CLI & Tray Socket Routing:
fan-ctloperations (status,profile,mode,set,cap,config,curve,curves) andTrayApplicationprofile changes route directly over the socket without modifying config files on disk or sending SIGHUP. - Diagnostics & Runtime: Extracted
find_cpu_sensor()anddiagnose()intofan_diagnostics.py. Cleaned up legacy PID tracking infan_runtime.pyand deleted obsolete backwards-compatibility ioctl aliases fromfan_backend.py. - Packaging: Added
packaging/debian/fan-control.postinst, Archpackaging/sysusers.conf, and RPM%prescriptlet to configure thefan-controlsystem group. - Pre-built UI Assets: Includes the production WebKit dashboard bundle (
ui/dist/), allowing directmake installwithout requiring Node.js or npm. - Strict Quality: 100% changed-line test coverage across all modified modules (102 unit tests), ruff linting, and automated version synchronization.
Assets
| Asset | Purpose |
|---|---|
fan-control-linux-x86_64.tar.gz |
Complete release bundle with executables, backend modules, systemd service, packaging, and pre-built UI bundle |
SHA256SUMS |
SHA-256 checksums for release verification |
Fan Control v1.0.0
Fan Control v1.0.0
First release since the project settled on its current shape. The headline is a second hardware backend: clevo_acpi, for Clevo/Tongfang boards where tuxedo_io refuses to bind.
What changed
- Added a
clevo_acpisysfs backend. It drives per-fan duty through thefanN_manual_duty/fanN_duty/fanN_tempfiles on theclevo-acpiplatform device and relies on that driver's kernel-side watchdog to hand control back to firmware if the controlling process stops. - Added backend auto-detection with
--backendandFAN_CONTROL_BACKENDoverrides. - Reworked duty to a single 0-100 percent domain. The
tuxedo_iobackend maps percent to its native 0-198 raw value at the edge. - Migrated existing
tuxedo_ioconfigs automatically: when any duty reads above 100, the whole config is rescaled from raw 0-198 to percent. - Added
coretempCPU sensor support so Intel Clevo boards can read a control temperature. - Fixed the custom curve duties at 75C and 85C, which were still using stale raw-domain values.
Attribution
The clevo_acpi sysfs interface comes from clevo-acpi-dkms (GPL-2.0-or-later), verified against the clevo-control-panel (GPL-3.0) reference daemon. No code was copied, only the documented attribute names and contract.
Assets
| Asset | Purpose |
|---|---|
fan-control-linux-x86_64.tar.gz |
Executables, backend module, service unit, and README |
SHA256SUMS |
SHA-256 checksums for the tarball |
The tarball contains fan-daemon.py, fan-gui.py, fan_backend.py, fan-daemon.service, and README.md. Install by copying the scripts to /usr/local/bin and the service unit to /etc/systemd/system/ as described in the README.