#!/bin/sh # vim: noexpandtab # Simple suspend script # # Copyright 2006 Red Hat, Inc. # # Based on work from: # Bill Nottingham # Peter Jones # David Zeuthen # Richard Hughes # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License as # published by the Free Software Foundation. # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # The rule here? Simplicity. export STASHNAME=pm-suspend export METHOD="$(echo ${0##*pm-} |tr - _)" . "/usr/lib/pm-utils/pm-functions" # return code tracking for when suspend fails r=0 help() { echo "${0##*/} [options]" echo echo "Options can change how suspend or hibernate is done." run_hooks sleep help sleep_module_help exit 0 } if [ "$(id -u)" != "0" ]; then echo This utility may only be run by the root user. 1>&2 exit 1 fi remove_suspend_lock() { release_lock "${STASHNAME}.lock" } try_lock "${STASHNAME}.lock" || exit 1 # make sure we release the lock no matter how we exit trap remove_suspend_lock 0 # clean up from the last run rm -rf "${STORAGEDIR}" mkdir -p "${STORAGEDIR}" # save our parameter list. [ -f "$PARAMETERS" ] || echo '' >"$PARAMETERS" add_parameters $PM_CMDLINE update_parameters while [ $# -gt 0 ] do [ "$1" = "--help" ] && help shift done command_exists "check_$METHOD" && command_exists "do_$METHOD" || { log "pm-utils does not know how to $METHOD on this system." exit 1 } "check_$METHOD" || { log "This system does not support $METHOD as a sleep method." exit 1 } case "$METHOD" in suspend*) ACTION=suspend; REVERSE=resume ;; hibernate) ACTION=hibernate; REVERSE=thaw ;; *) echo "Cannot happen. Please file a bug against pm-utils." exit 1 ;; esac init_logfile "${PM_LOGFILE}" log "Initial commandline parameters: $PM_CMDLINE" load_hook_blacklist load_hook_parameters # run the sleep hooks log "$(date): Running hooks for $ACTION." if run_hooks sleep "$ACTION $METHOD"; then # Sleep only if we know how and if a hook did not inhibit us. log "$(date): performing $METHOD" sync "do_$METHOD" || r=128 log "$(date): Awake." else log "$(date): Inhibit found, will not perform $METHOD" fi log "$(date): Running hooks for $REVERSE" # run the sleep hooks in reverse with the wakeup action if run_hooks sleep "$REVERSE $METHOD" reverse; then log "$(date): Finished." else exit $((r+1)) fi exit $r