Jak wyłączyć zasilanie USB myszy, gdy zawieszam komputer?

19

Światło LED mojej myszy działa mi na nerwy podczas snu. Zazwyczaj zamykam notatnik wieczorem i dzwonię do Ubuntu pm-suspend. W każdym razie wtyczka USB jest nadal zasilana. Mógłbym nawet naładować swój smartfon. Jest to dla mnie złe z dwóch powodów. Muszę odłączyć mysz, a bateria notebooka [akku] wytrzyma mniej. Czy istnieje sposób na automatyczne wyłączenie mojego urządzenia USB lub wszystkich urządzeń USB, gdy notebook przejdzie w tryb zawieszenia?

Jak to skonfigurować?

EDYCJA: Zgodnie z żądaniem w komentarzach dodaję te informacje: Używam Lenovo G550.

EDYCJA: Zgodnie z żądaniem tutaj moje wyjście lsusb

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

EDYCJA: Myślę, że te informacje również prowadzą do odpowiedzi.

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

EDYTOWAĆ:

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
tokam
źródło
8
Nie sądzę, że ta funkcja ładowania snu ma coś wspólnego z Ubuntu. Windows i Ubuntu robią to na moim laptopie. Zamiast tego w BIOSie powinno być ustawienie wyłączające zasilanie portów USB podczas uśpienia.
Wędrowiec
1
Jesteś pewny? Google pokazało mi trochę informacji dotyczących słowa kluczowego „usb suspend ubuntu”. Ale nie jestem jeszcze w 100% pewien, jak zrobić to dobrze. hamwaves.com/usb.autosuspend/en askubuntu.com/questions/80638/…
tokam 10.09.16
1
Możesz je wyłączyć, ale w tym czasie działa sam Ubuntu. Jeśli chcesz, aby skrypty działały przed uśpieniem laptopa, aby zawiesić porty, jest to możliwe, ale łatwiej będzie przynajmniej sprawdzić ustawienia BIOS dla tej opcji.
Wędrowiec
1
Mój BIOS niestety nie obsługuje takiej opcji.
tokam
1
@tokam, czy możesz edytować pytanie i dodać markę i model laptopa? Czy możesz również potwierdzić, że nie jest to port zasilania USB, jak wyjaśniono tutaj: dell.com/support/article/ro/ro/robsdt1/SLN155147/EN (ikona błyskawicy)
user.dz

Odpowiedzi:

4

Obecny blok potknięć z łączami OP, komentarzami i proponowanymi odpowiedziami jest taki, że identyfikator produktu jest statyczny, 1b1a:7001ale numery magistrali i urządzeń ciągle się zmieniają.

Rozwiązanie

Utwórz skrypt (dowolną nazwę) w katalogu /etc/pm/sleep.d/i umieść w nim następujące elementy:

#!/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

Oznacz plik jako wykonywalny, sudo chmod +x file_namegdzie „nazwa_pliku” to nazwa, którą wybrałeś.

Wyjaśnienie

To rozwiązanie wyłącza cały koncentrator USB, co w moim przypadku oznaczało telefon, mysz bezprzewodową, klawiaturę bezprzewodową itp. Podczas wywoływania skryptu z terminala monitowego należy wprowadzić hasło sudo. Mam nadzieję, że po wywołaniu z systemd uprawnienia sudo są dziedziczone. Nie mogłem tego przetestować, ponieważ nie mam myszy przewodowej. Dlatego może być konieczne dodatkowe udoskonalenie uprawnień sudo.

Zasilanie nie jest fizycznie odcinane, gdy BIOS zapewnia stałe zasilanie 5 V, a raczej urządzenia na magistrali mają się wyłączyć. W moim przypadku bezprzewodowa klawiatura i mysz przestały działać i musiały skorzystać z klawiatury laptopa i touchpada, aby przywrócić zasilanie.

Możesz to przetestować ręcznie, wywołując skrypt i przekazując parametry „zawiesić”. Przekazanie parametru „resume” niczego nie osiąga, ponieważ urządzenie jest wyłączone, nie ma identyfikatora urządzenia, aby je ponownie włączyć.


Łatwiejsze rozwiązanie wyłącza wszystkie porty USB

Niedawno napotkałem problem polegający na tym, że nieznany port uniemożliwiał zawieszenie laptopa. Znalazłem to rozwiązanie (kredyt w kodzie), które zmodyfikowałem.

Utwórz plik /lib/systemd/system-sleep/custom-xhci_hcdprzy użyciu sudouprawnień i wstaw ten kod:

#!/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
WinEunuuchs2Unix
źródło
Czy mogę jakoś przetestować skrypt przed zawieszeniem notebooka za pomocą niedynamicznego polecenia echa?
tokam
udało ci się izolować magistralę i urządzenie, które jest również pokazane w lsusb, ale jak zauważyłeś, katalog nie istnieje, jak pokazano w pytaniu, katalogi mają inną strukturę niż $ {BUS} - $ {DEVICE} , i nie jestem pewien, czy nawet wiedząc, który jest właściwy, działa zawieszenie
tokam,
Test, w którym odłączyłem i ponownie włożyłem mysz, pomógł zidentyfikować folder. Ale spójrz na wynik następnego testu: Keine Berechtigung oznacza: brak uprawnień 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
Mysz ma diodę LED na zewnątrz na zewnątrz i laser na dole. Dzięki kombinacji obu odpowiedzi udało mi się wyłączyć laser myszy, ale nie diodę LED, która nie dodaje światła mojemu otoczeniu do spania. Może nie możemy wyłączyć LED przez jądro? Przetestowałem to na izolowanej wtyczce USB dla myszy.
tokam
@tokam Po wielu badaniach i testach w końcu udało mi się ręcznie uruchomić system, ale nie mam myszy do jego przetestowania. Mam nadzieję, że to działa!
WinEunuuchs2Unix
5

Znajdź magistralę i numer urządzenia myszy, wydając polecenie lsusb(z podłączonym i bez niego), którego chcesz, aby był tam tylko wtedy, gdy jest podłączony. Zanotuj liczby. W twoim przypadku wydają się być 6 i 6

wydaj polecenie sudo cp /etc/pm/sleep.d/novatel_3g_suspend /etc/pm/sleep.d/mouse_suspend(musimy to zrobić, ponieważ geditnie ma już opcji Zapisz jako po uruchomieniu jako superużytkownik, który mogę znaleźć).

wydaj polecenie gksu gedit /etc/pm/sleep.d/mouse_suspendZmień numery magistrali i urządzeń, aby pasowały do ​​tych, które zanotowałeś wcześniej. Zapisz wynikowy plik. Zostanie wykonany po zawieszeniu laptopa.

W twoim przypadku powinieneś zmienić BUS = X i DEVICE = Y na numery magistrali i urządzenia pasujące do danej myszy. Będzie to działać, dopóki nie przeniesiesz urządzenia do innego portu, w którym to przypadku będziesz musiał ponownie zlokalizować urządzenie i odpowiednio dostosować plik.

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

Komentarze w pliku (linie zaczynające się od #) są nieistotne i można je bezpiecznie zignorować.

Uwaga: przetestowałem to za pomocą funkcji Suspend na komputerze stacjonarnym i działało zgodnie z reklamą. Nie mam dostępu do tego samego sprzętu, co masz, ale musiałem wznowić system za pomocą przycisku zasilania, więc jestem pewien, że to zadziała.

Edytuj na podstawie komentarzy i rozszerzenia pytania:

Wygląda na to, że są to informacje, które musisz kontynuować: Bus 006 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver

Starszy Geek
źródło
W mojej geditaktualizacji waniliowej Ubuntu 16.04 z 14.04 jest Save asopcja w Filemenu. Coś musiało się stać z twoją konfiguracją ??? PS dobra odpowiedź, spróbuję później.
WinEunuuchs2Unix
Mam też opcję zapisywania plików za pomocą Ubuntu Mate.
tokam
@ WinEunuuchs2Unix Ciekawe. Wygląda na to, że nie istnieje w nowej instalacji. Być może jest to podstawa nowego pytania ...
Starszy Geek
@ElderGeek Aktualizacja o tym, Save Asgdy piszę, pojawia geditsię całe menu górnego wiersza „Edycja pliku Wyświetl narzędzia wyszukiwania Dokumenty Pomoc”, ale jeśli piszę, gksu geditlista menu nie pojawia się. HTH.
WinEunuuchs2Unix
1
@tokam można zaktualizować swoje pytanie z wyjściem z lsusb -ti lsusbze wszystkich urządzeń podłączonych w jak normalnie używać ich z dnia na dzień. To może nam pomóc w wizualizacji centrum, a co nie.
WinEunuuchs2Unix