# TLP: Battery and Charge-Threshold Control for Linux Laptops

> TLP is a GPL-2.0 shell-based power management utility for Linux laptops, with three automatic profiles, radio device switching and a D-Bus daemon that can stand in for power-profiles-daemon. Here is what it does, how to install it, and where it stops being the right tool.

**linrunner/TLP** — TLP - Optimize Linux Laptop Battery Life

- Repository: https://github.com/linrunner/TLP
- Website: https://linrunner.de/tlp
- Stars: 3,332 · Forks: 154
- Language: Shell
- License: GPL-2.0
- Published: 2026-09-24 · Updated: 2026-09-24 · Language: en
- Canonical page: https://hysenlabs.com/projects/linrunner-tlp

## What TLP solves on a laptop that a desktop power setting does not

A Linux laptop exposes power knobs in several unrelated places: cpufreq governors under sysfs, disk and PCIe runtime power management, radio devices managed by NetworkManager or rfkill, and on many ThinkPads and other supported models a charge threshold interface that stops the battery filling to 100 percent while the machine sits on AC. TLP's job is to write to those interfaces from one place. The README describes it as a utility that saves laptop battery power without the need to delve into technical details, and states that the default settings are already optimized for battery life. That default-first stance is the main reason people install it: you get a working configuration before you read any documentation.

The audience is narrower than 'Linux users'. TLP targets laptops, and its most distinctive feature, a unified approach to battery charge thresholds, only applies to ThinkPads and other supported models. On a desktop or a server there is no battery to threshold and no AC transition to react to, so the package adds a systemd unit and a configuration file for no benefit. The radio switching feature, enabling or disabling Bluetooth, NFC, Wi-Fi and WWAN on boot and when the LAN cable is connected or removed, is also a laptop-shaped concern.

## Three profiles, AC detection and the tlp-pd D-Bus daemon

The settings are organised into three profiles: performance, balanced and power-saver. They switch automatically, and the README notes that savings and performance can be adjusted independently for AC and battery operation. That independence is the part worth understanding before you edit anything. A single profile name does not map to one set of values; it maps to a set selected by whether the machine is on mains power. The repository layout reflects this: tlp.conf.in is the template for the user configuration, defaults.conf holds the shipped defaults, and 00-template.conf is provided as a starting point, with rename.conf and deprecated.conf tracking options that have moved or been retired between versions.

Alongside the automatic behaviour there is tlp-pd, described in the README as a newly introduced profiles daemon that enables manual profile switching with a mouse click. Its purpose is compatibility: it implements the same D-Bus API used by GNOME, KDE and Cinnamon for switching power profiles, which the README says makes TLP together with the daemon a complete replacement for power-profiles-daemon. The supporting files are visible in the repository root: tlp-pd.dbus.conf, tlp-pd.dbus.service, tlp-pd.policy and tlp-pd.service.in. That is the trade-off in one sentence. You get a desktop-integrated profile switcher, but you take on a second daemon and a polkit policy file, and you give up the automatic AC-driven switching whenever the desktop's manual selection is in force.

## Installing TLP and reading tlp-stat for the first time

The README does not carry install commands. It points to the Installation page at linrunner.de/tlp/installation and states that TLP packages are available for all major Linux distributions. The related searches include 'ppa linrunner tlp', which suggests Ubuntu users look for a PPA, but nothing in the repository confirms a PPA address, so treat your distribution's own package as the starting point. The Makefile shows the install layout the project itself uses: binaries land in /usr/sbin and /usr/bin, shared functions in /usr/share/tlp and /usr/share/tlp/func.d, distribution-specific battery hook scripts in /usr/share/tlp/bat.d, the systemd unit in /usr/lib/systemd/system, and the configuration in /etc/tlp.conf with drop-ins in /etc/tlp.d. Defaults live at /usr/share/tlp/defaults.conf and are not meant to be edited.

After installation, the first real use is inspection rather than configuration. tlp-stat is the diagnostic tool, and it is the file you run to see what TLP actually found on your hardware. It must be run as root because it reads kernel interfaces directly.

## A first configuration drop-in instead of editing tlp.conf

The Makefile defines TLP_CONFUSR as /etc/tlp.conf and TLP_CONFDIR as /etc/tlp.d, which tells you the intended pattern: leave the main file alone and add numbered drop-ins under /etc/tlp.d. The repository ships 00-template.conf as the model for that file. The exact option names are documented on the Settings and Optimizing pages at linrunner.de/tlp, not in the README, so read those before writing keys. What the layout does establish is that a drop-in is a plain configuration fragment and that ordering is by filename, which is why the template is prefixed 00.

After any change, TLP has to be told to re-read it. The project ships a systemd unit, so the service is the lever.

## Where TLP is the wrong tool

TLP writes to interfaces the kernel and vendor modules already expose. It does not create them. On a laptop whose embedded controller offers no charge threshold interface, the threshold options have nothing to act on, and the README's claim of a unified approach for ThinkPads and many other supported laptops is explicitly conditional on the model. That is the first real limitation, and it is a hardware one you cannot configure around.

The second is the interaction with desktop power management. The README frames tlp-pd as a complete replacement for power-profiles-daemon, which is a statement about the D-Bus API, not a statement that both can run at once. Two daemons answering the same API on the same bus is a conflict, and the README does not describe a coexistence mode. If your distribution ships power-profiles-daemon as a hard dependency of the desktop meta-package, removing it may pull other things with it.

The third is scope. TLP is a shell project with a Makefile that installs into /usr/sbin, /usr/lib/systemd/system and /etc, and it ships system-sleep hooks for both systemd and elogind. That is a system-level package, not a user-space utility. If you want per-user power behaviour, or you are running in a container, or you need the same configuration to apply to a fleet of heterogeneous machines, TLP's model of one host with one battery does not fit. The README also states plainly that support questions belong in your Linux community, after checking the Support page, and that bug reports follow the Bug Reporting Howto in the repository. There is no vendor support contract behind it.

## TLP against power-profiles-daemon and against doing nothing

The obvious alternative is power-profiles-daemon, and the difference is not the profile names, which are similar. The difference is what drives the switch. power-profiles-daemon exposes the D-Bus API that desktops call when the user picks a profile from a menu; the desktop is the source of truth. TLP's own model is automatic: profiles change with AC and battery state, and the README says savings and performance are configured independently for those two conditions. tlp-pd adds the desktop API on top of that model rather than replacing it, which is why the README calls the combination a complete replacement rather than a fork.

If you do not need charge thresholds or radio switching, the honest alternative is the kernel and the desktop you already have. cpufreq governors, runtime power management for PCIe and disks, and rfkill all work without TLP; what you lose is the single file that coordinates them and the automatic AC transition. TLP's value is coordination and defaults, not access to hardware that would otherwise be inaccessible.

## Maintenance, releases and the GPL-2.0 licence

The repository is not archived and the last push was on 2026-09-14, which is recent enough that the project is being worked on. Releases are frequent: 1.10.0 on 2026-04-20, 1.10.1 on 2026-05-04 and 1.10.2 on 2026-07-06. That cadence has a cost for anyone pinning versions. The presence of rename.conf and deprecated.conf in the repository root means configuration keys are renamed and retired between releases, so a drop-in written against an older version can silently stop applying after an upgrade. Read the changelog before upgrading a machine whose power behaviour you depend on.

The licence is GPL-2.0, with the Makefile carrying an SPDX-License-Identifier of GPL-2.0-or-later and the repository holding both COPYING and LICENSE. For ordinary laptop use this is irrelevant. If you plan to ship TLP inside a product image or link it into a proprietary management agent, the copyleft terms apply to distribution of the covered work, and that is a question for your own legal review rather than something the README answers.

## Conclusion

Adopt TLP on a laptop running a mainstream distribution where you want charge thresholds, radio control and profile switching from one configuration file, and where you accept that profiles are driven by AC state and a daemon rather than by the desktop's own power slider. Do not adopt it on a server, a desktop without a battery, or a machine whose vendor kernel module exposes no tunables, because TLP only writes to interfaces the kernel already provides. Before committing, run tlp-stat after installation and confirm that the battery, charge threshold and radio sections report real values rather than unsupported markers; if they do not, the configuration you write will have no effect.

## FAQ

### How do I know if TLP is running?

The project ships tlp-stat as its diagnostic tool, and it must be run as root because it reads kernel interfaces. The README does not give a one-line status command, so tlp-stat is the documented way to see whether TLP is active and what it detected.

### Is TLP better than Power Profiles Daemon?

The README states that TLP together with the tlp-pd profiles daemon provides a complete replacement for power-profiles-daemon, because tlp-pd implements the same D-Bus API used by GNOME, KDE and Cinnamon. TLP's own profile switching is automatic and driven by AC and battery state, while power-profiles-daemon is driven by the desktop's manual selection.

### What is TLP in Linux?

TLP is a Linux utility that saves laptop battery power, with default settings the README describes as already optimized for battery life. It groups settings into performance, balanced and power-saver profiles, can enable or disable Bluetooth, NFC, Wi-Fi and WWAN radios, and provides a unified approach to battery charge thresholds on ThinkPads and many other supported laptops.

## Sources

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

---

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