[Portland] xdg-screensaver.in

Bryce Harrington bryce at osdl.org
Mon May 8 19:47:21 PDT 2006


First cut at the screensaver script.  I sorted out a simple way to do
the screensaver suspend, but there might be a better way (open to
suggestions.)  I also implemented the other obvious functionality -
plain disable/enable, and immediate on/off.

I also wasn't sure how to do the screensaver ops for gnome - perhaps the
xset approach is sufficient?  

Bryce



#!/bin/sh
#---------------------------------------------
#   xdg-screensaver
#
#   Utility script to enable/disable screensaver.
#
#   Refer to the usage() function below for usage.
#
#   Copyright 2006, Bryce Harrington <bryce at osdl.org>
#
#   LICENSE:
#
#---------------------------------------------

# Default value for delay when suspending screensaver
DELAY=60m

examples()
{
cat << _EXAMPLES
_EXAMPLES
}

usage()
{
cat << _USAGE
_USAGE
}

#@xdg-utils-common@

screensaver_xset()
{
    TIMEOUT=`xset q | /bin/grep -A 2 ^Screen | /bin/grep timeout | awk '{print $2}'` 
    DPMS=`xset q | /bin/grep 'DPMS is' | awk '{print $3}'` 

    if [ "$DPMS" = "Enabled" ]; then
        DPMS="+dpms"
    else
        DPMS="-dpms"
    fi

    case "$1" in
        suspend)
        delay=${2:-$DELAY}
        xset s off -dpms && sleep $delay && xset s default &
        ;;

        restore)
        # Restores screensaver to its default settings
        xset s default "$DPMS"
        ;;

        enable)
        # Allows the screensaver to start automatically
        xset s on "$DPMS"
        ;;

        disable)
        # Prevents screensaver from starting automatically
        xset s off -dpms
        ;;

        activate)
        # Turns the screensaver on right now
        xset s activate
        ;;

        reset)
        # Turns the screensaver off right now
        xset s reset
        ;;

        status)
        if [ $timeout -eq 0 ]; then
            echo "disabled"
        else
            echo "enabled"
        fi
        ;;
    esac

    if [ $? -eq 0 ]; then
        exit_success
    else
        exit_failure_operation_failed
    fi
}

screensaver_kde()
{
    case "$1" in
        suspend) 
        delay=${2:-$DELAY}
        dcop kdesktop KScreensaverIface enable false > /dev/null && \
            sleep $delay && \
            dcop kdesktop KScreensaverIface configure > /dev/null &
        ;;

        restore)
        dcop kdesktop KScreensaverIface configure
        ;;
        
        enable)
        dcop kdesktop KScreensaverIface enable false > /dev/null
        ;;
        
        disable)
        dcop kdesktop KScreensaverIface enable true > /dev/null
        ;;

        activate)
        # Turns the screensaver on right now
        dcop kdesktop KScreensaverIface save
        ;;

        reset)
        # Turns the screensaver off right now
        dcop kdesktop KScreensaverIface quit
        ;;

        status)
        status=`dcop kdesktop KScreensaverIface isEnabled`
        if [ status = 'true' ]; then
            echo "enabled"
        elif [ status = 'false' ]; then
            echo "disabled"
        else
            echo "ERROR:  kdesktop KScreensaverIface isEnabled returned '$status'"
            exit_failure_operation_failed
        fi
        ;;

        *)
        echo "ERROR:  Unknown command '$1"
        exit_failure_operation_failed
        ;;
    esac

    if [ $? -eq 0 ]; then
        exit_success
    else
        exit_failure_operation_failed
    fi
}

screensaver_gnome()
{
# TODO

    if [ $? -eq 0 ]; then
        exit_success
    else
        exit_failure_operation_failed
    fi
}

[ x"$1" != x"" ] || exit_failure_arg_count


# Always set the Xorg screensaver first
screensaver_xset "$1" "$2"

# Just in case, also do the desktop environment's screensaver
case "$DE" in
    kde)
    screensaver_kde  "$1" "$2"
    ;;

    gnome)
    screensaver_gnome "$1" "$2"
    ;;

esac


More information about the Portland mailing list