¿Cómo apago la alimentación USB de mi mouse cuando suspendo el portátil?

19

La luz LED de mi mouse me pone nerviosa cuando duermo. Normalmente cierro mi cuaderno por la noche y Ubuntu llama pm-suspend. De todos modos, el enchufe USB todavía está alimentado. Incluso podría cargar mi teléfono inteligente. Esto es malo para mí por dos razones. Tengo que desconectar el mouse y la batería del portátil [akku] dura menos. ¿Hay alguna manera de apagar automáticamente mi dispositivo USB, o todos los dispositivos USB, cuando el portátil entra en modo de suspensión?

¿Cómo configurarlo?

EDITAR: Según lo solicitado en los comentarios, agrego esta información: estoy usando un Lenovo G550.

EDITAR: como se solicitó aquí, mi salida 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

EDITAR: Creo que esta información también conduce a la respuesta.

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

EDITAR:

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
fuente
8
No creo que esta función de carga de suspensión tenga algo que ver con Ubuntu. Windows y Ubuntu lo hacen por mí en mi computadora portátil. En cambio, debería haber una configuración en el BIOS para apagar los puertos USB durante la suspensión.
TheWanderer
1
¿Estás seguro? Google me mostró cierta información para la palabra clave "usb suspend ubuntu". Pero todavía no estoy 100% seguro de cómo hacerlo bien. hamwaves.com/usb.autosuspend/en askubuntu.com/questions/80638/…
tokam
1
Bueno, puedes deshabilitarlos, pero eso es mientras Ubuntu se está ejecutando. Si desea hacer que los scripts se ejecuten antes de que la computadora portátil duerma para suspender los puertos, es posible, pero al menos será más fácil verificar la configuración de su BIOS para esa opción.
TheWanderer
1
Mi BIOS desafortunadamente no es compatible con esa opción.
tokam
1
@tokam, ¿podría editar la pregunta y agregar la marca y el modelo de la computadora portátil? También podría confirmar que no es un puerto USB de energía compartida como se explica aquí: dell.com/support/article/ro/ro/robsdt1/SLN155147/EN (icono de rayo)
user.dz

Respuestas:

4

El escollo actual con enlaces OP, comentarios de seguimiento y respuestas propuestas es que la ID del producto es estática, 1b1a:7001pero los números de Bus y Dispositivo siguen cambiando.

La solución

Cree un script (cualquier nombre que desee) en el directorio /etc/pm/sleep.d/y coloque lo siguiente en él:

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

Marque el archivo como ejecutable con sudo chmod +x file_namedonde "nombre_archivo" es el nombre que eligió.

La explicación

Esta solución apaga todo el concentrador USB, que en mi caso significaba teléfono, mouse inalámbrico, teclado inalámbrico, etc. Al llamar al script desde el terminal, se debe ingresar la contraseña de sudo. Con suerte, cuando se llama desde systemd, los poderes de sudo se heredan. Sin embargo, no pude probar esto porque no tengo un mouse con cable. Por lo tanto, puede ser necesario un refinamiento adicional para los poderes de sudo.

La energía no se corta físicamente cuando el BIOS proporciona una fuente de alimentación constante de 5V, sino que se dice que los dispositivos en el bus se apaguen. En mi caso, el teclado y el mouse inalámbricos dejaron de funcionar y tuvieron que recurrir al teclado de la computadora portátil y al panel táctil para volver a encenderlo.

Puede probar esto manualmente llamando al script y pasando los parámetros "suspender". Pasar el parámetro "reanudar" no logra nada porque el dispositivo está apagado, no tiene ID de dispositivo para volver a encenderlo.


La solución más fácil apaga todos los puertos USB

Recientemente me encontré con un problema en el que un puerto desconocido impedía que la computadora portátil se suspendiera. Encontré esta solución (crédito en el código) que modifiqué.

Cree el archivo /lib/systemd/system-sleep/custom-xhci_hcdusando sudopoderes e inserte este código:

#!/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
fuente
¿Puedo probar el script de alguna manera antes de suspender el notebook con un comando de eco no dinámico?
tokam
pudo aislar con éxito el bus y el dispositivo que también se muestra en lsusb, pero como señaló el directorio no existe, como se muestra en la pregunta, los directorios tienen una estructura diferente a $ {BUS} - $ {DEVICE} , y no estoy seguro si incluso con saber cuál es el correcto, la suspensión funciona
tokam
Una prueba en la que desconecté y volví a conectar el mouse ayudó a identificar la carpeta. Pero mire el resultado de la próxima prueba: Keine Berechtigung significa: sin permiso 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
El mouse tiene un LED en la parte exterior y un láser en la parte inferior. Con una combinación de ambas respuestas, pude apagar el láser del mouse, pero no el LED, lo que agrega luz a mi entorno para dormir. ¿Quizás no podamos apagar el LED por el Kernel? Lo probé en un enchufe USB aislado para el mouse.
tokam
@tokam Después de mucha investigación y pruebas, finalmente conseguí que funcionara en mi sistema manualmente, pero no tengo el mouse para probarlo. ¡Ojalá funcione!
WinEunuuchs2Unix
5

Encuentre el bus y el número de dispositivo de su mouse emitiendo el comando lsusb(con y sin él enchufado) que desea el que solo está allí cuando está enchufado. Tome nota de los números. En su caso, parecen ser 6 y 6

emita el comando sudo cp /etc/pm/sleep.d/novatel_3g_suspend /etc/pm/sleep.d/mouse_suspend(tenemos que hacer esto porque geditya no tengo la opción Guardar como cuando se inicia como superusuario que puedo encontrar).

emita el comando gksu gedit /etc/pm/sleep.d/mouse_suspendCambiar los números de bus y dispositivo para que coincidan con los que tomó nota anteriormente. Guarda el archivo resultante. Se ejecutará cuando suspendas tu computadora portátil.

En su caso, debe cambiar BUS = X y DEVICE = Y a los números de Bus y Dispositivo que coinciden con el mouse en cuestión. Esto funcionará hasta que mueva el dispositivo a un puerto diferente, en cuyo caso deberá ubicar el dispositivo nuevamente y ajustar el archivo en consecuencia.

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

Los comentarios en el archivo (líneas que comienzan con #) son irrelevantes y pueden ignorarse con seguridad.

Nota: Probé esto a través de Suspend en un escritorio y funcionó como se anuncia. No tengo acceso al mismo hardware que tiene, pero tuve que reanudar el sistema a través del botón de encendido, así que estoy bastante seguro de que esto funcionará para usted.

Edición basada en comentarios y expansión de la pregunta:

Parece que esta es la información que necesita para continuar: Bus 006 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver

Elder Geek
fuente
En mi geditactualización de Ubuntu 16.04 vanilla desde 14.04 hay una Save asopción debajo del Filemenú. ¿Algo le debe haber pasado a tu configuración? PD: buena respuesta, lo intentaré más tarde.
WinEunuuchs2Unix
También tengo guardar archivos, usando Ubuntu Mate.
tokam
@ WinEunuuchs2Unix Interesante. No parece existir en una instalación nueva. Quizás esta sea la base para una nueva pregunta ...
Élder Geek
@ElderGeek Una actualización sobre Save Assi escribo geditme sale todo el menú de la línea superior de "Archivo Editar Ver Buscar Herramientas Documentos Ayuda" pero si escribo gksu geditla lista del menú no aparece. HTH
WinEunuuchs2Unix
1
@tokam ¿Puede actualizar su pregunta con la salida de lsusb -ty lsusbcon todos sus dispositivos conectados ya que normalmente los usa día a día? Eso podría ayudarnos a visualizar el centro y lo que no.
WinEunuuchs2Unix