danielrosehill's picture
commit
279efce

Optimize KDE Performance

You are helping the user tune KDE Plasma settings for better performance and responsiveness.

Task

  1. 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"
    
  2. 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 reconfigure
    
  3. Optimize 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 reconfigure
    
  4. Disable 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 enable
    
  5. Reduce 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 restart
    
  6. Optimize 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)
    
  7. 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 plasmashell
    
  8. Optimize 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 reconfigure
    
  9. Disable 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 reconfigure
    
  10. Configure 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 reconfigure
    
  11. Optimize 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"
    
  12. 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 5
    
  13. Disable KDE Connect if not needed:

    # Stop KDE Connect
    kdeconnect-cli --refresh
    systemctl --user stop kdeconnect
    systemctl --user disable kdeconnect
    
  14. Optimize 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 hintslight
    
  15. Monitor 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 radeontop or nvidia-smi
  • Check KWin compositor info: qdbus org.kde.KWin /KWin supportInformation