How to turn off the USB power to my mouse, when I suspend the notebook?
Solution 1
The current stumbling block with OP links, follow up comments and proposed answers is the product ID is static 1b1a:7001
but the Bus and Device numbers keep changing.
The solution
Create a script (any name you want) in the directory /etc/pm/sleep.d/
and place the following in it:
#!/bin/bash
ZeroBUS=$(lsusb | grep 1b1a:7001 | cut -c 5-7 )
# Strip leading zeros
BUS=$(echo $ZeroBUS | sed 's/^0*//')
# Build "usbX" usb number
USB=usb$BUS
case $1 in
suspend|suspend_hybrid|hibernate)
echo "Powering off: " $USB
echo $USB | sudo tee /sys/bus/usb/drivers/usb/unbind
;;
resume|thaw)
# No need to do anything here, kernel unsuspends USB devices
# Show how to power on for interest sake but since device is
# powered off the usb number will be blank.
echo "Powering on: " $USB
echo $USB | sudo tee /sys/bus/usb/drivers/usb/bind
;;
esac
Mark the file as executable with sudo chmod +x file_name
where "file_name" is the name you chose.
The explanation
This solution powers off the entire USB hub which in my case meant phone, wireless mouse, wireless keyboard, etc. When calling the script from terminal prompt the sudo password needs to be entered. Hopefully when called from systemd sudo powers are inherited. I could not test this though because I don't have a wired mouse. Therefore additional refinement may be necessary for sudo powers.
The power isn't physically cut when the BIOS is providing constant 5V power supply, rather the devices on the bus are told to turn themselves off. In my case the wireless keyboard and mouse stopped working and had to resort to laptop keyboard and touchpad to return power back on.
You can test this manually by calling the script and passing the parameters "suspend". Passing the parameter "resume" accomplishes nothing because the device is powered off it has no device ID to turn it back on.
Easier solution power off all USB ports
I recently ran into a problem where an unknown port was preventing laptop from suspending. I found this solution (credit in code) which I modified.
Create the file /lib/systemd/system-sleep/custom-xhci_hcd
using sudo
powers and insert this code:
#!/bin/bash
# Original script was using /bin/sh but shellcheck reporting warnings.
# NAME: custom-xhci_hcd
# PATH: /lib/systemd/system-sleep
# CALL: Called from SystemD automatically
# DESC: Suspend broken for USB3.0 as of Oct 25/2018 various kernels all at once
# DATE: Oct 28 2018.
# NOTE: From comment #61 at: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/522998
TMPLIST=/tmp/xhci-dev-list
# Original script was: case "${1}" in hibernate|suspend)
case $1/$2 in
pre/*)
echo "$0: Going to $2..."
echo -n '' > $TMPLIST
for i in `ls /sys/bus/pci/drivers/xhci_hcd/ | egrep '[0-9a-z]+\:[0-9a-z]+\:.*$'`; do
# Unbind xhci_hcd for first device XXXX:XX:XX.X:
echo -n "$i" | tee /sys/bus/pci/drivers/xhci_hcd/unbind
echo "$i" >> $TMPLIST
done
;;
post/*)
echo "$0: Waking up from $2..."
for i in `cat $TMPLIST`; do
# Bind xhci_hcd for first device XXXX:XX:XX.X:
echo -n "$i" | tee /sys/bus/pci/drivers/xhci_hcd/bind
done
rm $TMPLIST
;;
esac
Solution 2
Find the bus and device # of your mouse by issuing the command lsusb
(with and without it plugged in) you want the one that's only there when it's plugged in. Make a note of the numbers. In your case they appear to be 6 and 6
issue the command sudo cp /etc/pm/sleep.d/novatel_3g_suspend /etc/pm/sleep.d/mouse_suspend
(we have to do this because gedit
no longer has a Save As option when launched as superuser that I can find.)
issue the command gksu gedit /etc/pm/sleep.d/mouse_suspend
Change the Bus and Device numbers to match the ones you took note of earlier. Save the resulting file. It will be executed when you suspend your laptop.
In your case you should change BUS=X and DEVICE=Y to the Bus and Device numbers that match the mouse in question. This will work until you move the device to a different port in which case you will have to locate the device again and adjust the file accordingly.
BUS=X
DEVICE=Y
if [ ! -x /sys/bus/usb/devices/${BUS}-${DEVICE}/power/level ]; then
exit 0
fi
case $1 in
suspend|suspend_hybrid|hibernate)
echo suspend > /sys/bus/usb/devices/${BUS}-${DEVICE}/power/level
;;
resume|thaw)
# No need to do anything here, kernel unsuspends USB devices
:
;;
esac
The comments in the file (lines beginning with #) are irrelevant and can be safely ignored.
Note: I tested this via Suspend on a desktop and it worked as advertised. I do not have access to the same hardware you have but I had to resume the system via the power button so I'm fairly certain this will work for you.
Edit based on comments and expansion of question:
It appears that this is the info you need to proceed:
Bus 006 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver
Related videos on Youtube
tokam
Updated on September 18, 2022Comments
-
tokam over 1 year
The LED light of my mouse gets on my nerves when sleeping. I usually close my notebook in the evening and Ubuntu calls
pm-suspend
. Anyways, the USB plug is still served with power. I could even charge my smartphone. This is bad for me for two reasons. I have to unplug my mouse and the notebook battery pack [akku] lasts less. Is there a way to automatically power off my USB device, or all USB devices, when the notebook goes into suspend mode?How to configure it?
EDIT: As requested in the comments, I add this information: I am using a Lenovo G550.
EDIT: As requested here my lsusb output
Bus 002 Device 019: ID 1058:25a3 Western Digital Technologies, Inc. Bus 002 Device 017: ID 1b1a:7001 Bus 002 Device 009: ID 2109:2812 VIA Labs, Inc. VL812 Hub Bus 002 Device 008: ID 2109:2812 VIA Labs, Inc. VL812 Hub Bus 002 Device 003: ID 0402:5608 ALi Corp. Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 006 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
EDIT: I think this information also leads to the answer.
root@localhost:/sys/bus/usb/devices# ls -al insgesamt 0 drwxr-xr-x 2 root root 0 Okt 6 10:56 . drwxr-xr-x 4 root root 0 Okt 6 10:56 .. lrwxrwxrwx 1 root root 0 Okt 6 10:56 1-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.7/usb1/1-0:1.0 lrwxrwxrwx 1 root root 0 Okt 6 10:56 2-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-0:1.0 lrwxrwxrwx 1 root root 0 Okt 6 10:56 2-3 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-3 lrwxrwxrwx 1 root root 0 Okt 6 10:56 2-3:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3:1.0 lrwxrwxrwx 1 root root 0 Okt 6 10:56 2-3:1.1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3:1.1 lrwxrwxrwx 1 root root 0 Okt 6 10:56 2-5 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5 lrwxrwxrwx 1 root root 0 Okt 6 10:56 2-5.1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1 lrwxrwxrwx 1 root root 0 Okt 6 10:56 2-5:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5:1.0 lrwxrwxrwx 1 root root 0 Okt 6 10:56 2-5.1:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1:1.0 lrwxrwxrwx 1 root root 0 Okt 6 10:56 2-5.1.2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1.2 lrwxrwxrwx 1 root root 0 Okt 6 10:56 2-5.1.2:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1.2/2-5.1.2:1.0 lrwxrwxrwx 1 root root 0 Okt 6 10:56 2-5.1.2:1.1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1.2/2-5.1.2:1.1 lrwxrwxrwx 1 root root 0 Okt 6 10:56 2-5.2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.2 lrwxrwxrwx 1 root root 0 Okt 6 10:56 2-5.2:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.2/2-5.2:1.0 lrwxrwxrwx 1 root root 0 Okt 6 10:56 3-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.0/usb3/3-0:1.0 lrwxrwxrwx 1 root root 0 Okt 6 10:56 4-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.1/usb4/4-0:1.0 lrwxrwxrwx 1 root root 0 Okt 6 10:56 5-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.2/usb5/5-0:1.0 lrwxrwxrwx 1 root root 0 Okt 6 10:56 6-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-0:1.0 lrwxrwxrwx 1 root root 0 Okt 6 10:56 6-1 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1 lrwxrwxrwx 1 root root 0 Okt 6 10:56 6-1:1.0 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.0 lrwxrwxrwx 1 root root 0 Okt 6 10:56 6-1:1.1 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.1 lrwxrwxrwx 1 root root 0 Okt 6 10:56 6-1:1.2 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.2 lrwxrwxrwx 1 root root 0 Okt 6 10:56 7-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.1/usb7/7-0:1.0 lrwxrwxrwx 1 root root 0 Okt 6 10:56 8-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.2/usb8/8-0:1.0 lrwxrwxrwx 1 root root 0 Okt 6 10:56 usb1 -> ../../../devices/pci0000:00/0000:00:1a.7/usb1 lrwxrwxrwx 1 root root 0 Okt 6 10:56 usb2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2 lrwxrwxrwx 1 root root 0 Okt 6 10:56 usb3 -> ../../../devices/pci0000:00/0000:00:1a.0/usb3 lrwxrwxrwx 1 root root 0 Okt 6 10:56 usb4 -> ../../../devices/pci0000:00/0000:00:1a.1/usb4 lrwxrwxrwx 1 root root 0 Okt 6 10:56 usb5 -> ../../../devices/pci0000:00/0000:00:1a.2/usb5 lrwxrwxrwx 1 root root 0 Okt 6 10:56 usb6 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6 lrwxrwxrwx 1 root root 0 Okt 6 10:56 usb7 -> ../../../devices/pci0000:00/0000:00:1d.1/usb7 lrwxrwxrwx 1 root root 0 Okt 6 10:56 usb8 -> ../../../devices/pci0000:00/0000:00:1d.2/usb8
EDIT:
tokam@localhost:~$ lsusb -t /: Bus 08.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M /: Bus 07.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M /: Bus 06.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M |__ Port 1: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M |__ Port 1: Dev 2, If 2, Class=Human Interface Device, Driver=usbhid, 12M /: Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M |__ Port 3: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M |__ Port 3: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M |__ Port 5: Dev 51, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 1: Dev 52, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 2: Dev 54, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 2: Dev 54, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 2: Dev 53, If 0, Class=Mass Storage, Driver=usb-storage, 480M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
-
TheWanderer over 7 yearsI don't think this sleep charge feature is something to do with Ubuntu. Windows and Ubuntu do it for me on my laptop. Instead, there should be a setting in BIOS to turn off power to the USB ports during sleep.
-
tokam over 7 yearsAre you sure? Google showed me some information for the keyword "usb suspend ubuntu". But I am not yet 100% sure how to do it right. hamwaves.com/usb.autosuspend/en askubuntu.com/questions/80638/…
-
TheWanderer over 7 yearsWell you can disable them, but that's while Ubuntu itself is running. If you want to make scripts to run before the laptop sleeps to suspend the ports, it's possible, but it's going to be easier to at least check your BIOS settings for that option.
-
tokam over 7 yearsMy BIOS unfortunately does not support such an option.
-
user.dz over 7 years@tokam, could you edit question and add the brand and model of the laptop? Also could you confirm that it is not a USB power-share port as explained here: dell.com/support/article/ro/ro/robsdt1/SLN155147/EN (lightning bolt icon)
-
tokam over 7 yearsIt is a lenovo G550. No energy icon is displayed next to the USB slot.
-
WinEunuuchs2Unix over 7 yearsI'll look into this later, but keep in mind most people want to use the mouse to wake the computer up from sleep. Laptops are a minority who mostly do not want this feature enabled when the lid is closed. If selecting suspend from a menu, then the option of waking on keyboard or mouse is probably desired on Laptops just like desktops.
-
tokam over 7 yearsWith the laptop I'd rather wake the computer up, but lifting the lid up again.
-
-
WinEunuuchs2Unix over 7 yearsIn my
gedit
Ubuntu 16.04 vanilla upgrade from 14.04 there is aSave as
option under theFile
menu. Something must have happened to your configuration??? PS good answer, I'll try it later. -
tokam over 7 yearsI have file save as too, using Ubuntu Mate.
-
Elder Geek over 7 years@WinEunuuchs2Unix Interesting. It doesn't appear to exist on a fresh install. Perhaps this is the basis for a new question....
-
WinEunuuchs2Unix over 7 years@ElderGeek An update on
Save As
if I typegedit
I get the entire top line menu of "File Edit View Search Tools Documents Help" but if I typegksu gedit
the menu list doesn't appear. HTH. -
tokam over 7 yearsI edited the file like this: BUS=2 DEVICE=12 As this appears to be my mouse: Bus 002 Device 012: ID 1b1a:7001 But the blue LED of the mouse is still turned on. The mouse is connected via an USB-Hub. But the hub get's it's entire energy from the notebook.
-
tokam over 7 yearsIf I unplug and replug the mouse into the same usb plug, the id does not stay constant
-
Elder Geek over 7 years@tokam I suggest using Occams razor by eliminating the hub as the source of confusion and plugging the mouse directly into a system USB port to see if you get the results I did.
-
tokam over 7 yearsWhat is Occams razor? With the mouse in the usb directly the id changes.
-
Elder Geek over 7 yearsEdit to include the new ID as described in my answer. Oh Occams razor? I always considered it to mean reducing the problem to the minimum number of variables that exhibit the same result, but : en.wikipedia.org/wiki/Occam%27s_razor
-
WinEunuuchs2Unix over 7 years@tokam Can you update your question with output from
lsusb -t
andlsusb
with all your devices plugged in as you normally use them day-to-day. That might help us visualize the hub and what not. -
tokam over 7 yearsI updated it. @ElderGeek: Sorry for not having assigned the bounty on time. I hope you will somehow receive it after the issue is solved.
-
Elder Geek over 7 years@tokam No worries, I updated the answer to take into consideration the new information you provided
-
tokam over 7 yearsI think 6.6 is the keyboard receiver and this is the mouse: Bus 002 Device 017: ID 1b1a:7001 At 2.17 I tried it before with your answer, but it did not work. It also did not work without the usb hub. Because it seems as if the id and the bus changes frequently (when changig the ubs plug, we should modify the script (after we got it working once) in a way that it detects the bus and teh device by the unique device id. Is there a way to test your script without having to suspend the notebook? Maybe it gets us closer if we can suspend and unsuspend the mouse just via command line?
-
tokam over 7 yearsThe 2-5 folders depend on my usb hub. If I nether the less try to write suspend into the level file some instance tells me that I passed an invalid argument. I did it while my computer was not suspended
-
tokam over 7 yearsMaybe this brings us somehow further: unix.stackexchange.com/questions/66901/…
-
tokam over 7 yearsI added lsusb -t
-
Elder Geek over 7 yearsupdated answer.
-
tokam over 7 yearsCan I test the script somehow before actually suspending the notebook with an non dynamic echo command?
-
tokam over 7 yearsyou were able to successfully isolate the bus and device which is also shown in lsusb, but as you pointed out the directory does not exist, as shown in the question, the directories have a different structure than ${BUS}-${DEVICE}, and I am not sure if even with knowing which one is the right one the suspending works
-
tokam over 7 yearsA test in which I unplugged and replugged the mouse helped to identify the folder. But look at the output of the next test: Keine Berechtigung means: no permission root@localhost:~# echo suspend > /sys/bus/usb/devices/2-5.1.2:1.1/power/level -bash: /sys/bus/usb/devices/2-5.1.2:1.1/power/level: Keine Berechtigung
-
tokam over 7 yearsThe mouse has an LED at thouse outside and a laser at the bottom. With a combination of both answers provided, I was able to turn the laser of the mouse off, but not the LED, which adds light no my sleeping environment. Maybe we can not turn the LED off by the Kernel? I tested it on an isolated USB Plug for the mouse.
-
tokam over 7 yearsThe suspending of the laser bellow the mouse works with this. But not the suspension of the led of the mouse (even when not plugged into the usb hub)
-
WinEunuuchs2Unix over 7 years@tokam After a lot of research and testing I finally got it to work on my system manually but do not have your mouse to test it. Hopefully it works!
-
Elder Geek over 7 yearsDoes your mouse have a battery in it?
-
tokam over 7 yearsIt turns the laser of the mouse off but not the LED
-
WinEunuuchs2Unix over 7 yearsOn a website someone suggested a little piece of black tape over the led.
-
Adeerlike over 3 yearssolved for 20.04 as well