# LenovoLegionLinux: fan curves and power modes for Legion laptops

> A GPL-2.0 out-of-tree kernel module and companion tools that give Legion laptops on Linux the fan control and power mode switching Lenovo Vantage provides on Windows.

**johnfanv2/LenovoLegionLinux** — Driver and tools for controlling Lenovo Legion laptops in Linux including fan control and power mode.

- Repository: https://github.com/johnfanv2/LenovoLegionLinux
- Website: https://github.com/johnfanv2/LenovoLegionLinux
- Stars: 3,398 · Forks: 136
- Language: C
- License: GPL-2.0
- Published: 2026-10-07 · Updated: 2026-10-07 · Language: en
- Canonical page: https://hysenlabs.com/projects/johnfanv2-lenovolegionlinux

## What the project is, and what it is not

LenovoLegionLinux, shortened to LLL throughout the documentation, adds drivers and tools for Lenovo Legion series laptops running Linux. The README describes it as the alternative to Lenovo Vantage or Legion Zone, and both of those are Windows only. It also states plainly that the project is not affiliated with Lenovo in any way.

The mechanism is reverse engineering. The README says this has been achieved through reverse engineering and disassembling the ACPI firmware, plus the firmware and memory of the embedded controller, the EC. That is a more precise claim than the usual vague description, and it explains both the capability and the fragility. If the EC interface is undocumented, then support for any given model depends on how closely that model resembles the ones already reverse engineered.

The numbers give a sense of scale: 3,398 stars, 136 forks, 13 open issues, GPL-2.0 licensed, written in C, and the repository is not archived. The last push was on 2026-09-23, and the v0.0.32 release went out the same day, so this is actively worked on. The version number starting at zero is worth noticing, since it reflects that this is an out-of-tree module tracking undocumented hardware rather than a settled piece of software.

## Standard kernel interfaces are the whole design argument

The overview section makes the architectural claim, and it is the reason to care about this project beyond wanting a quiet fan. The driver implements the Linux standard interfaces: sysfs, debugfs and hwmon. Because of that, the settings are reachable from the command line, from scripts, and from standard GUI tools that already speak hwmon, with psensor named as the example.

That is the difference between this and a vendor tool. Lenovo Vantage exposes a fan curve through a Windows application. LLL exposes it through sysfs, so anything that can read or write a file can read or write it, and you can write a script that changes the profile when you plug in or unplug the charger.

The project also makes two claims about itself that are worth weighing rather than repeating. It says it is light on RAM and CPU and sends no telemetry. It says it is fully controllable using scripts or from the command line. Both are the kind of claim that is easy to make and easy to check, and both follow from the sysfs decision rather than being independent features.

## A fan curve with ten points and independent ramps

The fan curve is the feature the README spends the most space on, and the detail is what makes it useful rather than decorative. You can set a fully featured custom curve with up to ten points, and each point can use CPU, GPU and IC temperature together, so the fans respond to whichever sensor matters for the workload rather than to one number.

At each point you set the fan speed as an RPM value, and the README notes this even allows speeds below 1600 RPM. There is also a separate minimum temperature per level that has to be fallen below before the fans slow down again, which is the detail that separates a usable curve from one that oscillates. Acceleration and deceleration can be set independently for each fan, so spin-up and spin-down do not have to share the same ramp.

Presets can be saved and loaded for different modes. Combined with the power mode switching below, that gives you a set of named profiles rather than one curve you have to retune every time you change what you are doing.

## Lifting the firmware fan ceiling, gated to one BIOS

The most striking feature in the README is the ability to lift the firmware-imposed fan ceiling on supported models. On the Legion Pro 7 16IRX8H with BIOS KWCN54WW, this raises the cap from roughly 4400 RPM to roughly 7100 RPM. The README says how it was found, citing a `WMAA(0, 0x0D, 0x01)` call and pointing at issue 429.

The gating is the important part. The sysfs node sits behind a `has_fan_unlock` model and BIOS allowlist, and it is only exposed on validated firmware, with KWCN54WW named as the current one. That is a careful design: the capability exists, but only where it has been checked, rather than being offered broadly on the assumption that similar models behave identically. For anyone else, the fan unlock simply does not appear.

Also in the feature list: locking and unlocking the fan controller and fan speed, and an automatic switch to a mini fan curve if temperatures stay low for a long time. On the charging side, battery conservation mode holds the battery at 60 percent while on AC power, and the README links the KDE bug tracker entry about it, which tells you this was a real complaint that got addressed.

## Power modes, a daemon, and a shell-based alternative

Power mode switching covers quiet, balanced and performance, and the README notes you can now do it from system settings as well as with `Fn+Q`. Depending on your desktop environment you can automate it, tying quiet mode to running on battery and performance mode to running on AC. KDE's energy saving settings are named as the example.

Above that sits `legiond`, the Lenovo Legion Laptop Support Daemon, which switches fan profiles depending on the power profile. That is the piece that makes the fan curve practical rather than something you reconfigure by hand every time you move the laptop.

The v0.0.30 release in September 2026 is a good illustration of how the project is maintained. It added a Legion 5 16IAX10 model config, and a substantial share of the changes are defensive work rather than features: hardening sysfs stores, requiring root callers in `legiond`, fixing WMI event dispatch, clearing the fanset delay on reset, catching a `RuntimeError` on fan curve write failure in the GUI to stop it crashing, and stopping the SmartFan daemon from fighting turbo. Those are the fixes you want to see in a module that talks to undocumented firmware.

## Packaged for most distributions, with a daemon-only path

The README badges cover an unusually wide set of distributions: a Debian package tracker entry, an Ubuntu and Debian PPA, a Fedora Copr, two AUR packages including a DKMS variant, a Gentoo Guru overlay, a GURU live ebuild, and NixOS. Nobara and PikaOS are noted separately as carrying patched kernels.

That list is the practical answer to how you should install it. A DKMS build rebuilds the module against your running kernel, which is the standard mechanism for out-of-tree modules, and the distribution packages exist precisely so most people do not have to do that by hand.

There is also a second path for people who would rather not carry a kernel module at all. SmartFan is described as a lightweight shell-based fan daemon for Legion 7 Gen 10 and later that uses `acpi_call`, with four modes, smooth ramping, LED sync and a TUI switcher, living in `extra/smartfan/`. It calls the same ACPI surface the module does, from userspace. The v0.0.31 and v0.0.30 notes show both paths receiving fixes, including correcting a liveness check and a dangling service dependency, and hardening runtime state.

## Conclusion

The thing LenovoLegionLinux does that the standard kernel cannot is expose the embedded controller's controls through the interfaces Linux tools already understand, which is why a fan curve in ten points ends up visible to psensor rather than trapped in a vendor GUI. The project is honest about being reverse engineered and unaffiliated with Lenovo, and it is candid that merging into mainline is the goal rather than the current state. Read the feature list against your own model, because support is per-model and per-BIOS, and the fan unlock in particular is gated behind an allowlist that currently names a single firmware version. Start with the packaged installation for your distribution before building from source.

## FAQ

### Is Lenovo Legion Linux compatible with my laptop?

It depends on the model, and support is per-model rather than general. The repository lists packaging for many distributions, and recent releases add specific model configs such as the Legion 5 16IAX10, but only some features work everywhere. Check whether your exact model appears in the project's documentation before relying on it, especially for fan unlock, which is gated behind a model and BIOS allowlist.

### Does LenovoLegionLinux work without rebuilding the kernel?

It ships as an out-of-tree kernel module, which means the module has to be built against your kernel, and the AUR even offers a DKMS variant that handles that automatically. If you would rather avoid a kernel module entirely, the SmartFan option in `extra/smartfan/` is a shell-based daemon that calls the same ACPI interface from userspace using `acpi_call`.

### What can I control with the fan curve?

You get a curve of up to ten points, each able to use CPU, GPU and IC temperature together, with an RPM value per level including speeds below 1600 RPM. Acceleration and deceleration can be set separately for each fan, each level needs a minimum temperature to be fallen below before the fans slow down, and presets can be saved for different modes.

### Does LenovoLegionLinux send telemetry or work with standard Linux tools?

The README says it sends no telemetry and implements the standard sysfs, debugfs and hwmon interfaces. That is what lets the settings be read and written from scripts and from existing tools such as psensor, rather than only through a dedicated GUI.

## Sources

- [johnfanv2/LenovoLegionLinux on GitHub](https://github.com/johnfanv2/LenovoLegionLinux)
- [License: GPL-2.0](https://github.com/johnfanv2/LenovoLegionLinux/blob/main/LICENSE)
- [Project website](https://github.com/johnfanv2/LenovoLegionLinux)
- [README](https://github.com/johnfanv2/LenovoLegionLinux/blob/main/README.md)
- [Releases](https://github.com/johnfanv2/LenovoLegionLinux/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/johnfanv2-lenovolegionlinux
