Skip to content

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

Open
linkj-r wants to merge 9 commits into
aarron-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 into
aarron-lee:mainfrom
linkj-r:main

Conversation

@linkj-r

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

Copy link
Copy Markdown

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

linkj-r commented May 8, 2026

Copy link
Copy Markdown
Author

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

@linkj-r

linkj-r commented May 8, 2026

Copy link
Copy Markdown
Author

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

linkj-r commented May 8, 2026

Copy link
Copy Markdown
Author

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

linkj-r commented May 8, 2026

Copy link
Copy Markdown
Author

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

linkj-r commented May 8, 2026

Copy link
Copy Markdown
Author

Sorry for blowing up your notifications.

@aarron-lee

Copy link
Copy Markdown
Owner

Sorry for blowing up your notifications.

haha, no worries. If anything, I appreciate the PR.

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 think that it's great! Sure, it might not be the most elegant looking solution, but it is very easy to understand and use. It's simple and straightforward, which I think is perfectly fine.

I also think there's not going to be a significantly better solution that works within the limitations of Decky's components. Only so much can be done given the available components and controller-oriented UI.

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.

Exactly, I think that unlocking the read-only FS is something to be very careful about.

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.

Actually, Valve does officially "support" the Legion Go 1. The devs working with Valve have explicitly added stuff like controller support and basic TDP controls for the Legion Go Z1E.

The problem is, the devs are unlikely to add support for custom fan curves.

My impression is that their priority is strictly achieving feature-parity with the Deck. So since the Deck has no custom fan curves, you won't see it for the Legion Go either.

Otherwise I'll build out my plugin and you can direct people to it there, and I will give warnings on the readme there.

Yeah, after thinking about this more, I think I'd want the DKMS + acpi_call handled separately.

The biggest issue for me is that I actually currently don't have access to a working Legion Go device (broken device 💀 ), so if the DKMS functionality breaks, I'd be at a loss on how to fix/update it.

It'd be better for me to redirect users to your plugin if the dkms functionality breaks. Not to mention, we'd want to ensure that other distros aren't affected. It'd be easier to redirect SteamOS-users to your plugin.

@aarron-lee

Copy link
Copy Markdown
Owner

🤔 Unrelated, but this is reminding me, maybe I should start looking for someone who can take over this project and give it more attention. I'm kinda stuck without a working device, after all.

@linkj-r

linkj-r commented May 15, 2026

Copy link
Copy Markdown
Author

Sorry for the lack of response, I lost mine on sunday. I think its at my in laws but not certain there, so that's kind of held me back atm. But I will work on productionizing my separate tool as soon as I find it again.

I'd be open to potentially supporting in someway though I don't have a ton of experience with decky loader plugins. I am rapidly gaining knowledge though. I am also invested in helping people transition from windows to linux.

@aarron-lee

Copy link
Copy Markdown
Owner

So I guess it depends on what you want to do here.

I don't mind adding all the updated fan functionality to LGORemapper, the only exception would be the acpi_call + dkms enablement functionality. It's too SteamOS-specific and not something I can easily troubleshoot or maintain without a device.

Would you like to maintain a separate plugin that does just the dkms + acpi_call enablement? If you'd like to do that approach, I can redirect SteamOS users to your plugin.

Alternatively, you can build your own plugin with fan controls + dkms, etc, or maintain a fork of LGOremapper, etc. I can redirect SteamOS users that want fan controls to your fork.

If there's any other options that you'd prefer, please feel free to mention them. I'm not particularly tied to any specific option.

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