Come disattivare l'alimentazione USB del mouse quando sospendo il notebook?


19

La luce a LED del mio mouse mi dà sui nervi quando dorme. Di solito chiudo il mio notebook la sera e Ubuntu chiama pm-suspend. Ad ogni modo, la presa USB è ancora alimentata. Potrei persino caricare il mio smartphone. Questo è male per me per due motivi. Devo scollegare il mouse e la batteria del notebook [akku] dura meno. Esiste un modo per spegnere automaticamente il mio dispositivo USB o tutti i dispositivi USB quando il notebook passa in modalità di sospensione?

Come configurarlo?

MODIFICA: Come richiesto nei commenti, aggiungo queste informazioni: sto usando un Lenovo G550.

EDIT: Come richiesto qui il mio output 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

EDIT: penso che questa informazione porti anche alla risposta.

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

MODIFICARE:

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

8
Non credo che questa funzione di addebito del sonno abbia a che fare con Ubuntu. Windows e Ubuntu lo fanno per me sul mio laptop. Invece, ci dovrebbe essere un'impostazione nel BIOS per spegnere le porte USB durante la sospensione.
TheWanderer,

1
Sei sicuro? Google mi ha mostrato alcune informazioni per la parola chiave "usb suspend ubuntu". Ma non sono ancora sicuro al 100% di come farlo nel modo giusto. hamwaves.com/usb.autosuspend/it askubuntu.com/questions/80638/…
tokam

1
Bene, puoi disabilitarli, ma questo è mentre Ubuntu stesso è in esecuzione. Se vuoi creare degli script da eseguire prima che il laptop dorma per sospendere le porte, è possibile, ma sarà più facile controllare almeno le impostazioni del BIOS per quell'opzione.
TheWanderer,

1
Purtroppo il mio BIOS non supporta tale opzione.
Tokam,

1
@tokam, potresti modificare la domanda e aggiungere la marca e il modello del laptop?
Potresti

Risposte:


4

L'attuale ostacolo con collegamenti OP, commenti di follow-up e risposte proposte è che l'ID prodotto è statico 1b1a:7001ma i numeri di bus e dispositivo continuano a cambiare.

La soluzione

Crea uno script (qualsiasi nome tu voglia) nella directory /etc/pm/sleep.d/e inserisci quanto segue:

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

Contrassegna il file come eseguibile con sudo chmod +x file_namedove "nome_file" è il nome che hai scelto.

La spiegazione

Questa soluzione disattiva l'intero hub USB che nel mio caso significava telefono, mouse wireless, tastiera wireless, ecc. Quando si chiama lo script dal terminale, è necessario inserire la password sudo. Speriamo che quando vengono chiamati da systemd sudo i poteri siano ereditati. Non ho potuto provare questo perché non ho un mouse cablato. Pertanto potrebbe essere necessario un perfezionamento aggiuntivo per i poteri sudo.

L'alimentazione non viene interrotta fisicamente quando il BIOS fornisce un'alimentazione costante a 5 V, ma ai dispositivi sul bus viene detto di spegnersi. Nel mio caso la tastiera e il mouse wireless hanno smesso di funzionare e hanno dovuto ricorrere alla tastiera e al touchpad del laptop per riaccendere.

Puoi testarlo manualmente chiamando lo script e passando i parametri "sospendi". Passare il parametro "resume" non compie nulla perché il dispositivo è spento non ha un ID dispositivo per riaccenderlo.


La soluzione più semplice spegne tutte le porte USB

Di recente ho riscontrato un problema a causa del quale una porta sconosciuta impediva la sospensione del laptop. Ho trovato questa soluzione (credito nel codice) che ho modificato.

Crea il file /lib/systemd/system-sleep/custom-xhci_hcdusando i sudopoteri e inserisci questo codice:

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

Posso testare lo script in qualche modo prima di sospendere effettivamente il notebook con un comando echo non dinamico?
Tokam

sei stato in grado di isolare con successo il bus e il dispositivo che è anche mostrato in lsusb, ma come hai sottolineato la directory non esiste, come mostrato nella domanda, le directory hanno una struttura diversa da $ {BUS} - $ {DEVICE} , e non sono sicuro che anche sapendo quale è quello giusto funziona la sospensione
tokam

Un test in cui ho scollegato e ricollegato il mouse ha aiutato a identificare la cartella. Ma guarda l'output del prossimo test: Keine Berechtigung significa: nessuna autorizzazione 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

Il mouse ha un LED all'esterno e un laser nella parte inferiore. Con una combinazione di entrambe le risposte fornite, sono stato in grado di spegnere il laser del mouse, ma non il LED, che aggiunge luce al mio ambiente di sonno. Forse non possiamo spegnere il LED dal kernel? L'ho provato su una presa USB isolata per il mouse.
Tokam,

@tokam Dopo molte ricerche e test, finalmente sono riuscito a farlo funzionare manualmente sul mio sistema ma non ho il mouse per testarlo. Speriamo che funzioni!
WinEunuuchs2Unix,

5

Trova il bus e il numero di dispositivo del mouse inviando il comando lsusb(con e senza esso collegato) vuoi quello che è lì solo quando è collegato. Prendi nota dei numeri. Nel tuo caso sembrano essere 6 e 6

emettere il comando sudo cp /etc/pm/sleep.d/novatel_3g_suspend /etc/pm/sleep.d/mouse_suspend(dobbiamo farlo perché geditnon è più disponibile l'opzione Salva con nome quando viene avviato come superutente che posso trovare.)

emettere il comando gksu gedit /etc/pm/sleep.d/mouse_suspendModifica i numeri di bus e dispositivo in modo che corrispondano a quelli annotati in precedenza. Salva il file risultante. Verrà eseguito quando sospendi il tuo laptop.

Nel tuo caso devi cambiare BUS = X e DEVICE = Y con i numeri di bus e dispositivo che corrispondono al mouse in questione. Questo funzionerà fino a quando non si sposta il dispositivo su una porta diversa, nel qual caso sarà necessario individuare nuovamente il dispositivo e regolare il file di conseguenza.

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

I commenti nel file (righe che iniziano con #) sono irrilevanti e possono essere tranquillamente ignorati.

Nota: l'ho provato tramite Suspend su un desktop e ha funzionato come pubblicizzato. Non ho accesso allo stesso hardware che hai ma ho dovuto riprendere il sistema tramite il pulsante di accensione, quindi sono abbastanza sicuro che funzionerà per te.

Modifica in base ai commenti e all'espansione della domanda:

Sembra che queste siano le informazioni necessarie per procedere: Bus 006 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver


Nel mio geditaggiornamento alla versione 16.04 di Ubuntu dalla 14.04 c'è Save asun'opzione nel Filemenu. Deve essere successo qualcosa alla tua configurazione ??? PS buona risposta, ci proverò più tardi.
WinEunuuchs2Unix,

Ho anche il salvataggio dei file, usando Ubuntu Mate.
Tokam,

@ WinEunuuchs2Unix Interessante. Non sembra esistere su una nuova installazione. Forse questa è la base per una nuova domanda ...
Anziano Geek,

@ElderGeek Un aggiornamento su Save Asse digito geditottengo l'intero menu della riga superiore di "Modifica file Visualizza Strumenti di ricerca Documenti Aiuto" ma se digito gksu geditl'elenco dei menu non viene visualizzato. HTH.
WinEunuuchs2Unix

1
@tokam Puoi aggiornare la tua domanda con l'output da lsusb -te lsusbcon tutti i tuoi dispositivi collegati come li usi normalmente tutti i giorni. Ciò potrebbe aiutarci a visualizzare l'hub e cosa no.
WinEunuuchs2Unix
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.