It's really annoying as I have to unplug the mouse after a suspend to ensure that an occasional bump doesn't wake up the system. I haven't found anything in system settings which could disable this neither by googling around.
I haven't checked the BIOS yet, but I've found a solution!
Short summary: In /proc/acpi/wakeup
, you can see which devices are currently enabled to resume from suspend. That list shows names (abbreviated) of so called "Devices". Example "PWRB" means "power button".
If you write device-names to that file, you toggle them between enabled/disabled.
I wrote a small HowTo for disabling wakeup-by-mouse, based on a blog where I found that info.
-
1This sounds much better than my answer, and I've edited my answer accordingly. Thanks! – Robie Basak Mar 8 '13 at 9:59
-
2So, this works (however, I notice in passing that just using
sudo
won't work: one has to dosudo su
first, then echo to/proc/acpi/wakeup
. However, I'm wondering whether anyone has found a way to just disable the mouse? I have both on my desktop connected via (wireless) USB and this will disable the wake from keyboard too. – Marco Massenzio Oct 3 '14 at 7:38
Thanks to all posters as the mouse wakeup is a major inconvenience and I got my answers here. I wish to add my twist to the solutions as that may help in more cases. I had to disable 3 different items in /proc/acpi/wakeup
. My devices: EHC1, EHC2, XHCI
. The first 2 are usb2 and the 3rd a usb3 entry. Please note that although the usb transceiver for my mouse is plugged into a usb2 port and nothing is in any usb3 port, the computer will wake on mouse moves until all 3 items are disabled.
$ cat /proc/acpi/wakeup | sort
Device S-state Status Sysfs node
EHC1 S3 *disabled pci:0000:00:1d.0
EHC2 S3 *disabled pci:0000:00:1a.0
GLAN S4 *enabled pci:0000:08:00.0
.. ,, ..
USB7 S3 *disabled
WLAN S3 *disabled pci:0000:03:00.0
XHCI S3 *disabled pci:0000:07:00.0
To have the wakeup items disabled on every startup, you can add something like this to /etc/rc.local
..
echo EHC1 > /proc/acpi/wakeup
echo EHC2 > /proc/acpi/wakeup
echo XHCI > /proc/acpi/wakeup
edit by cipricus:
I am editing this because I needed to add more details in order for a separate question of mine to be closed as duplicate of the above based on this answer; I think it more useful than to post as a separate answer.
*** Test which items need to be disabled - as indicated here - for each of the items that were posted as enabled
under cat /proc/acpi/wakeup | sort
by running in terminal each of the commands below and then testing if the mouse wakes the system (without the need for restart):
sudo sh -c "echo EHC1 > /proc/acpi/wakeup"
sudo sh -c "echo EHC2 > /proc/acpi/wakeup"
sudo sh -c "echo XHCI > /proc/acpi/wakeup"
(in my case the first one was enough even after testing with other USB ports)
*** If the /etc/rc.local
file doesn't exist - according to this post:
printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local
sudo chmod +x /etc/rc.local
The file should look something like:
#!/bin/bash
echo EHC1 > /proc/acpi/wakeup
echo EHC2 > /proc/acpi/wakeup
echo XHCI > /proc/acpi/wakeup
exit 0
Reboot.
If that still doesn't work, it might be that the file /etc/systemd/system/rc-local.service
is missing or not properly configured.
Test with
sudo /etc/init.d/rc.local start
and
sudo systemctl status rc-local
Following How to Enable /etc/rc.local with Systemd:
Create the file:
sudo nano /etc/systemd/system/rc-local.service
Then add the following content to it.
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
Save and close the file. To save a file in Nano text editor, press Ctrl+O, then press Enter to confirm. To exit the file, Press Ctrl+X.
Check all is well with no errors with:
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
Reboot to see changes.
-
If you don't like my edit, please let me know by flagging @cipricus and I'll post as a separate answer linked to the above. – user47206 May 21 '18 at 12:07
My system is Ubuntu 15.10
I tried to used lsusb
command to find what mouse device is. It's very simple, you type lsusb
then unplug the mouse (in my case, it's a Bluetooth receiver) and type lsusb
again. The device looks like this:
Bus 007 Device 008: ID 24ae:2000
Now find it in /sys/bus/usb/devices/
folder by using the same way (unplug/plug). In my case, I found that they are somewhere in folders start with 7-2*
.
Now try to read the idProduct and idVendor. For example: cat /sys/bus/usb/devices/7-2.3/idProduct
=> 2000
, cat /sys/bus/usb/devices/7-2.3/idVendor
=> 24ae
. That's it.
Finally I create a script in /lib/systemd/system-sleep
directory, name it whatever you want.
#! /bin/sh
if [ ! -r /sys/bus/usb/devices/7-2.3/power/wakeup ]; then
exit 0
fi
case "$1" in
pre )
echo disabled > /sys/bus/usb/devices/7-2.3/power/wakeup
;;
esac
All done.
this script solved my problem. check it out.
#!/bin/bash
# allow only one instance
r=$(pidof -x -o $$ ssmonoff.sh)
set -- $r
if [ "${#@}" -ge 1 ]; then
echo "Script already running. Exit..."
exit
fi
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | ( while read line; do
if echo $line | grep "boolean true" &> /dev/null; then
xinput --set-prop "Dell Premium USB Optical Mouse" "Device Enabled" "0"
xset dpms force off
else
xinput --set-prop "Dell Premium USB Optical Mouse" "Device Enabled" "1"
fi
done )
All you have to do is, first, run sudo xinput list
,
find the given Name of your USB mouse, and put it on the script.
Then, save the file as "ssmonoff.sh", make it executable, and set it to run on startup.
This is my step-by-step "tutorial" to make it work for you:
- Use command
cat /proc/acpi/wakeup
to show the list of wake up devices - Use command
sudo sh -c "echo XXXX >/proc/acpi/wakeup"
(replace "XXXX" with your device code) to toggle the device state (enabled/disabled). Go one device at a time and try to suspend your machine and wake it up using the device you want to disable until the deserved device will not be able to wake up the machine. Don't forget to always enable back the devices that you do not want to have disabled. - When you find the right device create on your desktop file "acpi_wakeup" containing following code:
#!/bin/sh printf "XXXX" > /proc/acpi/wakeup
(don't forget to replace "XXXX" with your device code) - Move or copy the file to folder
/etc/init.d/
. To copy the file use following command:sudo cp /home/USERNAME/Desktop/acpi_wakeup /etc/init.d/acpi_wakeup
(replace "USERNAME" with your actual user name) - Make the file executable:
sudo chmod 755 /etc/init.d/acpi_wakeup
- Then use 'update-rc.d' to make the required symbolic links automatically in other directories:
sudo update-rc.d acpi_wakeup defaults
(it showsWARNING: ...missing LSB tags and overrides
but it is OK. You don't need to worry about it) - Reboot your computer.
Sources and further reading:
http://www.das-werkstatt.com/forum/werkstatt/viewtopic.php?f=7&t=1985 http://ubuntuforums.org/showthread.php?t=814939&page=3
In Kubuntu 19.10 the /etc/rc.local
setting stopped working for me. I first noticed this on a Manjaro KDE, and found this solution, that worked there. It also works in Kubuntu 19.10, which may mean there are some changes in newer systems (whether related to the kernel or the Plasma version I don't know).
So:
cat /proc/acpi/wakeup | sort
and look for items that are marked "enabled". Note their names (e.g EHC1,EHC2, NXUC). Then, test which of the commands like below stop the mouse from waking up the PC:
sudo sh -c "echo EHC1 > /proc/acpi/wakeup"
sudo sh -c "echo EHC2 > /proc/acpi/wakeup"
sudo sh -c "echo NXUC > /proc/acpi/wakeup"
Create a folder ~/.bin
mkdir ~/.bin
(If you prefer another location, replace that accordingly in the following files.)
Create a systemd service. In terminal:
kate /etc/systemd/system/wakeup-events.service
With this content:
[Unit]
Description=Disable wakeup events on startup
[Service]
Type=oneshot
ExecStart=/bin/bash ~/.bin/wakeup-events.sh
[Install]
WantedBy=multi-user.target
Save and enter password.
In terminal:
kate ~/.bin/wakeup-events.sh
with the following content:
#!/bin/bash
# Disable wakeup events
echo EHC1 > /proc/acpi/wakeup
echo EHC2 > /proc/acpi/wakeup
echo NXUC > /proc/acpi/wakeup
(Replace accordingly: e.g EHC1,EHC2, NXUC).
Don't forget:
sudo systemctl enable wakeup-events
And reboot.
Great explanation. I simply added to rc.local the following command
for d in `cat /proc/apci/wakeup |grep enabled|grep -v PS2K|cut -b -4`; do echo $d >/proc/acpi/wakeup ; done
to disable every device than PS2K (keyboard PS2) from wakeup. Simple and working!
There may be a way specific to your hardware, in which case the option may be available through your system's BIOS settings.
Getting to your BIOS menu to change settings is also system specific. Usually you press a key just after rebooting, and the key to press is often displayed on the screen.
However, user138339's answer seems like a more general way to achieve what you need, and you can do this from the running system.
Here is an easier solution ( https://www.reddit.com/r/linux4noobs/comments/iittqi/how_to_disable_mouse_waking_up_from_suspend/ ) I just wrote the first line:
$ sudo sh -c "echo disabled > /sys/bus/usb/devices/1-1/power/wakeup"
Now, the USB no:1 doesn't wakeup the computer.