Skip to content

Releases: vindeckyy/fan-control

Fan Control v2.0.1 - Windows WMI Control

Choose a tag to compare

@vindeckyy vindeckyy released this 18 Sep 22:08

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_wmi talks to EC RAM through the ACPI WMI AcpiTest_MULong interface, 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).
  • Accurate detection: available() requires the exact AcpiTest_MULong class, 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.exe from an elevated prompt, or install it as a SYSTEM startup task with scripts/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 --json

The 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

Choose a tag to compare

@vindeckyy vindeckyy released this 05 Sep 01:02

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-gui and the GTK4 + WebKitGTK 6 workstation now run unprivileged as the desktop user. WebKit no longer runs as root.
  • Continuous Daemon & Socket IPC: fan-daemon is 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. FanController is now the single source of truth across daemon, GUI, tray, and CLI.
  • CLI & Tray Socket Routing: fan-ctl operations (status, profile, mode, set, cap, config, curve, curves) and TrayApplication profile changes route directly over the socket without modifying config files on disk or sending SIGHUP.
  • Diagnostics & Runtime: Extracted find_cpu_sensor() and diagnose() into fan_diagnostics.py. Cleaned up legacy PID tracking in fan_runtime.py and deleted obsolete backwards-compatibility ioctl aliases from fan_backend.py.
  • Packaging: Added packaging/debian/fan-control.postinst, Arch packaging/sysusers.conf, and RPM %pre scriptlet to configure the fan-control system group.
  • Pre-built UI Assets: Includes the production WebKit dashboard bundle (ui/dist/), allowing direct make install without 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

Choose a tag to compare

@vindeckyy vindeckyy released this 15 Aug 03:18

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_acpi sysfs backend. It drives per-fan duty through the fanN_manual_duty / fanN_duty / fanN_temp files on the clevo-acpi platform 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 --backend and FAN_CONTROL_BACKEND overrides.
  • Reworked duty to a single 0-100 percent domain. The tuxedo_io backend maps percent to its native 0-198 raw value at the edge.
  • Migrated existing tuxedo_io configs automatically: when any duty reads above 100, the whole config is rescaled from raw 0-198 to percent.
  • Added coretemp CPU 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.