I had a problem with my Ubuntu 12.04 waking up immediately after going into suspend. I solved the problem by changing the settings in /proc/acpi/wakeup, as suggested in this question: How do I prevent immediate wake up from suspend and/or hibernation?.

After changing the settings, the system goes flawlessly into suspend and stays suspended, but after I wake it back up, the settings in /proc/acpi/wakeup are different from what I set them to.

Before going to suspend:

cat /proc/acpi/wakeup
Device  S-state   Status   Sysfs node
SMB0      S4    *disabled  pci:0000:00:03.2
PBB0      S4    *disabled  pci:0000:00:09.0
HDAC      S4    *disabled  pci:0000:00:08.0
XVR0      S4    *disabled  pci:0000:00:0c.0
XVR1      S4    *disabled  
P0P5      S4    *disabled  
P0P6      S4    *disabled  pci:0000:00:15.0
GLAN      S4    *enabled   pci:0000:03:00.0
P0P7      S4    *disabled  pci:0000:00:16.0
P0P8      S4    *disabled  
P0P9      S4    *disabled  
USB0      S3    *disabled  pci:0000:00:04.0
USB2      S3    *disabled  pci:0000:00:04.1
US15      S3    *disabled  pci:0000:00:06.0
US12      S3    *disabled  pci:0000:00:06.1
PWRB      S4    *enabled   
SLPB      S4    *enabled

I tell the system to suspend, and it works as it should. But later after waking it up, the settings are changed to either:

USB0      S3    *disabled  pci:0000:00:04.0
USB2      S3    *enabled   pci:0000:00:04.1
US15      S3    *disabled  pci:0000:00:06.0
US12      S3    *enabled   pci:0000:00:06.1


USB0      S3    *enabled   pci:0000:00:04.0
USB2      S3    *enabled   pci:0000:00:04.1
US15      S3    *enabled   pci:0000:00:06.0
US12      S3    *enabled   pci:0000:00:06.1

Any ideas?

Thank you for your response. Unfortunately it did not solve my problem.

all of


as well as


are set to disabled, and the notebook still wakes up by itself right after going to sleep. The only thing it seems to react to are the settings in /proc/acpi/wakeup, which keep changing (resetting) every time i power off/restart my notebook.


I ran into this problem again on Ubuntu 12.10. The suggestions from user MTS unfortunately also did not work for me. However, you can write a script to automatically set the usb properties in /proc/acpi/wakeup right before every suspend.

The solution is based on creating a suspend hook (based on this Archwiki article). Save the following as /usr/lib/pm-utils/sleep.d/45fixusbwakeup, and make sure to make it executable (chmod +x /usr/lib/pm-utils/sleep.d/45fixusbwakeup).

case $1 in
            echo "Going to suspend to disk!"
            echo "Fixing acpi settings."
            for usb in `cat /proc/acpi/wakeup | grep USB | cut -f1`;
                    state=`cat /proc/acpi/wakeup | grep $usb | cut -f3 | cut -d' ' -f1 | tr -d '*'`
                    echo "device = $usb, state = $state"
                    if [ "$state" == "enabled" ]
                            echo $usb > /proc/acpi/wakeup
            echo "Suspending to RAM."
            echo "Suspend to disk is now over!"
            echo "We are now resuming."
            echo "Somebody is callin me totally wrong."

What this does is change the status of every USB device that is currently enabled to disabled. If you only want to change specific USB devices, change the for loop in the script. For example to change only USB1 and USB3 change

for usb in `cat /proc/acpi/wakeup | grep USB | cut -f1`;


for usb in 'USB1' 'USB3';

Hopefully this helps someone else who has the same problem. This approach solved the issue for me.

  • 1
    Thanks! I modified this script to disable wakup from USB devices on my Sony Vaio laptop: gist.github.com/rutsky/1ed8e9779f0b2941c5a6 Jun 8 '14 at 19:26
  • I modified your script to disable wakeup on LID open (really stupid and annoying feature from my point of view). Thank you!
    – humkins
    Jul 5 '14 at 22:09
  • This extra useful hook works in Ubuntu & Kubuntu, but not in Xubuntu 15.04. I wonder why... :(
    – Reloader
    Jun 30 '15 at 17:19
  • 1
    Here is modified script from Vladimir Rutsky for systemd sleep hook instead of pm-utils: gist.github.com/kepi/9dea7aee8a59f3e7c10a
    – Kepi
    Feb 27 '16 at 15:07
  • 1
    If this could be updated for Ubuntu 16.04, it'd be great. I used solution from here: askubuntu.com/a/620555/463546 (the older solution), but it's a bit cumbersome in total. Aug 24 '16 at 7:38

Perhaps http://forum.xbmc.org/showthread.php?tid=121158 will help?

This is what it says:

For those who are updating to the 3.2 kernel (which should be everyone due to the recent root exploit), you'll notice your USB wakeup is probably broken. They changed the default wakeup policy (http://www.spinics.net/lists/linux-usb/msg53661.html), so you'll need to make a couple of changes:

  • you no longer need to enable wakeup in /proc/acpi/wakeup, it's enabled by default
  • you need to enable wakeup for the USB hub in addition to the device in /sys/bus/usb/devices/*/power/wakeup

So, this:

echo USB1 > /proc/acpi/wakeup
echo enabled > /sys/bus/usb/devices/3-1/power/wakeup


echo enabled > /sys/bus/usb/devices/usb3/power/wakeup
echo enabled > /sys/bus/usb/devices/3-1/power/wakeup

Hopefully this saves others from troubleshooting the same problem.


For Ubuntu 15+, you must use systemd instead of rc.local. You may google "Creating a systemd service" and follow the instructions, but note that redirecting output to /proc/acpi/wakeup is tricky. To get it to work correctly, you must do something like:

/bin/sh -c '/bin/echo XHC > /proc/acpi/wakeup'

Example output for the service file (e.g., /etc/systemd/system/suspendfix.service):

Description=fix to prevent system from waking immediately after suspend

ExecStart=/bin/sh -c '/bin/echo XHC > /proc/acpi/wakeup'


Or here in this gist


The preferred way to do this is by creating a service with systemd.
Adding script in rc.local is the deprecated way.

  1. Create a script file wherever you wish. Ex: ~/Scripts/disable-devices-as-wakeup.sh.

declare -a devices=("USB0 USB2 US12 US15") # <-- Add your entries here
for device in "${devices[@]}"; do
    if grep -qw ^$device.*enabled /proc/acpi/wakeup; then
        sudo sh -c "echo $device > /proc/acpi/wakeup"
  1. Test it by executing it from the terminal.

  2. If everything is okay then let's make a service.

$ touch ~/Scripts/disable-devices-as-wakeup.service
$ chmod u+x ~/Scripts/disable-devices-as-wakeup.service

~/Scripts/disable-devices-as-wakeup.service -

Description=Disable devices as wakeup


  1. Copy paste or move the service to /etc/systemd/system/.
$ sudo cp ~/Scripts/disable-devices-as-wakeup.service /etc/systemd/system/
  1. Enable the service.
$ systemctl enable disable-devices-as-wakeup.service
  1. Restart the OS and check the status.
$ systemctl status disable-devices-as-wakeup.service

Detailed explanation found on https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/chap-managing_services_with_systemd

  • Script produces a bunch of errors such as grep: RP05: No such file or directory. Mint 20. Mar 25 at 20:34
  • @CodeGuy123 I fixed it by removing the quotes from the "declare" line like this: declare -a devices=( LID0 XHC1 )
    – Bart
    Apr 15 at 20:49

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