How to Fix Laptop Overheating on Fedora (Thermal Management)

Check your current thermal status and fan behavior using `sensors` and `thermald`, then enable the `thermald` daemon if it isn't running to actively manage CPU frequencies based on temperature.

You open your laptop to check email and the chassis feels like a warm mug of coffee. The fans spin up to jet-engine levels, or worse, the system slows to a crawl while the temperature gauge climbs past 90°C. You just upgraded to Fedora 40, or maybe you have been running this machine for months and the heat started suddenly. The hardware runs fine on Windows, so the issue is almost certainly in how Fedora is talking to the thermal sensors and fan controllers.

What's actually happening

The Linux kernel exposes thermal zones as virtual files in /sys/class/thermal/. Each zone reports a temperature and a trip point. A trip point is a threshold that triggers an action, like spinning up a fan or reducing CPU speed. By default, the kernel handles basic protection, but it does not know your laptop's specific fan curve. That is where thermald comes in.

Think of the kernel as a fire alarm that cuts power when the room catches fire. thermald is the smart thermostat that adjusts the AC before the fire starts. Without thermald, your CPU runs at full frequency until the hardware forces a slowdown. That hardware slowdown feels like lag and generates unnecessary heat because the CPU stays hot longer before throttling. Fedora ships thermald by default, but it may not be running, or it may lack the configuration for your specific laptop model.

Run sensors before you panic. A warm laptop is normal. A throttling laptop is a configuration problem.

Install and enable thermal management

Start by ensuring the monitoring tools and the thermal daemon are installed. Fedora includes thermald in the base repository, but minimal installs or custom spins might omit it. lm_sensors provides the user-space tools to read the hardware data.

sudo dnf install lm_sensors thermald tuned
# lm_sensors provides the sensors command to read hardware data from the kernel
# thermald is the daemon that actively manages CPU frequency based on temperature
# tuned is the Fedora standard tool for power profiles and performance tuning

Enable the thermald service. This daemon monitors thermal zones and adjusts CPU frequency before hardware throttling occurs. It communicates with the kernel to lower the CPU speed when temperatures approach the trip points.

sudo systemctl enable --now thermald
# Starts the thermald service immediately and enables it for future boots
# thermald runs in the background and responds to temperature changes in real time
# The --now flag avoids a separate start command

Check the service status to confirm it is active. Look for the green active (running) line. If the service failed, the status output will show the error reason.

systemctl status thermald
# Shows the current state of the thermald service and recent log lines
# Look for "Active: active (running)" to confirm the daemon is working
# If the service is inactive, check the journal for startup errors

Verify temperatures and daemon status

Use sensors to read the current temperatures. The output lists all detected thermal zones. Look for Core 0, Core 1, and Package id 0. Idle temperatures above 70°C usually indicate a missing thermal daemon, a blocked fan, or a background process consuming CPU cycles.

sensors
# Reads current temperatures from all detected thermal zones
# Core temperatures should be within 10-15°C of each other
# Package temperature represents the overall CPU heat output

If thermald is running but temperatures remain high, check the journal log. The -xe flags add explanatory text and jump to the end of the log, which is the standard way to read journal output on Fedora.

journalctl -xeu thermald
# Shows the journal log for thermald with explanatory text and jumps to the end
# Look for lines mentioning "Thermal zone" or "Fan control" to verify active management
# If thermald crashes, this log will show the exact error before the restart

Convention aside: journalctl -xe is the muscle-memory command for most sysadmins. The x flag adds high-priority explanatory text, and the e flag jumps to the end. Use journalctl -xeu <unit> to filter by service. Always check the journal before guessing at the cause.

Configure power profiles with tuned

The tuned daemon manages power profiles on Fedora. It adjusts CPU governors, disk spindown, and other kernel parameters based on the selected profile. The powersave profile reduces heat generation by lowering CPU frequency limits. This profile reduces heat at the cost of peak performance.

Install tuned if it is not already present. Most Fedora Workstation installs include it, but server spins may require manual installation.

sudo dnf install tuned
# tuned provides the tuned-adm command to manage power profiles
# The tuned daemon applies kernel parameters and governor settings automatically
# Install this package if tuned-adm is not found

Apply the powersave profile. This profile is ideal for laptops running on battery or in warm environments. It limits the maximum CPU frequency to reduce heat output.

sudo tuned-adm profile powersave
# Applies the power-saver profile which lowers CPU frequency limits
# This profile reduces heat generation at the cost of peak performance
# Use this profile when running on battery or in a warm environment

Verify the active profile. The output should show Current active profile: powersave. If you need more performance, switch back to balanced or performance. The balanced profile is the default and provides a good trade-off between speed and heat.

tuned-adm active
# Shows the currently active tuned profile
# The output lists the profile name and the last time it was changed
# Use this command to confirm the profile switch took effect

Reboot after changing the tuned profile. Some kernel parameters only apply on boot. A reboot ensures all settings are applied cleanly.

Advanced: Custom fan curves and thermald configuration

Some laptops require custom configuration for thermald to control the fans correctly. Fedora ships a database of thermal configurations, but your model might not be in it. If thermald is running but the fans do not respond, you may need a custom XML configuration.

Check if a custom configuration exists. The file /etc/thermald/thermal-conf.xml is the user-modified configuration. Files in /usr/lib/thermald/ ship with the package and get overwritten on updates. Always edit /etc/.

ls -l /etc/thermald/thermal-conf.xml
# Checks if a custom thermal configuration file exists
# If the file exists, thermald uses it instead of the default rules
# Edit this file to add custom fan curves or trip points for your laptop

Convention aside: Config files in /etc/ are user-modified. Files in /usr/lib/ ship with the package. Edit /etc/. Never edit /usr/lib/. Package updates overwrite /usr/lib/ and destroy your custom rules.

If you need to create a custom configuration, use thermald --verbose to see how the daemon interprets the thermal zones. This output helps you write the correct XML rules.

sudo thermald --verbose
# Runs thermald in the foreground with verbose logging
# This output shows how thermald reads thermal zones and applies rules
# Use this to debug configuration issues or to understand the current behavior
# Press Ctrl+C to stop the verbose run and return to normal operation

For laptops where thermald cannot control the fans, fancontrol provides manual PWM control. This tool is part of the lm_sensors package. Run pwmconfig to generate a configuration file for fancontrol.

sudo pwmconfig
# Runs an interactive wizard to detect fan headers and test PWM control
# The wizard tests each fan by stopping it and measuring the temperature rise
# Follow the prompts to create a configuration file for fancontrol
# Only run this if thermald cannot manage your fans and you need manual control

Edit the generated configuration file in /etc/fancontrol. Add rules for each fan based on temperature thresholds. Start the fancontrol service to apply the rules.

sudo systemctl enable --now fancontrol
# Starts the fancontrol service and enables it for future boots
# fancontrol reads the configuration file and adjusts fan speeds based on temperature
# This service runs independently of thermald and provides manual fan control

Check the BIOS before blaming Fedora. Firmware bugs cause thermal issues more often than kernel bugs. Manufacturers release BIOS updates that fix fan curves and sensor reporting. Use fwupd to check for firmware updates.

sudo fwupdmgr get-updates
# Checks for available firmware updates using fwupd
# Firmware updates can fix thermal management issues at the hardware level
# Install updates if available and reboot to apply the changes

Verify it worked

Run a stress test to verify the thermal management is working. The stress tool generates CPU load. Monitor the temperatures while the load is active. The temperature should rise but stabilize below the throttling threshold. The fans should spin up and then quiet down as the temperature stabilizes.

sudo dnf install stress
# stress provides the stress command to generate CPU and memory load
# Install this package if the stress command is not found
# Use stress to test thermal management under load

Run the stress test and monitor temperatures in a separate terminal. The temperature should stabilize. If the temperature keeps climbing, the thermal management is not working correctly.

stress --cpu 4 --timeout 60
# Generates CPU load on 4 cores for 60 seconds
# Use this to test thermal management under sustained load
# Monitor temperatures in another terminal while this runs

Watch the numbers drop. If the temperature stabilizes below 75°C under load, the daemon is doing its job. If the temperature hits 95°C and the system slows down, check the configuration again.

Common pitfalls and error messages

SELinux denials can block thermald from accessing thermal zones. This is rare, but it happens on custom builds. Check the audit log for denials.

sudo grep thermald /var/log/audit/audit.log | grep denied
# Searches the audit log for SELinux denials related to thermald
# If you see denials, restore the default context or create a custom policy
# SELinux denials usually appear as "avc: denied" messages in the log

The thermald service may fail to start if the configuration file is malformed. The error message appears in the journal.

Failed to start Thermal Daemon Service.

If you see this error, check the journal for the specific reason. A syntax error in thermal-conf.xml will cause the service to fail. Fix the XML syntax and restart the service.

sudo systemctl restart thermald
# Restarts the thermald service to apply configuration changes
# Use this after editing thermal-conf.xml or changing tuned profiles
# Check the status again to confirm the service started successfully

Background processes can consume CPU cycles and generate heat. Use htop to identify processes using high CPU. Kill unnecessary processes or adjust their scheduling priority.

htop
# Shows a real-time view of running processes and resource usage
# Look for processes with high CPU% that are not essential
# Use the F9 key to kill a process if it is causing thermal issues

When to use which tool

Use thermald when you want automatic thermal management without manual configuration. Use tuned when you need to switch between performance and battery life profiles based on your workflow. Use fancontrol when thermald cannot control your fans and you need a custom PWM curve. Use BIOS updates when the manufacturer releases firmware that fixes fan curves or sensor reporting. Stay on the default balanced profile if your laptop runs cool and you only need thermal intervention during heavy compilation tasks.

Where to go next