Skip to content

Add ACPI fan support repair UI and full-speed threshold toggle#40

Open
linkj-r wants to merge 9 commits intoaarron-lee:mainfrom
linkj-r:main
Open

Add ACPI fan support repair UI and full-speed threshold toggle#40
linkj-r wants to merge 9 commits intoaarron-lee:mainfrom
linkj-r:main

Conversation

@linkj-r
Copy link
Copy Markdown

@linkj-r linkj-r commented May 7, 2026

Summary

  • ACPI fan support repair: When a SteamOS kernel update breaks the acpi_call DKMS module (causing fan curves to stop responding), a "NOT ACTIVE" warning appears in the Fan Control section with an Apply Fan Fix button. The fix reinstalls kernel headers, rebuilds the DKMS module, and prompts to restart Decky — all without leaving the plugin panel.
  • Full-speed threshold toggle: Each temperature step in the fan curve editor now has an optional toggle to engage full fan speed at that temperature. Enabling one collapses all higher steps (since they're superseded) and drives the existing fan watchdog.
  • Feature flag: The repair UI is gated behind ENABLE_FAN_FIX in src/featureFlags.ts and can be disabled without removing any code.

Fan Fix UI

Fan support not active — Apply Fan Fix button appears in place of the curve editor

Fix flow (confirmation → progress steps → completion)









After restart — Fan Support shows ACTIVE, curve editor is restored

Full Speed Threshold Toggle

Toggle appears after each temperature step at 60°C and above

Toggle enabled — collapses higher steps


Testing

To test the full fan fix flow, install from my fork's release and follow testing/README.md:

curl -L https://github.com/kjroberts39/LegionGoRemapperWithAutoFanSetup/releases/download/v0.3.1/LegionGoRemapper.tar.gz -o /tmp/LegionGoRemapper.tar.gz
sudo HOME=/home/deck sh ~/homebrew/plugins/LegionGoRemapper/ota_update.sh

linkj-r and others added 9 commits April 16, 2026 23:11
py_modules/fan_support.py → ../submodules/LegionFanFix/py_modules/fan_support.py

fan_support.py now has a single source of truth in LegionFanFix. Fixes go
into that repo first; bump the submodule pin here to pick them up.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@linkj-r linkj-r marked this pull request as ready for review May 7, 2026 05:04
@aarron-lee
Copy link
Copy Markdown
Owner

Hrm, I'm not sure about having LGORemapper unlock root FS + installing kernel headers, DKMS, etc, on official SteamOS. 🤔

The acpi_call functionality was strictly intended for distros that shipped it, such as Nobara and Bazzite.

@aarron-lee
Copy link
Copy Markdown
Owner

I'll think about this for a bit.

Absolute worst case scenario, I wouldn't mind updating the README to redirect SteamOS users to your fork (if you want to maintain it)

@linkj-r
Copy link
Copy Markdown
Author

linkj-r commented May 8, 2026

lol i just realized i posted all of those responses from my work account. one sec.

@linkj-r
Copy link
Copy Markdown
Author

linkj-r commented May 8, 2026

I appreciate your time for the review and thoughts! :)

What do you think of the threshold full speed fan controls? It irritated me that when using a curve, i could never hit full speed. Even at the highest temps. I honestly didn't come away with a visual design I loved. I like the collapsing functionality, but I don't love the new line underneath each potential full speed option.

I actually originally built the installation of kernel headers, DKMS, etc as an individual plugin, and then decided this would be my preferred location for this to exist as its where I'd change fan controls themselves. And if the fan controls are not rendering this would render to get them enabled.

If it is non-preferable to have the install as part of the LGR, I will gladly finish building out my own plugin. I'll probably just productionize my individual plugin for enabling fan controls. And remove the installation of kernel headers, DKMS, etc on this fork. My individual plugin is all functional, just doesn't have an easy release/install path yet. I built it first as a prove of concept then wanted it here for a more ideal state. I would probably have you point at that plugin and not the fork, if you wanted to reference it in your readme.

The acpi_call functionality was strictly intended for distros that shipped it, such as Nobara and Bazzite.
I'll have to go read into this more, I didn't realize this was the case. It seems like a mistake that we wouldn't be able to have control over airflow on the legion go with a device that can do more than the steamdeck. But I have some learning I need to do, I don't know the implications.

Lastly, I actually need to make an improvement on my pop up modals, they are currently requiring a touchscreen or mouse interaction, where I'd like a controller joystick to also easily select them. I just noticed this yesterday, and I will try to get that fixed today or tomorrow.

Once again, I appreciate your time, in review, but also in building this helpful plugin in the first place.

@linkj-r
Copy link
Copy Markdown
Author

linkj-r commented May 8, 2026

I could potentially put my toggle on the same line as the 60 degrees and percentage sign, move the percentage to the left, the toggle far right that just says full speed. Maybe a little divider right there. For visual distinction, but might feel too packed.

@linkj-r
Copy link
Copy Markdown
Author

linkj-r commented May 8, 2026

The acpi_call functionality was strictly intended for distros that shipped it, such as Nobara and Bazzite.
Okay I understand better why you are saying this, its more that we don't want to muck with the traditional SteamOS console like, out of box experience.

My personal thought on this would be, this plugin is for the legion go, not the steam deck, if someone is putting steamos onto a legion go they are already breaking out of the traditional console like experience, and setting themselves up for tinkering, especially the second they set up decky loader.

That being said being an advocate against myself, disabling steam read only mode from game mode casually isn't exactly a good look either. Removes some of the value of what steamos is trying to do from an identity perspective.

If we wanted some form of middle ground, what if in the install we prompt the user with the choice to turn on or off this functionality, with warnings as to what it does, if they install it with it off the feature flag will effectively just be off. This indicator will never show up for them. I'll likely need to set up an environment variable or something to manage that.
Otherwise I'll build out my plugin and you can direct people to it there, and I will give warnings on the readme there.

@linkj-r
Copy link
Copy Markdown
Author

linkj-r commented May 8, 2026

Sorry for blowing up your notifications.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants