Tell me more ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

In Ubuntu 12.04 LTS, I would like to run scripts after resuming from suspend, and after unlocking my desktop. These need to run as my user, and with access to my $DISPLAY.

In particular, I would like to

  • restart nm-applet to work around bug 985028
  • show a custom notification using notify-send
  • possibly other stuff when I get these working

When I resume, scripts in /etc/pm/sleep.d/ are run, but they run as root, without knowledge of my screen and username. It might work if I would hard code my username and export the default DISPLAY :0 in these scripts, but that feels like a very ugly hack.

Scripts in ~/.config/autostart/xyz.desktop, run after login, but they don't run after merely unlocking the screen after resume.

Is there a way to run scripts after unlocking the screen after a resume?

share|improve this question

2 Answers

It looks like you have to hard code the username in the previous answer anyways, so here's a simple script for in /etc/pm/sleep.d if anyone is looking for a quick fix:

#! /bin/bash 
case "$1" in
    hibernate|suspend)
        sudo -u USERNAME env DISPLAY=:0 zenity --info --text "do stuff on suspend"
        exit
        ;;
    thaw|resume)
        sudo -u USERNAME env DISPLAY=:0 zenity --info --text "do stuff on resume"
        exit
        ;;
esac
exit
share|improve this answer

You can run a script using start-stop-daemon. start-stop-daemon can fork the thread running as different uid and gid, hence solving your problem.

What you need to do is to write a job script placed in system PATH like /usr/bin, and to create an extra daemon script in /etc/pm/sleep.d. Matching pm-suspend action like 'resume' or 'thaw' the daemon script commits the job script via 'start-stop-daemon --start $ARGs --name nm-rtvt--exec /usr/bin/job_script', where 'ARGs' could be '--chuid 1001:1001' or just '--user your_username'.

And for integrity, you might as well want the daemon script to stop the damon named 'nm-rtvt' before suspend via 'start-stop-daemon --stop <...>', matching pm-suspend action like 'suspend' or 'hibernate'.

For details, man start-stop-daemon. And there are many other examples in /etc/init.d of daemon scripts.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.