How to Use power-profiles-daemon to Switch Power Modes on Fedora

Switch Fedora power modes instantly using the powerprofilesctl command with performance, balanced, or power-saver profiles.

Your laptop is running hot and the battery is draining faster than expected

You just finished a heavy compile job or a video render. The fan is screaming. You grab the laptop to move to a meeting, and the battery indicator drops 5% in a minute. You need the system to calm down. Or you are on a long flight and need every minute of battery life. The desktop environment has a slider, but the terminal gives you immediate control without clicking through menus.

The power-profiles-daemon service manages power modes on Fedora Workstation. It coordinates settings across the CPU, GPU, disk, and network interfaces. The command-line tool powerprofilesctl talks to the daemon and applies changes instantly.

What power-profiles-daemon actually does

The daemon does not just change the CPU governor. It adjusts a set of related parameters to match a power profile. When you switch profiles, the daemon sends signals to the kernel and drivers. It changes CPU frequency limits, enables or disables disk spin-down timeouts, toggles USB autosuspend, and tells the GPU driver to adjust clock speeds.

Think of the daemon as a central dial that turns multiple knobs in unison. This prevents the common problem where the CPU is throttled but the disk is spinning at full speed, or the GPU is boosting while the CPU is in power-saver mode. The daemon ensures the whole system moves together.

Fedora Workstation ships with power-profiles-daemon by default. It integrates with GNOME and KDE Plasma. The desktop power slider calls the same backend. Using powerprofilesctl in the terminal gives you the same control, which is useful for scripts, remote sessions, or when the desktop is unresponsive.

The daemon defines three standard profiles. performance locks the CPU to maximum frequency and disables disk spin-down. balanced allows dynamic frequency scaling and enables standard power savings. power-saver lowers the maximum CPU frequency, enables aggressive disk spin-down, and turns on USB autosuspend. Some hardware exposes a presentation profile. This profile reduces fan noise and stabilizes CPU performance to prevent thermal throttling during a demo. Not all laptops support this profile.

Run powerprofilesctl status before you change the profile. Know what you are switching from.

Switching profiles with powerprofilesctl

Check the current state and available profiles before making a change. The output shows which profile is active and which profiles the hardware supports. Some laptops do not advertise all profiles in their ACPI tables. If a profile is missing, the daemon cannot apply it.

Here is how to check the current status and list available profiles.

powerprofilesctl status
# Shows the active profile and the hardware profile
# The "Active profile" line confirms the current mode
# The "Hardware profile" line shows laptop, desktop, or server

powerprofilesctl list
# Displays all profiles available on this system
# If a profile is missing, the kernel or firmware does not support it
# You cannot force a profile that is not listed here

Switch to a profile by name. The change applies immediately. No reboot is required. The daemon writes the new settings to sysfs and notifies the relevant drivers.

Here is how to set the power profile.

powerprofilesctl set power-saver
# Switches to power-saver mode immediately
# The daemon lowers CPU frequency limits and enables disk spin-down
# USB autosuspend is enabled for compatible devices

powerprofilesctl set balanced
# Returns to the default balanced mode
# CPU scaling is dynamic based on load
# Disk and USB settings return to standard timeouts

If you are running a benchmark or a render, switch to performance. This mode disables power-saving features that could interfere with consistent throughput.

powerprofilesctl set performance
# Enables maximum CPU frequency and disables spin-down
# Useful for compilation, rendering, or benchmarks
# Revert to balanced when the workload is finished

Configuration lives in /etc/PowerProfiles/. Do not edit files in /usr/lib/PowerProfiles/. Package updates overwrite those directories. Copy a file to /etc/ if you need to override a default setting. Run systemctl restart power-profiles-daemon after editing configuration files.

Verify the profile took effect

The daemon applies changes asynchronously. Verify the profile is active before assuming the system has changed. The status command confirms the daemon's internal state.

Here is how to verify the active profile.

powerprofilesctl status
# Confirm the "Active profile" line matches your request
# If it still shows the old profile, the daemon may have failed
# Check the journal for errors if the profile did not switch

Check the journal if the profile did not switch or if you suspect the daemon encountered an error. The daemon logs warnings when it cannot apply a setting due to hardware limitations.

Here is how to check the daemon logs.

journalctl -u power-profiles-daemon.service -n 20 --no-pager
# Shows the last 20 log lines from the daemon
# Look for "Failed to set" or "Profile not available" messages
# The -n 20 flag keeps the output short and readable

The journalctl -xe command is useful for broader context. It adds explanatory text and jumps to the end of the journal. Use it if the daemon logs are unclear.

Run powerprofilesctl status after every change. Trust the output, not the fan noise.

Common pitfalls and conflicts

The most common issue is a conflict with tlp. Both tlp and power-profiles-daemon write to the same sysfs nodes. If both tools run, they fight for control. The system state oscillates, or one tool overwrites the other. This can cause higher power consumption than either tool alone.

Fedora Workstation prevents this by default. The package manager disables tlp when power-profiles-daemon is installed. Manual installations or third-party scripts can break this guard. Check for tlp if power management behaves unpredictably.

Here is how to check for a TLP conflict.

systemctl status tlp
# Check if TLP is active and running
# If the output shows "active (exited)", TLP is managing power
# TLP and power-profiles-daemon cannot run together

If tlp is active, disable it. The daemon needs exclusive access to the power management nodes.

Here is how to disable TLP.

sudo systemctl disable --now tlp
# Stops TLP immediately and prevents it from starting on boot
# Frees sysfs nodes for power-profiles-daemon to control
# Reboot is not required, but the daemon may need a restart

Another issue is missing profiles. powerprofilesctl list shows only what the kernel exposes. If performance is missing, the laptop firmware does not advertise it. You cannot force a profile the hardware does not support. Some older laptops or specific OEM configurations hide profiles to prevent thermal issues.

Permissions are rarely an issue. The daemon uses polkit to authorize profile changes. Standard users can switch profiles without sudo. If you see a permission error, check the polkit rules or run the command with sudo to isolate the issue.

Disable tlp if you see it running. Two power managers fighting will drain the battery faster than either alone.

When to use power-profiles-daemon vs alternatives

Fedora provides multiple power management tools. Each tool targets a different use case. Choose the tool that matches your hardware and workflow.

Use power-profiles-daemon when you are on Fedora Workstation and want desktop integration. Use tlp when you are on a headless server or need granular control over specific USB devices and disk settings. Use auto-cpufreq when you want a set-and-forget daemon that makes decisions based on load and temperature. Use manual cpupower when you are debugging kernel parameters or need a one-off change for a benchmark.

The power-profiles-daemon is the default for a reason. It balances battery life and performance without manual tuning. It works with the desktop environment. It handles hardware quirks automatically. Stick with the daemon unless you have a specific need for another tool.

Run dnf upgrade --refresh weekly to keep the daemon updated. New releases add hardware support and fix bugs.

Where to go next