1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
#!/bin/bash
###########################################################################
# #
# Powersave Daemon #
# #
# Copyright (C) 2004,2005 SUSE Linux Products GmbH #
# #
# This program is free software; you can redistribute it and/or modify it #
# under the terms of the GNU General Public License as published by the #
# Free Software Foundation; either version 2 of the License, or (at you #
# option) any later version. #
# #
# This program is distributed in the hope that it will be useful, but #
# WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU #
# General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License along #
# with this program; if not, write to the Free Software Foundation, Inc., #
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #
# #
###########################################################################
# first get helper functions (e.g. DEBUG, load_scheme, ...)
. "${0%/*}/helper_functions"
. "${PUB_SCRIPT_DIR}/x_helper_functions"
# this is to save GNOME context
save_gnome_session(){
get_x_user
DEBUG "Save GNOME session for user: $X_USER" INFO
[ -n "$X_USER" -a -n "$DISP" ] && su - $X_USER -c "DISPLAY=$DISP $GNOME_BINDIR/gnome-session-save"
[ $? != "0" ] && DEBUG "Could not log out user '$X_USER' out of GNOME display '$DISP'." DIAG
}
kde_shutdown() {
DEBUG "process function: kde_shutdown" DEBUG
get_x_user
DEBUG "Shutting down kde for user: $X_USER" INFO
[ -n "$X_USER" -a -n "$DISP" ] && su - $X_USER -c "DISPLAY=$DISP $KDE_BINDIR/dcop ksmserver ksmserver logout 0 0 0"
if [ $? != "0" ]; then
DEBUG "Could not shut down KDE for user '$X_USER'." DIAG
return 1;
fi
return 0
}
# just try to shutdown all windowmanagers
# until success
kde_shutdown
ret="$?"
if [ $ret != 0 ]; then
save_gnome_session
else
# return of 0 does not necessary mean that kdm is shutting us down...
for i in 1 2 3 4 5 6 7 8 9 END; do
# if ksmserver is still there, wait a second.
pidof ksmserver && sleep 1 || break
done
if [ $i = END ]; then # we waited until the bitter end...
DEBUG "kde_shutdown did not logout after 10 seconds. Shutting down anyway..." DIAG
fi
fi
# finally shut down
/sbin/shutdown -h now
ret="$?"
$SCRIPT_RETURN $EV_ID $ret "wm_shutdown finished"
EXIT $ret
|