Comment désactiver l'alimentation USB de ma souris lorsque je suspends le portable?

19

La lumière LED de ma souris m'énerve lorsque je dors. Je ferme généralement mon ordinateur portable le soir et les appels Ubuntu pm-suspend. Quoi qu'il en soit, la prise USB est toujours alimentée. Je pourrais même recharger mon smartphone. C'est mauvais pour moi pour deux raisons. Je dois débrancher ma souris et la batterie de l'ordinateur portable [akku] dure moins. Existe-t-il un moyen d'éteindre automatiquement mon périphérique USB, ou tous les périphériques USB, lorsque l'ordinateur portable passe en mode suspension?

Comment le configurer?

EDIT: Comme demandé dans les commentaires, j'ajoute ces informations: J'utilise un Lenovo G550.

EDIT: Comme demandé ici ma sortie 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: Je pense que cette information conduit également à la réponse.

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

ÉDITER:

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
la source
8
Je ne pense pas que cette fonction de charge de sommeil soit liée à Ubuntu. Windows et Ubuntu le font pour moi sur mon ordinateur portable. Au lieu de cela, il devrait y avoir un paramètre dans le BIOS pour couper l'alimentation des ports USB pendant la veille.
TheWanderer
1
Êtes-vous sûr? Google m'a montré quelques informations pour le mot clé "usb suspend ubuntu". Mais je ne sais pas encore à 100% comment le faire correctement. hamwaves.com/usb.autosuspend/en askubuntu.com/questions/80638/…
tokam
1
Eh bien, vous pouvez les désactiver, mais c'est pendant qu'Ubuntu lui-même est en cours d'exécution. Si vous souhaitez exécuter des scripts avant que l'ordinateur portable ne dorme pour suspendre les ports, c'est possible, mais il sera plus facile de vérifier au moins les paramètres du BIOS pour cette option.
TheWanderer
1
Mon BIOS ne prend malheureusement pas en charge une telle option.
tokam
1
@tokam, pourriez-vous modifier la question et ajouter la marque et le modèle de l'ordinateur portable? Pourriez-vous également confirmer qu'il ne s'agit pas d'un port de partage d'alimentation USB comme expliqué ici: dell.com/support/article/ro/ro/robsdt1/SLN155147/EN (icône de l'éclair)
user.dz

Réponses:

4

La pierre d'achoppement actuelle avec les liens OP, les commentaires de suivi et les réponses proposées est que l'ID du produit est statique, 1b1a:7001mais les numéros de bus et de périphérique changent constamment.

La solution

Créez un script (n'importe quel nom que vous voulez) dans le répertoire /etc/pm/sleep.d/et placez-y les éléments suivants:

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

Marquez le fichier comme exécutable avec sudo chmod +x file_nameoù "nom_fichier" est le nom que vous avez choisi.

L'explication

Cette solution met hors tension l'intégralité du concentrateur USB, ce qui dans mon cas signifiait téléphone, souris sans fil, clavier sans fil, etc. Lors de l'appel du script à partir de l'invite du terminal, le mot de passe sudo doit être entré. Avec un peu de chance, quand ils sont appelés de systemd sudo, les pouvoirs sont hérités. Je n'ai pas pu tester cela car je n'ai pas de souris filaire. Par conséquent, un raffinement supplémentaire peut être nécessaire pour les pouvoirs sudo.

L'alimentation n'est pas physiquement coupée lorsque le BIOS fournit une alimentation constante de 5 V, mais les appareils sur le bus doivent plutôt s'éteindre. Dans mon cas, le clavier et la souris sans fil ont cessé de fonctionner et ont dû recourir à un clavier d'ordinateur portable et à un pavé tactile pour remettre sous tension.

Vous pouvez tester cela manuellement en appelant le script et en passant les paramètres "suspend". Passer le paramètre "reprendre" n'aboutit à rien car l'appareil est éteint, il n'a pas d'ID d'appareil pour le rallumer.


Solution plus simple, éteignez tous les ports USB

J'ai récemment rencontré un problème où un port inconnu empêchait la suspension de l'ordinateur portable. J'ai trouvé cette solution (crédit en code) que j'ai modifiée.

Créez le fichier à l' /lib/systemd/system-sleep/custom-xhci_hcdaide de sudopouvoirs et insérez ce 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
WinEunuuchs2Unix
la source
Puis-je tester le script d'une manière ou d'une autre avant de suspendre réellement le bloc-notes avec une commande d'écho non dynamique?
tokam
vous avez réussi à isoler le bus et le périphérique qui sont également affichés dans lsusb, mais comme vous l'avez souligné, le répertoire n'existe pas, comme indiqué dans la question, les répertoires ont une structure différente de $ {BUS} - $ {DEVICE} , et je ne sais pas si même en sachant laquelle est la bonne, la suspension fonctionne
tokam
Un test dans lequel j'ai débranché et rebranché la souris a aidé à identifier le dossier. Mais regardez la sortie du prochain test: Keine Berechtigung signifie: aucune autorisation 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
La souris a une LED à l'extérieur de la souris et un laser en bas. Avec une combinaison des deux réponses fournies, j'ai pu éteindre le laser de la souris, mais pas la LED, ce qui n'ajoute pas de lumière à mon environnement de sommeil. Peut-être que nous ne pouvons pas éteindre la LED par le noyau? Je l'ai testé sur une prise USB isolée pour la souris.
tokam
@tokam Après de nombreuses recherches et tests, je l'ai finalement fait fonctionner manuellement sur mon système mais je n'ai pas votre souris pour le tester. J'espère que ça marche!
WinEunuuchs2Unix
5

Trouvez le bus et le numéro de périphérique de votre souris en exécutant la commande lsusb(avec et sans qu'elle soit branchée), vous voulez celle qui n'est là que lorsqu'elle est branchée. Notez les chiffres. Dans votre cas, ils semblent être 6 et 6

émettez la commande sudo cp /etc/pm/sleep.d/novatel_3g_suspend /etc/pm/sleep.d/mouse_suspend(nous devons le faire car il geditn'y a plus d'option Enregistrer sous lors du lancement en tant que superutilisateur que je peux trouver.)

émettez la commande gksu gedit /etc/pm/sleep.d/mouse_suspendModifiez les numéros de bus et de périphérique pour qu'ils correspondent à ceux que vous avez pris en compte précédemment. Enregistrez le fichier résultant. Il sera exécuté lorsque vous suspendez votre ordinateur portable.

Dans votre cas, vous devez remplacer BUS = X et DEVICE = Y par les numéros de bus et de périphérique correspondant à la souris en question. Cela fonctionnera jusqu'à ce que vous déplaciez l'appareil vers un autre port, auquel cas vous devrez localiser à nouveau l'appareil et ajuster le fichier en conséquence.

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

Les commentaires dans le fichier (lignes commençant par #) ne sont pas pertinents et peuvent être ignorés en toute sécurité.

Remarque: J'ai testé cela via Suspend sur un bureau et cela a fonctionné comme annoncé. Je n'ai pas accès au même matériel que vous, mais j'ai dû reprendre le système via le bouton d'alimentation, donc je suis assez certain que cela fonctionnera pour vous.

Modifier en fonction des commentaires et de l'expansion de la question:

Il semble que ce soit les informations dont vous avez besoin pour continuer: Bus 006 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver

Elder Geek
la source
Dans ma geditmise à jour Ubuntu 16.04 vanilla à partir de 14.04, il y a une Save asoption sous le Filemenu. Quelque chose a dû arriver à votre configuration ??? PS bonne réponse, je l'essayerai plus tard.
WinEunuuchs2Unix
J'ai également enregistré le fichier sous Ubuntu Mate.
tokam
@ WinEunuuchs2Unix Intéressant. Il ne semble pas exister sur une nouvelle installation. C'est peut-être la base d'une nouvelle question ...
Elder Geek
@ElderGeek Une mise à jour sur Save Assi je tape, geditj'obtiens l'intégralité du menu de la ligne supérieure de "File Edit View Search Tools Documents Help" mais si je tape, gksu geditla liste des menus n'apparaît pas. HTH.
WinEunuuchs2Unix
1
@tokam Pouvez-vous mettre à jour votre question avec la sortie de lsusb -tet lsusbavec tous vos appareils connectés comme vous les utilisez normalement au jour le jour. Cela pourrait nous aider à visualiser le hub et ce qui ne l'est pas.
WinEunuuchs2Unix