Question: How to assign a script to run when selecting the suspend option on the power menu?

I have a Sony VAIO laptop with an AMD Radeon graphics card. I would like to be able to disable/enable the discrete graphics card. I have no problem in doing this but it causes problems when suspending & resuming from suspend.

When the session is resumed from suspend (with the discrete DPU disabled), the fan will spin up uncontrollably, what I would like to do is edit the suspend script or assign a new script to the suspend option on the power menu. This is so I can re-enable the GPU before suspending. Power Menu

EDIT: After some research I think it has something to do with the files in /etc/pm/sleep.d/?

If I put a custom script in there would it be run when suspending and resuming from suspend?

How do I differentiate in the script between suspending/resuming?


You are right. You have to write a script and save it to /lib/systemd/system-sleep/ (since 2015 systemd take care of that, before was /etc/pm/sleep.d/). The difference between suspending and resuming is given as a parameter to the script:


case "$1" in
        # executed on suspend
        # executed on resume

If you also want to do it for hibernate, the arguments would be hibernate and thaw.

  • I'd seen this in other scripts and was wondering on the specific requirements for such a script. Thank you :) Feb 25 '13 at 13:38
  • Hi, tried this on my Dell 5570 running ubuntu 14.04 to get it to turn my touchpad on, if I'd turned if off before suspending. for some reason, the command tp_id= ()xinput list | grep -i touchpad | awk '{ print $7 }' | sed 's/id=//'() is not returning the id, while this command does work from the command line. Can you see any reason why it wouldn't? For other purposes you script works great. Thanks!
    – Leo Simon
    Mar 11 '16 at 0:16
  • Sorry, in that previous comment, I tried to put backticks into the script fragment, but the minimarkdown language defeated me. the ()'s are meant to be replaced by backticks
    – Leo Simon
    Mar 11 '16 at 0:27
  • @LeoSimon Hey Leo, the comments are not the right place to discuss such a follow up question. I suggest you ask an entirely new question. This way a lot more people will see it and be able to help you :-) Mar 11 '16 at 8:55
  • 3
    You may need to use /lib/systemd/system-sleep/ instead.
    – SimonT
    Oct 20 '17 at 5:17

On current Ubuntu versions which use systemd, you can put scripts (or links to scripts) into /lib/systemd/system-sleep/.

Try to put this into /usr/local/bin/test-sleep.sh :


## This file (or a link to it) must be in /lib/systemd/system-sleep/

me=$(basename "$0")

case "$1" in
        logger -t "$me" "Suspending: \$1=$1, \$2=$2" ;;
        logger -t "$me" "Resuming: \$1=$1, \$2=$2" ;;

Then make it executable and put a link to it for systemd:

sudo chmod +x /usr/local/bin/test-sleep.sh
sudo ln -si /usr/local/bin/test-sleep.sh  /lib/systemd/system-sleep/

The script just writes to syslog, so you can see what it did with

grep 'test-sleep' /var/log/syslog

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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