Suspend to RAM
Kevin Wang
rightsock at gmail.com
Wed Dec 15 22:00:36 UTC 2004
On Wed, 15 Dec 2004 15:35:49 -0600 (CST), Satish Balay
<balay at fastmail.fm> wrote:
> ... [suspend to ram]
Here's some stuff that may be useful to folks:
I like to suspend the machine with a command, and not lid close. I
prefer lid close to put the machine in low power state, but keep it
running.
for my lid close, I do:
if (lid open...)
killall -CONT mozilla-bin
else (lid closed...)
killall -STOP mozilla-bin
and for suspend, I do far more:
#!/bin/sh
# usage: $0 [-f] [-n]
# -f = force. no network checks
# -n = not really. do everything but actual suspend
# presumption: eth0 is always the pcmcia.
# my config: builtin ethernet isn't insmod'ed by default, so the system
# just doesn't know it's there.
if ifconfig eth0 >/dev/null 2>&1 ; then
# check if there is any pending network activity
if [ " $1" = ' -f' ] ; then
# -f is specified, skip the network checks
echo 'Skipping network checks'
shift 1
else # no -f found; normal code path
# check mailq
MAILQ=`mailq -Ac`
# rh6.2: while [ "$MAILQ" != 'Mail queue is empty' ] ; do
# rh7.0: while [ "$MAILQ" != '/var/spool/mqueue is empty' ] ; do
# rh8.0: while [ "$MAILQ" != '/var/spool/mqueue is empty
# Total requests: 0' ] ; do
# rh8.0 client mqueue: (yes, multiline. WHITESPACE IMPORTANT)
while [ "$MAILQ" != '/var/spool/clientmqueue is empty
Total requests: 0' ] ; do
echo 'mail pending. press enter to retry, or
-f to override'
echo "$MAILQ"
read LINE
if [ "$LINE" = '-f' ] ; then break ; fi
MAILQ=`mailq -Ac`
done
service sendmail stop
# check for active tcp connections
# ignore :25 connections, as the mailq test has that covered
# ignore web, other 'pending close' states
# ignore X11 connections. only thing I ever use is x2x
NETSTAT="`netstat -n --inet 2>&1 | egrep -v '(:25
|TIME_WAIT|FIN_WAIT|CLOS|LAST_ACK|127.0.0.1:|:80 |:443 |:6000 )' `"
while [ `echo "$NETSTAT" | wc -l` != 2 ] ; do
echo 'network connections still active. press
enter to retry, or -f to override'
# by default, only print out the filtered netstat
echo "$NETSTAT"
read LINE
if [ "$LINE" = '-f' ] ; then break ; fi
NETSTAT="`netstat -n --inet 2>&1 | egrep -v
'(:25 |TIME_WAIT|FIN_WAIT|CLOS|LAST_ACK|127.0.0.1:|:80 |:443 |:6000 )'
`"
done
fi # endif cmd line -f
# shut down networking
killall dhcpcd
ifconfig eth0 down
# sometimes the wired ethernet is there, but since it's not my
# normal connection, it must've been temporary
ifconfig eth1 >/dev/null 2>&1 && ifconfig eth1 down
rmmod 3c59x
else
echo 'No network; skipping checks'
fi
# since I can't suspend with 2.4 acpi, additionally disable certain
# daemons because they eat cpu, and thus power
# lpd reads from disk every minute
# fetchmail is how I get my mail. obviously useless if the network is down.
# PAUSE it only
killall -STOP fetchmail
# if I can suspend
if false ; then
# eject card if possible
#cardctl eject
# report on battery condition
apm
# suspend
if [ " $1" != ' -n' ] ; then
sleep 2
# -n not found; normal code path
apm --suspend
else # -n is specified, skip the actual suspend process
echo 'Not really suspending...'
fi
# TODO: wait for eth0 to be up! else all below will fail
fi
# if I can acpi low-power
if true ; then
# enter low power state
echo 3 >/proc/acpi/sleep
echo "Press enter to revive"
read
echo "Getting new dhcp lease"
# Work network is doubled, because sometimes the dhcp server
# isn't responsive.
# NOTE: you can press ctrl-c to skip over various networks
# without interrupting this script
for TRY in any Work Work any Work Work any Work Work
do
echo "Looking for $TRY network"
/usr/local/etc/iwkey $TRY
if dhcpcd -t 10 eth0 ; then break ; fi
done
fi
# communicate to the user that eth0 is up now
ifconfig eth0
# resume fetchmail
killall -CONT fetchmail
# kjw hack - I can't send mail directly from my laptop any more because
# of 1- dynamic addresses being blocked and 2- firewall at work, so
# sm-client starts the sendmail client, and an ssh-tunnel to my colo box,
# listening on 127.0.0.1:25. This way I can locally queue messages for
# later delivery, yet still deliver through the colo, which is a trusted
# mail server.
#service sendmail start
service sm-client start
service lpd start
# immediately switch back into X
chvt 7
exit 0
More information about the fedora-list
mailing list