#!/bin/sh
# Title:    disable-powerdevil
# Purpose:  Avoid kded4 memory leak in policy-kit
# Author:   Stephen Dowdy

# Ref: https://bugs.kde.org/show_bug.cgi?id=271934#c121
# Ref: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=775158

cat <<"EOF"

This script attempts to disable powerdevil to avoid massive memory leaks in
KDE due to a policykit bug
(until Debian releases policykit 0.105-12 in stable (Jessie).)

See:
    https://bugs.kde.org/show_bug.cgi?id=271934#c121
and:
    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=775158

This is not guaranteed to fix the memory leak problem, so please report back

Note: this disables things like DPMS, so while the screensaver/lockscreen will
still engage, the screen will not blank out anymore.

EOF

polkit_version=$(aptitude search --disable-columns -F '%v' '~i^policykit-1$')
if [ -z "${polkit_version}" ]; then
    echo "Failed to determine current policykit version"
fi

if [ ${polkit_version%%-*} != "0.105" ]; then
    echo "this fix probably doesn't affect you, exiting"
    exit 1
fi
if [ ${polkit_version##*-} -gt "12" ]; then
    echo "this fix is probably unnecessary and fixed by policykit1 version 0.105-12, exiting"
    exit 1
fi

if qdbus org.kde.kded /kded loadedModules | grep -q powerdevil; then
    echo "NOTE: powerdevil is currently loaded, attemping unload"
    qdbus org.kde.kded /kded unloadModule powerdevil
    sleep 1
    if qdbus org.kde.kded /kded loadedModules | grep -q powerdevil; then
        echo "SIGH: powerdevil appears to still be loaded"
    fi
else
    echo "NOTE: powerdevil is NOT currently loaded"
fi

echo "Creating override disable for powerdevil"

#kde_services_path="/home/sdowdy/.kde/share/kde4/services/:/etc/kde4/services:/usr/share/kde4/services/"
kde_services_path="$(kde4-config --path=services)"
kde_user_services=${kde_services_path%%:*}
kde_sys_services=${kde_services_path##*:}

if [ ! -d "${kde_user_services}/kded/" ]; then
    mkdir -p "${kde_user_services}/kded/"
fi

sed -e 's/^X-KDE-Kded-autoload=.*/X-KDE-Kded-autoload=false/' \
    -e 's/^X-KDE-Kded-load-on-demand=.*/X-KDE-Kded-load-on-demand=false/' \
    ${kde_sys_services}/kded/powerdevil.desktop \
    > ${kde_user_services}/kded/powerdevil.desktop

echo "You likely should reboot now, esp if kded4 is currently eating tons of memory"
echo "Currently kded4 is using the following..."
ps -o "pid:6,%mem:4,rss:8,args:20" -p $(pgrep kded4)

