You unplugged the charger and the battery is dying
You just installed Fedora on a laptop. The desktop loads. The terminal works. You close the lid, grab the machine, and walk to the coffee shop. An hour later, the battery indicator shows 40%. The fan is spinning at full speed. The chassis is warm. You check the settings menu and find a power slider, but moving it does nothing. The system is running in performance mode. It treats your laptop like a server rack. You need to tell the kernel how to behave when the power cord is gone.
What's actually happening
Linux power management works in layers. The kernel exposes hardware controls through sysfs files. Userspace tools read those files and write values back to tune behavior. Fedora ships with basic power management enabled by default. It handles CPU frequency scaling and disk spin-down. It does not aggressively tune every subsystem. Some hardware needs specific parameters to balance performance and battery life.
TLP is a userspace daemon that automates these tweaks. It switches settings automatically when you plug or unplug the charger. It manages CPU governors, disk APM levels, USB autosuspend, and wireless power save. It runs in the background and requires no desktop environment integration. TLP reads a configuration file and applies rules based on the power source. It does not rely on systemd inhibitors or desktop session variables. It works on headless servers and minimal installs just as well as on GNOME or KDE.
The kernel provides several levers for power control. CPU governors decide how the processor scales frequency. The powersave governor limits the maximum frequency to reduce heat and draw. The performance governor allows turbo boost and higher clocks. Disk APM levels control how aggressively the drive spins down or reduces power. USB autosuspend puts idle devices to sleep. Radio power save reduces transmit power for WiFi and Bluetooth. TLP coordinates all these levers from a single config file.
Install and enable TLP
Install the package and the radio device wrapper. Enable the service. TLP does not start automatically after installation. You must enable the systemd unit.
sudo dnf install tlp tlp-rdw -y
# tlp-rdw provides radio device wrapper support for wifi and bluetooth power saving.
sudo systemctl enable --now tlp
# Enable persists the service across reboots. --now starts the daemon immediately.
Check the service status before you edit config. systemctl status tlp shows the active state and recent log lines. Always verify the daemon is running before you assume configuration changes took effect.
systemctl status tlp
# Verify the service is active and check for errors in the journal output.
Configure power profiles
Edit the main config file. Fedora keeps user config in /etc/tlp.conf. The file is heavily commented. Uncomment lines to override defaults. Never edit files in /usr/lib/. Those ship with the package. Changes in /usr/lib/ vanish on update.
# /etc/tlp.conf
# CPU governor selection. powersave limits max frequency. performance allows turbo boost.
CPU_SCALING_GOVERNOR_ON_AC=performance
CPU_SCALING_GOVERNOR_ON_BAT=powersave
# Disk APM levels. 254 disables APM. 128 balances power and latency.
DISK_APM_LEVEL_ON_AC=254
DISK_APM_LEVEL_ON_BAT=128
# USB autosuspend. 1 enables autosuspend for idle devices.
USB_AUTOSUSPEND=1
# SCHED_POWERSAVE. 1 enables scheduler power saving hints.
SCHED_POWERSAVE=1
# Battery care thresholds. Charge starts at 75% and stops at 80% to reduce wear.
START_CHARGE_THRESH_BAT0=75
STOP_CHARGE_THRESH_BAT0=80
Apply changes. TLP does not reload config automatically. Run the start command to apply.
sudo tlp start
# Restarts the daemon and applies the new configuration immediately.
Run tlp-stat after every config change. Verify the values before you trust the battery life.
Verify the settings
Check the current state. Use tlp-stat to inspect power management parameters. The output shows the active governor, APM levels, and USB status.
tlp-stat -b
# -b shows battery and power management status.
The output looks like this.
--- TLP 1.6.0 ---------------------------------------------------------
+++ Battery Features
...
Battery Charge Thresholds: start=75, stop=80
...
+++ Processor
...
CPU0: governor=powersave, freq=800 MHz
...
+++ Disk
...
sda: APM=128
...
Look for the governor and APM levels. If they match your config, TLP is working. The governor should show powersave on battery. The APM level should match the value you set. If the values are wrong, check for conflicting services.
Run tlp-stat after every config change. Verify the values before you trust the battery life.
Common pitfalls and conflicts
TLP conflicts with other power management tools. Only one tool should control CPU governors and disk settings. If you installed power-profiles-daemon or auto-cpufreq, TLP will fight them. The result is unpredictable behavior. Settings may revert. Battery life may degrade.
Disable conflicting services.
sudo systemctl disable --now power-profiles-daemon
# Stop the desktop power profile daemon if you use TLP.
sudo systemctl disable --now auto-cpufreq
# Stop auto-cpufreq if you use TLP.
TLP does not handle screen brightness. Brightness control is managed by the kernel or brightnessctl. TLP focuses on CPU, disk, USB, and radio power saving. Do not expect TLP to dim the screen.
Some laptops have proprietary battery management tools. Lenovo Vantage, Dell Power Manager, and HP Support Assistant may conflict with TLP charge thresholds. If you use a vendor tool, disable TLP charge thresholds. Set START_CHARGE_THRESH_BAT0=0 and STOP_CHARGE_THRESH_BAT0=0.
The tlp-rdw package handles radio power saving. If WiFi drops or Bluetooth disconnects, check the tlp-rdw config. You may need to whitelist specific devices or adjust power save levels.
# /etc/tlp.d/rtl.conf
# Whitelist a specific wifi device to prevent power save issues.
DEVICES_TO_DISABLE_ON_STARTUP=wlan
DEVICES_TO_ENABLE_ON_STARTUP=
DEVICES_TO_DISABLE_ON_BAT_0=wlan
DEVICES_TO_ENABLE_ON_BAT_0=
Disable conflicting services. Two daemons fighting over CPU governors will leave you with neither power nor performance.
Choose the right tool
Use TLP when you want a background daemon that applies aggressive power saving rules without desktop integration. Use power-profiles-daemon when you prefer the GNOME power slider and want settings to follow the desktop theme. Use auto-cpufreq when you need dynamic adjustment based on CPU load and temperature rather than static AC/BAT rules. Stick with Fedora defaults when your hardware has robust ACPI support and you only need basic frequency scaling.