Fedora not applying custom fan curves set via asusctl until I switch profiles

Hi, i am on a asus laptop where I run Fedora 42 (but this problem occured even in previous versions). I use asusctl as a tool to set custom fan curves for each profile. for example, the fan curve for the Performance profile is:

asusctl fan-curve -g
Starting version 6.1.12
CPU: enabled: true, 55c:4%,60c:9%,65c:29%,68c:46%,72c:67%,76c:83%,96c:100%,97c:100%
GPU: enabled: true, 55c:3%,60c:10%,65c:29%,68c:40%,72c:60%,76c:74%,96c:87%,97c:100%

Which means that the fans shouldn’t run at all below 55°C. However, if I just boot the computer fans will run way too fast (> 2000 rpm) with a CPU temperature of ~30°C. I have to manually select another power profile via the KDE toolbar (for example switching from Performance to Balance and bacl) and then the fans slow down and act according to the curve I set.

What is going on? Why aren’t asusctl fan curves applied at boot?

The command ‘asusctl’ does not appear in a fedora package. Expecting 3rd party apps and configs to run by default is not appropriate. I realize it comes for support of an asus laptop, but it probably requires user config to ensure the fan profile is active at startup.

Having the fans totally disabled until the temps reach 55c seems problematic since the CPUs will heat up at an exponential rate and could reach the shutdown level (about 95c+) before the fan has a chance to begin cooldown. If you want the fan profile to work for you, why not start the fan at about 30c at a very low speed instead of waiting until 55c to even start the fan.

For me it is much better to allow the system defaults to control the fan speeds, and the fans running at startup seems appropriate.

The asusctl utility is under active development, is not distributed by fedora, and may in fact require a custom kernel… depending on the asus model… if im reading the upstream instructions correctly.

Its best to contact the asusctl developers directly. Good luck. It looks like they are working hard to get the necessary kernel patches for asusctl into the upstream kernel, but its definitely a very new thing so its not unsurprising there are some rough corners. It might be a known deficiency, or it might be a bug, the upstream developer would be able to point you in the right direction.

1 Like

Hi, thanks for the replies. I am using the default amd updated kernel. The asusctl software works and from journalctl I can see that it loads up without errors and that it correctly reads the custom fan curves.

I can’t just use the default fan curves beacause for some reason they are way too aggressive: for example in idling with a cpu/gpu temp below 30 °C the fans run at 3000 rpm which seems excessive and noisy. Also, whith the custom curve that I posted I manage to keep the temperature always below 65 °C and even while gaming It heats up but the temperature stays controlled and far from 90°C.

I was thinking if there is an alternative tool for this purpose.

This is journalctl -b: Aug 07 07:00:58 davide-fedora kernel: Linux version 6.15.8-200.fc42.x86_64 (mock - Pastebin.com

This is the output from sensors (after a fresh reboot):

sensors
coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +42.0°C  (high = +100.0°C, crit = +100.0°C)
Core 0:        +38.0°C  (high = +100.0°C, crit = +100.0°C)
Core 4:        +36.0°C  (high = +100.0°C, crit = +100.0°C)
Core 8:        +39.0°C  (high = +100.0°C, crit = +100.0°C)
Core 12:       +36.0°C  (high = +100.0°C, crit = +100.0°C)
Core 16:       +34.0°C  (high = +100.0°C, crit = +100.0°C)
Core 20:       +41.0°C  (high = +100.0°C, crit = +100.0°C)
Core 24:       +38.0°C  (high = +100.0°C, crit = +100.0°C)
Core 25:       +38.0°C  (high = +100.0°C, crit = +100.0°C)
Core 26:       +38.0°C  (high = +100.0°C, crit = +100.0°C)
Core 27:       +39.0°C  (high = +100.0°C, crit = +100.0°C)
Core 28:       +43.0°C  (high = +100.0°C, crit = +100.0°C)
Core 29:       +43.0°C  (high = +100.0°C, crit = +100.0°C)
Core 30:       +43.0°C  (high = +100.0°C, crit = +100.0°C)
Core 31:       +43.0°C  (high = +100.0°C, crit = +100.0°C)

asus-isa-0000
Adapter: ISA adapter
cpu_fan:     2500 RPM
gpu_fan:     2800 RPM

nvme-pci-e100
Adapter: PCI adapter
Composite:    +33.9°C  (low  =  -0.1°C, high = +86.8°C)
                       (crit = +89.8°C)
Sensor 1:     +33.9°C  (low  = -273.1°C, high = +65261.8°C)

BAT0-acpi-0
Adapter: ACPI interface
in0:          16.38 V  
power1:        0.00 W  

iwlwifi_1-virtual-0
Adapter: Virtual device
temp1:        +34.0°C  

ucsi_source_psy_USBC000:001-isa-0000
Adapter: ISA adapter
in0:           0.00 V  (min =  +0.00 V, max =  +0.00 V)
curr1:         0.00 A  (max =  +0.00 A)

nvme-pci-e200
Adapter: PCI adapter
Composite:    +38.9°C  (low  = -273.1°C, high = +84.8°C)
                       (crit = +84.8°C)
Sensor 1:     +38.9°C  (low  = -273.1°C, high = +65261.8°C)
Sensor 2:     +37.9°C  (low  = -273.1°C, high = +65261.8°C)

acpitz-acpi-0
Adapter: ACPI interface
temp1:        +27.8°C  

It seems that the system defaults on 2500 rpm for cpu_fan and 2800 rpm for gpu_fan.