Third-party
You are a package manager? Add your platform here!
Fw-fanctrl is a simple Python CLI service that controls Framework Laptop's fan(s) speed according to a configurable speed/temperature curve.
Its default strategy aims for very quiet fan operation, but you can choose amongst the other provided strategies, or easily configure your own for a different comfort/performance trade-off.
It also is possible to assign separate strategies depending on whether the laptop is charging or discharging.
Under the hood, it uses framework_tool to change parameters in Framework's embedded controller (EC).
It is compatible with all 13" and 16" models, both AMD/Intel CPUs, with or without a discrete GPU.
If the service is paused or stopped, the fans will revert to their default behaviour.
Have some cool project to show? Add yours to the list!
| Name | Description | Picture |
|---|---|---|
| fw‑fanctrl‑gui | Simple customtkinter python gui with system tray for fw‑fanctrl | |
| fw-fanctrl-revived-gnome-shell-extension | A Gnome extension that provides a convenient way to control your framework laptop fan profile when using fw-fanctrl | |
| fw_fanctrl_applet | Cinnamon applet to control the framework fan-speed strategy using fw-fanctrl | |
| ulauncher-fw-fanctrl | A fw-fanctrl extension for the app launcher ulauncher |
More documentation could be found here.
| Name | Package | Documentation |
|---|---|---|
| Linux / Global | installation script | instructions |
| NixOS | derivation / module | doc/nixos |
Third-party
| Name | Package | Documentation |
|---|---|---|
| Arch Linux | AUR | |
| Fedora / RPM | COPR | GIT repository |
| Name | Version | Url |
|---|---|---|
| Linux kernel | >= 6.11.x | |
| Python | >= 3.12.x | https://www.python.org/downloads |
Dependencies are downloaded and installed automatically, but can be excluded from the installation script if you wish to do this manually.
| Name | Version | Url | Exclusion argument |
|---|---|---|---|
| FrameworkComputer@framework-system (framework_tool) | v0.6.4 | https://github.com/FrameworkComputer/framework-system | --ignore-tool framework_tool |
Download the repo and extract it manually, or download/clone it with the appropriate tools:
git clone "https://github.com/TamtamHero/fw-fanctrl.git"curl -L "https://github.com/TamtamHero/fw-fanctrl/archive/refs/heads/main.zip" -o "./fw-fanctrl.zip" && unzip "./fw-fanctrl.zip" -d "./fw-fanctrl" && rm -rf "./fw-fanctrl.zip"Then run the installation script with administrator privileges
⚠ Linux Mint users should add the
--effective-installation-dir "/usr/local/bin"option.⚠ Fedora Atomic desktops users should add the
--prefix-dir "/var/usrlocal/"option.
sudo ./install.shYou can add a number of arguments to the installation command to suit your needs
| argument | description |
|---|---|
--dest-dir <installation destination directory (defaults to /)> |
specify an installation destination directory |
--prefix-dir <installation prefix directory (defaults to /usr)> |
specify an installation prefix directory |
--sysconf-dir <system configuration destination directory (defaults to /etc)> |
specify a default configuration directory |
--ignore-tool <tool id (e.g. framework_tool)> |
ignore tool installation/uninstallation and service activation/deactivation |
--no-post-install |
disable post-install process |
--no-pre-uninstall |
disable pre-uninstall process |
--no-pip-install |
disable the pip installation (should be done manually instead) |
--pipx |
install using pipx instead of pip (useful if os does not allow global pip install like debian ) |
--python-prefix-dir <python installation prefix directory (defaults to [dest-dir][prefix-dir])> |
specify the python prefix directory for package installation |
--effective-installation-dir <directory (defaults to [python-prefix-dir]/bin)> |
overrides the installation in which our fw-fanctrl executable is |
To update, you can download or pull the appropriate branch from this repository, and run the installation script again.
To uninstall, run the installation script with the --remove argument, as well as other
corresponding arguments if necessary
sudo ./install.sh --removeIt is recommended to use a virtual environment to install development dependencies
Install the development dependencies with the following command:
pip install -e ".[dev]"The project uses the black formatter.
Please format your contributions before commiting them.
python -m black .