You logged in and the desktop is unresponsive
You upgraded to Fedora 41, logged in, and the mouse cursor lags behind your hand. The top bar takes three seconds to respond to a click. The laptop fan screams at maximum speed. You open a terminal and see gnome-shell consuming 80% of the CPU. This pattern usually points to a misbehaving GNOME Shell extension, a graphics driver falling back to software rendering, or a background indexer fighting your storage. Work through the checks in this order.
What is actually happening
GNOME Shell is a compositor. It draws the desktop, windows, panels, and visual effects. It relies on the GPU to handle this workload efficiently. The compositor runs a render loop that updates the screen multiple times per second. If the GPU driver is missing, broken, or incompatible, the system falls back to software rendering. The CPU then has to calculate every pixel for every frame using Mesa's llvmpipe renderer. This causes high CPU usage, severe lag, and rapid battery drain.
Extensions run inside the GNOME Shell process. They are GJS scripts that share the main thread with the compositor. They do not run in a separate sandbox. A single extension with an infinite loop, heavy polling, or a memory leak can block the main thread. This freezes the entire desktop. Background services like the file indexer can also spike CPU when they scan directories. Identify the root cause before applying fixes.
Identify the bottleneck
Run top to see which process is holding the CPU hostage. Sort by CPU usage to find the heaviest load. The output shows the process name, CPU percentage, and memory usage.
top -o %CPU # Sort processes by CPU usage so the heaviest load appears at the top
Look at the top line. If gnome-shell is high, the issue is the compositor or an extension. If tracker-miner-fs is high, the file indexer is running. If Xorg is high on an X11 session, the display server is struggling. If you see a specific application, that application is the problem. Check the journal for errors related to the process. The -x flag adds explanatory text and the -e flag jumps to the end of the log.
journalctl -xeu gnome-shell # Show recent logs for the shell unit with explanatory text
Run top before you guess. The process name tells you exactly where to look.
Isolate GNOME Shell extensions
Extensions run JavaScript code inside the GNOME Shell process. They modify the UI and add functionality. A buggy extension can cause infinite loops, heavy polling, or memory leaks that degrade performance for the entire desktop. Disable all extensions to test. If performance returns, re-enable them one by one to find the culprit.
List enabled extensions to see what is active. The output shows the UUID and name of each extension.
gnome-extensions list --enabled # Print the UUIDs of all active extensions to identify candidates
Disable all user extensions instantly without logging out. This setting persists across reboots until you change it back.
gsettings set org.gnome.shell disable-user-extensions true # Disable all user extensions instantly without logging out
Test the desktop. If the lag is gone, re-enable extensions individually. Check the extension website for compatibility with your Fedora version. Some extensions are not updated for newer releases and can cause crashes or performance issues.
gsettings set org.gnome.shell disable-user-extensions false # Re-enable extensions after identifying the problematic one
Disable all extensions to test. Re-enable them one by one to find the culprit.
Verify hardware acceleration
GNOME requires hardware acceleration for smooth performance. The system should use the GPU for compositing. Verify the OpenGL renderer. The output should show your GPU model. If you see llvmpipe or software rasterizer, the GPU is not active. The system is using software rendering. This causes high CPU usage. Fix the graphics driver.
glxinfo | grep -i renderer # Check the OpenGL renderer string to confirm GPU usage
For NVIDIA GPUs, install the proprietary driver. Fedora provides akmod-nvidia which compiles the driver module for the running kernel. The akmod package builds the module during installation. This may take a minute. Reboot after installation.
sudo dnf install akmod-nvidia xorg-x11-drv-nvidia-cuda # Install the proprietary NVIDIA driver and CUDA toolkit
For AMD and Intel GPUs, the open-source drivers are included in the kernel. Verify the module is loaded. The amdgpu module handles modern AMD GPUs. The i915 module handles Intel GPUs.
lsmod | grep -E 'amdgpu|i915' # Verify the kernel module for your GPU is loaded
Check the renderer string. If you see llvmpipe, fix the driver before touching anything else.
Tame the file indexer
Tracker indexes files to provide search results. On login, the indexer scans the home directory. This can spike CPU and disk I/O. If the spike happens only after boot, Tracker is likely the cause. Reset the index to clear a stuck cycle. The -s flag stops the indexer and clears the database.
tracker3 reset -s # Stop the indexer and clear the database to reset a stuck indexing cycle
Disable recursive indexing if the indexer is too aggressive. This setting prevents Tracker from scanning subdirectories, which reduces load but limits search results.
gsettings set org.freedesktop.Tracker3.Miner.Files index-recursive-directories "[]" # Disable recursive directory indexing to reduce load
Reset the tracker database if the spike happens only on startup. Disable recursive indexing if search is too aggressive.
Adjust display settings
Animations add visual polish but cost GPU cycles. On older hardware, disabling animations can restore responsiveness. The compositor does not need to calculate intermediate frames for transitions.
gsettings set org.gnome.desktop.interface enable-animations false # Disable animations to reduce compositor load on weak hardware
Fractional scaling on X11 forces the compositor to render at a higher resolution and scale down. This is expensive. Switch to Wayland for fractional scaling support. Wayland handles scaling more efficiently. Log out and select Wayland at the login screen.
Disable animations on weak hardware. Switch to Wayland if you need fractional scaling.
Resolve NVIDIA driver conflicts
The open-source nouveau driver conflicts with the proprietary NVIDIA driver. If both try to load, the GPU can fail to initialize. Blacklist nouveau and rebuild the initramfs. The initramfs is a small filesystem loaded early in boot. It contains drivers needed to mount the root disk. If you change kernel module parameters, you must rebuild the initramfs. Otherwise, the system boots with the old configuration.
echo 'blacklist nouveau' | sudo tee /etc/modprobe.d/blacklist-nouveau.conf # Prevent the open-source driver from loading
sudo dracut --force # Rebuild the initramfs to apply the blacklist at boot
Blacklist nouveau and rebuild the initramfs. Reboot immediately after driver changes.
Decision matrix
Use top when you need to identify the process consuming CPU.
Use gnome-extensions disable when the desktop lags but the system is otherwise stable.
Use glxinfo when you suspect software rendering is causing high CPU.
Use tracker3 reset when CPU spikes occur only immediately after login.
Use akmod-nvidia when you have an NVIDIA GPU and see llvmpipe in glxinfo.
Use gsettings to disable animations when the hardware is too old for smooth compositing.