Feature request: Controllable fans / fancurves

On the 6.10 kernel, secure boot enabled, fan control works.

1 Like

like @knipp30 report and my own test, ectool+linux-kernel-6.10 do not need to disable secure boot.

my test:
get here: Jobs · Dustin L. Howett / ectool · GitLab and download last artifact for my OS (linux in my case: #905: build linux/x64)

# on fedora 40 with last 6.10 kernel:
# default report:
$ sudo ./ectool temps all
--sensor name -------- temperature -------- ratio (fan_off and fan_max) --
ambient_f75303@4d     303 K (= 30 C)        N/A (fan_off=0 K, fan_max=0 K)
charger_f75303@4d     305 K (= 32 C)        N/A (fan_off=0 K, fan_max=0 K)
apu_f75303@4d         307 K (= 34 C)           0% (320 K and 335 K)
cpu@4c                304 K (= 31 C)           0% (338 K and 370 K)
gpu_amb_f75303@4d     273 K (= 0 C)        N/A (fan_off=0 K, fan_max=0 K)
gpu_vr_f75303@4d      273 K (= 0 C)           0% (323 K and 347 K)
gpu_vram_f75303@4d    273 K (= 0 C)        N/A (fan_off=0 K, fan_max=0 K)
gpu_amdr23m@40        273 K (= 0 C)           0% (323 K and 353 K)

$ sudo ./ectool thermalget
sensor  warn  high  halt   fan_off fan_max   name
  0      363   363    378      0       0     ambient_f75303@4d
  1      363   363    378      0       0     charger_f75303@4d
  2      363   363    378    320     335     apu_f75303@4d
  3      381   381    400    338     370     cpu@4c
  4        0     0      0      0       0     gpu_amb_f75303@4d
  5      344     0      0    323     347     gpu_vr_f75303@4d
  6        0     0      0      0       0     gpu_vram_f75303@4d
  7        0     0      0    323     353     gpu_amdr23m@40


# change temps curve: cpu@4c with 0rpm@30°C => 100%@90°C:
# > thermalset <sensor id> <warn> <high> <halt> <fan_off> <fan_max>
sudo ./ectool thermalset 3 381 381 400 303 363

#> result:
$ sudo ./ectool temps all
--sensor name -------- temperature -------- ratio (fan_off and fan_max) --
ambient_f75303@4d     307 K (= 34 C)        N/A (fan_off=0 K, fan_max=0 K)
charger_f75303@4d     308 K (= 35 C)        N/A (fan_off=0 K, fan_max=0 K)
apu_f75303@4d         308 K (= 35 C)           0% (320 K and 335 K)
cpu@4c                305 K (= 32 C)           3% (303 K and 363 K)
gpu_amb_f75303@4d     273 K (= 0 C)        N/A (fan_off=0 K, fan_max=0 K)
gpu_vr_f75303@4d      273 K (= 0 C)           0% (323 K and 347 K)
gpu_vram_f75303@4d    273 K (= 0 C)        N/A (fan_off=0 K, fan_max=0 K)
gpu_amdr23m@40        273 K (= 0 C)           0% (323 K and 353 K)

$ sudo ./ectool pwmgetfanrpm all
Fan 0 RPM: 1080
Fan 1 RPM: 1010

For me (FW16 7940HS without dGPU) does not make noise at normal/low CPU load and the case is now kept cool. CPU@33°C (was more 38/40 °C with default settings)

(Now need to add a systemd service to enable it at startup…)

1 Like

I change a lot between a few of the defaults.

I highly recommend creating an alias for some of your preferred sets:

$ grep alias ~/.bashrc 
# User specific aliases and functions
alias fan1='fw-fanctrl agile'
alias fan2='fw-fanctrl very-agile'
alias fan3='fw-fanctrl deaf'
alias fan4='fw-fanctrl aeolus'

This way, before running a game, or anything intensive… I can ramp up the fans to get ahead of the curve.

I also added the command to my sudoers.d directory as well, and then created some aliases to quickly run the ectool commands:

alias temps='sudo /usr/bin/ectool temps all'
alias fanspeed='sudo /usr/bin/ectool pwmgetfanrpm all'

Is there a link to this please?

Just in case you haven’t heard of it yet, I suggest trying “ectool thermalset” command. I run linux, but ectool is also available for windows. It doesn’t have a GUI and it may require disabling secure-boot, but it might be able to make the firmware manage the fan just the way you want.

By default, the firmware almost ignores the CPU’s internal temperature, and only really considers a temp sensor which is on the motherboard near the CPU. The idea of that was to let the cpu throttle itself when it gets too hot, and only turn on the fan when the laptop surface or other components would be getting too hot, because it seems many users just don’t want to hear the fan if at all possible :person_shrugging:

But you can change that! If you run “ectool thermalget” you can get an overview of the parameters:

sensor  warn  high  halt   fan_off fan_max   name
  0      343   353    393    313     343     local_f75303@4d
  1      343   353    393    319     327     cpu_f75303@4d
  2      343   353    393    401     401     ddr_f75303@4d
  3      370   380    390    333     368     cpu@4c

That last line is not the defaults, it’s already modified with:

ectool thermalset 3 370 380 390 333 368

That causes the fan to ramp from 0% at 60°C (333°K) to 100% at 95°C (368°K), and now my fans respond instantly when high load hits my CPU. I set that in a script that runs at bootup, but go ahead and try it on-the-fly first, to observe and adjust how you like.

1 Like

This is for the legacy command structure. There’s currently some revision ongoing where additional commands are introduced.
Old: fw-fanctrl agile
New: fw-fanctrl use agile
So, you’ve got to first give a command (“use”) and then the parameter (“agile”). Otherwise, a warning [Warning] > this command is deprecated and will be removed soon, please use the new command format instead ('fw-fanctrl -h' for more details). will be printed.

Interesting - i dont get those errors - I just pulled the git last week. When was this updated?

Github says “5 days ago”.

1 Like

Thank ya! I guess I need to update it lol.

is this for FW13 ?

on FW16 it look like:

sudo ./ectool thermalget
sensor  warn  high  halt   fan_off fan_max   name
  0      363   363    378      0       0     ambient_f75303@4d
  1      363   363    378      0       0     charger_f75303@4d
  2      363   363    378    320     335     apu_f75303@4d
  3      381   381    400    338     370     cpu@4c
  4        0     0      0      0       0     gpu_amb_f75303@4d
  5      344     0      0    323     347     gpu_vr_f75303@4d
  6        0     0      0      0       0     gpu_vram_f75303@4d
  7        0     0      0    323     353     gpu_amdr23m@40
1 Like

Yup, I have the FW13 AMD. It looks like, on your FW16, the CPU temp response settings are already pretty similar to my adjusted settings, whereas the default on mine was “fan_off” around 100°C for the in-CPU sensor. So on mine it would wait until the f75303 sensor near the CPU got around 50° C, about 30 seconds after a full load, before turning on the fan.

Everything you are talking about is very good. But as long as there is no accessible user environment in the application it is very difficult for the average user.

In any case, I don’t understand why they don’t allow it to be done with external applications like msi afterburner like on most laptops.

That type of policy is more typical of Apple than a supposedly “open” company.

I even think that some user has offered them help but they have not wanted to accept it so I do not think that, despite the multiple requests, you are interested in anything that allows you to control the fans or everything like asus, xmg, msi, dell, levono. …

1 Like

Regarding:

Everything you are talking about is very good. But as long as there is no accessible user environment in the application it is very difficult for the average user.

Are you afraid of the command line? If you are wanting help setting this up, it can be done… you just have to ask.

Regarding:

In any case, I don’t understand why they don’t allow it to be done with external applications like msi afterburner like on most laptops.

This reddit link explains it nicer, and cleaner, than I can:

https://www.reddit.com/r/framework/comments/1cdgd9o/comment/l1c19rt/

tl;dr, those other companies would need to support Framework, not the other way around.

Lastly:

That type of policy is more typical of Apple than a supposedly “open” company.

What policy? The policy that they released the code for the ectool to the public so people could create an option to control the fans?

The process is right there for you to use. You just have to implement it. Just because its not your “first choice” - doesn’t mean it doesnt exist.

Hell… I even have a gui to control my fans now thanks to the open nature of this support:
image

3 Likes

I don’t doubt your good work. But most users need an installer that is easy to use, run it, install it, and get it working.

As frameworks like asus, levono, xmg, alienware already do…

That is the reality, it has to be accessible to any user and this is not it.

You have obviously made up your mind. The majority of your posts in this forum, as well as on reddit, point to a negative view of this laptop. I am curious why you have decided to keep it?

It is not negative, simply in this aspect both I and other users are requesting that an accessible application be developed or that third-party applications be allowed to be used.

When you block third-party applications, it is already contrary to the nature of the product.

1 Like

Framework don’t block other company, all is open sources, only this “third-party” don’t want to support it!

And I have some HP/ASUS/SAMSUNG laptop and most of them don’t support any config like that. More than that, because it is close source it is very hard to reverse there codes! if some have support on linux it is only with very hard work of reverse engineering windows tools to make thing possible on linux.

Framework (or the community) is in progess to make all that upstream in linux kernel so we do not more need ectools, and use standart tools to manage it.
Now on windows it is more complicated, there is no standart for that, all company did there own program close source. So to have something “working” like you want it is more complicatate.

Now if you think that it is simple to do, all spec is open, you can make a nice tools with installer, windows signing… etc.

2 Likes

Well, you should start supporting Windows / Linux for fans, tdp and frequencies following the model, for example, of devices like Steamdeck or Levono Legion Go because complaints about noise and heat are practically daily.

https://www.reddit.com/r/framework/comments/1exej7u/framework_for_heavyduty_gaming/