Optimize KDE Performance
You are helping the user tune KDE Plasma settings for better performance and responsiveness.
Task
Check current performance baseline:
# CPU/RAM usage of KDE processes ps aux | grep -E "plasma|kwin" | grep -v grep # Memory usage free -h # KWin resource usage top -b -n 1 | grep -E "plasma|kwin"Disable unnecessary visual effects:
# Reduce KWin effects kwriteconfig6 --file kwinrc --group Plugins --key blurEnabled false kwriteconfig6 --file kwinrc --group Plugins --key contrastEnabled false kwriteconfig6 --file kwinrc --group Plugins --key slidebackEnabled false kwriteconfig6 --file kwinrc --group Plugins --key zoomEnabled false # Disable desktop effects for slower systems kwriteconfig6 --file kwinrc --group Compositing --key Enabled false # Or keep compositing but reduce effects kwriteconfig6 --file kwinrc --group Compositing --key AnimationSpeed 3 # Restart KWin to apply qdbus org.kde.KWin /KWin reconfigureOptimize compositor settings:
# Use OpenGL 3.1 (faster than 2.0, more compatible than 3.1 Core) kwriteconfig6 --file kwinrc --group Compositing --key GLCore false kwriteconfig6 --file kwinrc --group Compositing --key GLPlatformInterface egl # Set rendering backend (EGL is usually faster) kwriteconfig6 --file kwinrc --group Compositing --key Backend OpenGL # Disable VSync for lower latency (may cause tearing) # kwriteconfig6 --file kwinrc --group Compositing --key GLPreferBufferSwap n # Or use adaptive VSync kwriteconfig6 --file kwinrc --group Compositing --key GLPreferBufferSwap a # Reduce latency kwriteconfig6 --file kwinrc --group Compositing --key LatencyControl false qdbus org.kde.KWin /KWin reconfigureDisable Baloo file indexing (if not needed):
# Disable Baloo balooctl disable # Stop Baloo service balooctl stop # Check status balooctl status # Or configure to index only specific folders balooctl config add /home/daniel/Documents balooctl enableReduce desktop search scope:
# Configure Baloo to exclude large directories kwriteconfig6 --file baloofilerc --group "General" --key "exclude filters" "*.tmp,*.o,*.pyc" kwriteconfig6 --file baloofilerc --group "General" --key "folders[$e]" "$HOME/Downloads/,$HOME/.cache/,$HOME/.local/share/Trash/" balooctl restartOptimize Plasma widget performance:
# Disable weather widget auto-update kwriteconfig6 --file plasma-org.kde.plasma.desktop-appletsrc --group "Containments" --group "1" --group "Applets" --group "org.kde.plasma.weather" --key "updateInterval" 3600 # Reduce system monitor update frequency # (Edit via GUI: Right-click widget -> Configure)Reduce animation speed or disable:
# Faster animations kwriteconfig6 --file kdeglobals --group KDE --key AnimationDurationFactor 0.5 # Disable animations entirely kwriteconfig6 --file kdeglobals --group KDE --key AnimationDurationFactor 0 # Apply changes kquitapp6 plasmashell && kstart plasmashellOptimize KWin window management:
# Disable window focus effects kwriteconfig6 --file kwinrc --group Plugins --key diminactiveEnabled false kwriteconfig6 --file kwinrc --group Plugins --key dimscreenEnabled false # Faster window switching kwriteconfig6 --file kwinrc --group TabBox --key DelayTime 0 # Instant window placement kwriteconfig6 --file kwinrc --group Windows --key Placement Smart qdbus org.kde.KWin /KWin reconfigureDisable unnecessary Plasma features:
# Disable desktop thumbnails kwriteconfig6 --file kwinrc --group Plugins --key thumbnailasideEnabled false # Disable desktop grid effect kwriteconfig6 --file kwinrc --group Effect-DesktopGrid --key ShowAddRemove false # Disable magic lamp effect kwriteconfig6 --file kwinrc --group Plugins --key magiclampEnabled false qdbus org.kde.KWin /KWin reconfigureConfigure KWin for better performance:
# Unredirect fullscreen windows (better gaming performance) kwriteconfig6 --file kwinrc --group Compositing --key UnredirectFullscreen true # Allow tearing for low latency kwriteconfig6 --file kwinrc --group Compositing --key AllowTearing true # Refresh rate (match your monitor) kwriteconfig6 --file kwinrc --group Compositing --key RefreshRate 0 # Auto-detect qdbus org.kde.KWin /KWin reconfigureOptimize system tray:
# Remove unnecessary system tray icons # (Done via GUI: Right-click system tray -> Configure System Tray -> Entries) # Check what's running in system tray qdbus | grep "org.kde.StatusNotifierItem"Reduce memory usage:
# Clear Plasma cache rm -rf ~/.cache/plasma* rm -rf ~/.cache/kwin* # Disable clipboard history kwriteconfig6 --file klipperrc --group General --key KeepClipboardContents false # Reduce clipboard history size kwriteconfig6 --file klipperrc --group General --key MaxClipItems 5Disable KDE Connect if not needed:
# Stop KDE Connect kdeconnect-cli --refresh systemctl --user stop kdeconnect systemctl --user disable kdeconnectOptimize font rendering:
# Disable font anti-aliasing for speed (not recommended for readability) # kwriteconfig6 --file kcmfonts --group General --key forceFontDPI 96 # Use faster font rendering kwriteconfig6 --file kcmfonts --group General --key XftAntialias true kwriteconfig6 --file kcmfonts --group General --key XftHintStyle hintslightMonitor performance improvements:
# Before and after comparison echo "=== Plasma Performance ===" ps aux | grep plasmashell | grep -v grep | awk '{print "CPU: "$3"% RAM: "$4"%"}' echo "=== KWin Performance ===" ps aux | grep kwin | grep -v grep | awk '{print "CPU: "$3"% RAM: "$4"%"}' echo "=== Total KDE Memory Usage ===" ps aux | grep -E "plasma|kwin|kde" | awk '{sum+=$6} END {print sum/1024 " MB"}'
Performance Testing
Create benchmark script:
cat > /tmp/kde-performance-test.sh << 'EOF'
#!/bin/bash
echo "KDE Performance Test"
echo "===================="
echo ""
# Test 1: Plasma shell responsiveness
echo "Test 1: Measuring Plasma restart time..."
start=$(date +%s%N)
kquitapp6 plasmashell && kstart plasmashell
sleep 3
end=$(date +%s%N)
echo "Plasma restart: $((($end-$start)/1000000)) ms"
# Test 2: KWin reconfigure time
echo "Test 2: Measuring KWin reconfigure time..."
start=$(date +%s%N)
qdbus org.kde.KWin /KWin reconfigure
end=$(date +%s%N)
echo "KWin reconfigure: $((($end-$start)/1000000)) ms"
# Test 3: Resource usage
echo "Test 3: Current resource usage..."
ps aux | grep -E "plasma|kwin" | grep -v grep | awk '{print $11 ": CPU="$3"% MEM="$4"%"}'
EOF
chmod +x /tmp/kde-performance-test.sh
/tmp/kde-performance-test.sh
Revert to Defaults
If optimizations cause issues:
# Backup then remove KWin config
mv ~/.config/kwinrc ~/.config/kwinrc.optimized
kquitapp6 kwin_wayland && kstart kwin_wayland
# Reset Plasma config
mv ~/.config/plasmarc ~/.config/plasmarc.optimized
kquitapp6 plasmashell && kstart plasmashell
# Reset KDE globals
mv ~/.config/kdeglobals ~/.config/kdeglobals.optimized
Hardware-Specific Optimizations
For AMD GPUs:
# Use AMDGPU backend
kwriteconfig6 --file kwinrc --group Compositing --key GLPlatformInterface egl
# Enable TearFree if tearing occurs
# (Set in xorg.conf or kernel parameters)
For older/slower systems:
# Minimal effects
kwriteconfig6 --file kwinrc --group Plugins --key kwin4_effect_translucyEnabled false
kwriteconfig6 --file kwinrc --group Plugins --key kwin4_effect_fadeEnabled false
# Disable compositing entirely
kwriteconfig6 --file kwinrc --group Compositing --key Enabled false
For high-end systems:
# Enable all effects
kwriteconfig6 --file kwinrc --group Compositing --key AnimationSpeed 1
kwriteconfig6 --file kwinrc --group Plugins --key blurEnabled true
Notes
- Test changes one at a time to identify what helps
- Some changes require logging out/in to fully apply
- Disabling compositing may cause tearing and disable effects
- Baloo indexing can be heavy on CPU/disk during initial index
- Keep compositor enabled for VRR/FreeSync support
- Monitor GPU usage with
radeontopornvidia-smi - Check KWin compositor info:
qdbus org.kde.KWin /KWin supportInformation