Fancontrol on Framework Laptop

Yesterday I noticed a very unusual bahaivor of the fan of my Framework Laptop 13 that runs Bazzite. After some investigation I found out that the fw-fanctrl.service is responsible for the strange behaivor. The default fan profile of the utility is way too erratic. In addition when I set a fixed percentage trough the YAFI application (from the Bazaar Store) it would go to max rpm for a second and come down to the rpm it was before.

After rebasing to version 42 the issue persisted so I suspect something got configured that persists trough the rebase. The last two weeks i never noticed such behaivor and was able to set the percentage of the fan just fine.

After disabling the service with “systemctl disable --now fw-fanctrl.service” the fan behaved as usual.

Since Bazzite doesn’t allow me to edit the system files to disable the fw-fanctrl.service from starting, I would be glad if you can tell me a way to disable it or add the option to the system.

I also set up another Framework Laptop for my little sister with Bazzite two days ago and it now has the same problem. So the issue isn’t because I poked around the system files.

Thanks a lot

the disable command should do just that, disable the service.

There should be a default config available that you can edit and change, but I just can’t remember where it is now and I am not near my FW laptop.

the disable command should do just that, disable the service.

Do you mean “systemctl disable --now fw-fanctrl.service”? How can I run the command at startup?

There should be a default config available that you can edit and change, but I just can’t remember where it is now and I am not near my FW laptop.

I guess you mean the config.json in /etc/fw-fanctrl? I like the default fan behavoir that Framework implemented and just want to disable fw-fanctrl.service.

You don’t need to run it on boot, that systemctl disable fw-fanctrl.service disables the whole service that is normally run at boot.

You don’t need to run it on boot, that systemctl disable fw-fanctrl.service disables the whole service that is normally run at boot.

If that’s true then something starts it up again. Everytime I reboot the service is running.

Disabling the service:

Philipp@bazzite:~$ systemctl status fw-fanctrl
● fw-fanctrl.service - Framework Fan Controller
     Loaded: loaded (/usr/lib/systemd/system/fw-fanctrl.service; disabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Thu 2025-10-30 12:34:49 CET; 1h 21min ago
 Invocation: ccd607f6910e4ffda835b4a864897b03
   Main PID: 2491 (python3)
      Tasks: 2 (limit: 18580)
     Memory: 27.7M (peak: 29.1M)
        CPU: 1min 33.247s
     CGroup: /system.slice/fw-fanctrl.service
             └─2491 /usr/bin/python3 /usr/bin/fw-fanctrl --output-format JSON run --config /etc/fw-fanctrl/config.json --silent

Okt 30 12:34:49 bazzite systemd[1]: Started fw-fanctrl.service - Framework Fan Controller.
Philipp@bazzite:~$ systemctl disable --now fw-fanctrl.service
Philipp@bazzite:~$ systemctl status fw-fanctrl
○ fw-fanctrl.service - Framework Fan Controller
     Loaded: loaded (/usr/lib/systemd/system/fw-fanctrl.service; disabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
     Active: inactive (dead) since Thu 2025-10-30 13:56:57 CET; 8s ago
   Duration: 1h 22min 8.287s
 Invocation: ccd607f6910e4ffda835b4a864897b03
    Process: 2491 ExecStart=/usr/bin/python3 /usr/bin/fw-fanctrl --output-format JSON run --config /etc/fw-fanctrl/config.json --silent (code=killed, signal=TERM)
    Process: 26364 ExecStopPost=/bin/sh -c ectool autofanctrl (code=exited, status=0/SUCCESS)
   Main PID: 2491 (code=killed, signal=TERM)
   Mem peak: 29.1M
        CPU: 1min 33.844s

Okt 30 12:34:49 bazzite systemd[1]: Started fw-fanctrl.service - Framework Fan Controller.
Okt 30 13:56:57 bazzite systemd[1]: Stopping fw-fanctrl.service - Framework Fan Controller...
Okt 30 13:56:57 bazzite sh[26364]: Automatic fan control is now on for all fans.
Okt 30 13:56:57 bazzite systemd[1]: fw-fanctrl.service: Deactivated successfully.
Okt 30 13:56:57 bazzite systemd[1]: Stopped fw-fanctrl.service - Framework Fan Controller.
Okt 30 13:56:57 bazzite systemd[1]: fw-fanctrl.service: Consumed 1min 33.844s CPU time, 29.1M memory peak.


After the reboot:

Philipp@bazzite:~$ systemctl status fw-fanctrl
● fw-fanctrl.service - Framework Fan Controller
     Loaded: loaded (/usr/lib/systemd/system/fw-fanctrl.service; disabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Thu 2025-10-30 13:58:29 CET; 53s ago
 Invocation: c798f42089fc47a89b8a90d0179d73ea
   Main PID: 2548 (python3)
      Tasks: 2 (limit: 18580)
     Memory: 26.9M (peak: 28.1M)
        CPU: 1.545s
     CGroup: /system.slice/fw-fanctrl.service
             └─2548 /usr/bin/python3 /usr/bin/fw-fanctrl --output-format JSON run --config /etc/fw-fanctrl/conf>

Okt 30 13:58:29 bazzite systemd[1]: Started fw-fanctrl.service - Framework Fan Controller.
lines 1-14/14 (END)

Would adding this option maybe help?

--no-reload         Don't reload daemon after en-/dis-abling unit files

I figured out a solution after leaning about how systemd works:

I made a file in “/etc/systemd/system” with the same name as the file that loads the fancontrol service (fw-fanctrl.service) and kept it empty. Now when the service tries to start, it fails because the override file contains no instructions.

I guess that the disable command doesn’t work because Bazzite, being an atomic distro, doesn’t want me to change system level stuff directly.

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.