How do I run commands on suspend/return from suspend?

I suspend my laptop (pm-suspend) often and sometimes my desktop (pm-suspend-hybrid) fairly often. I am using the latest ubuntu (13.10, saucy).

Is there a way I could run a command when I go into suspend or immediately after coming out of suspend? I'd like to kill any open output ssh connections and stop offlineimap, since the timeout for those tends to be annoying. Ideas?


Solution 1:

From manpage pm-action(8):

/etc/pm/sleep.d, /usr/lib/pm-utils/sleep.d
     Programs in these directories (called hooks) are combined
     and executed in C sort order before suspend and hibernate
     with as argument ´suspend´ or ´hibernate´. Afterwards they
     are called in reverse order with argument ´resume´ and
     ´thaw´ respectively. If both directories contain a similar
     named file, the one in /etc/pm/sleep.d will get preference.
     It is possible to disable a hook in the distribution
     directory by putting a non-executable file in
     /etc/pm/sleep.d, or by adding it to the HOOK_BLACKLIST
     configuration variable.

Thus you could simply put a shell-script like this:

#!/bin/bash

case "$1" in
suspend|hibernate)
    actions to
    take
    on suspend
    or hibernate
    ;;
resume|thaw)
    other actions
    to trigger
    on resume
    ;;
esac

into e.g. 99-myhooks.sh and make it executable.

BTW, you can kill stale SSH-connections by entering Enter~.Enter in the SSH session.