Despierte de la suspensión con un teclado o mouse USB inalámbrico (para cualquier distribución de Linux)

18

Estaba buscando por horas, quizás más, una solución y la encontré. Quiero compartirlo con todos. De esta manera, será más fácil buscar en Google este problema para encontrar la solución más rápido. Entonces, tal como dice el título, a continuación se encuentra la solución.

Pavlos Theodorou
fuente

Respuestas:

26

golpe en la terminal:

grep . /sys/bus/usb/devices/*/power/wakeup

El resultado, para mí, fue descubrir que todos los usb estaban deshabilitados. Entonces, escriba:

1)

sudo su

ahora tenemos privilegios de raíz.

2.Tengo 8 puertos usb ( lo haces para todos los puertos usb que tengas ), entonces:

echo enabled > /sys/bus/usb/devices/usb1/power/wakeup
echo enabled > /sys/bus/usb/devices/usb2/power/wakeup
echo enabled > /sys/bus/usb/devices/usb3/power/wakeup
echo enabled > /sys/bus/usb/devices/usb4/power/wakeup
echo enabled > /sys/bus/usb/devices/usb5/power/wakeup
echo enabled > /sys/bus/usb/devices/usb6/power/wakeup
echo enabled > /sys/bus/usb/devices/usb7/power/wakeup
echo enabled > /sys/bus/usb/devices/usb8/power/wakeup

Adelante, pruébalo. Ahora puede despertarse desde cualquier teclado y mouse USB inalámbricos o cableados.

Entonces, la razón por la que debemos habilitarlos a todos, es porque en el siguiente paso, escribiremos esto en rc.local para ejecutar el comando después de cada reinicio, y después de reiniciar algunas distribuciones de Linux (tal vez todas) cambien los puertos usb. No tenemos que preocuparnos de que algo salga mal al habilitarlos a todos, ya que Linux está en suspensión o hibernación, no puede usar el wifi para descargar nada, por lo que no se activará sin que lo despertemos a propósito .

Próximo paso:

3)

sudo nano /etc/rc.local

y pegamos todo desde el paso 2. allí (antes de la salida 0, por supuesto).

Eso es. De ahora en adelante podemos usar nuestro mouse y usb inalámbricos para despertarnos de la suspensión.

Espero que funcione para todos ustedes. Esta guía se realizó después de probar todas las demás soluciones posibles en Internet.

Pavlos Theodorou
fuente
66
Si desea averiguar qué dispositivo es cuál, puede buscar /sys/bus/usb/devices/<device id>/productuna descripción de texto.
ntc2
Habilité todos los dispositivos en " grep . /sys/bus/usb/devices/*/power/wakeup" pero aún no funcionó. ¿Quizás es porque el teclado y el mouse están conectados indirectamente, de forma inalámbrica a un dispositivo de seguridad que se encuentra en la pantalla? La pantalla está conectada por USB a la computadora portátil.
AlikElzin-kilaka
1
como dijo @ ntc2, use esto para ver la descripción de cada uno: grep . /sys/bus/usb/devices/*/productme ayudó a descubrir lo que estoy mirando
Ben Yitzhaki
Si esto aún no funciona, asegúrese de que su dispositivo (teclado / mouse) todavía tenga energía cuando la PC esté en modo de suspensión. Si no hay LED en su dispositivo, puede usar un monitor de alimentación USB (puede encontrarlos en línea por alrededor de $ 10) para verificar la alimentación del puerto USB.
J Smith
La parte permanente de esta pregunta ya no funciona con al menos ubuntu 18.04. La adición ( askubuntu.com/a/874701/516072 ) a esta respuesta proporcionada por pavlos-theodorou ayudó para la parte permanente en Ubuntu 18.04
Laurens
10

Además de mi guía anterior, deseo agregar esta información, porque recientemente descubrí que algunos dispositivos usb inalámbricos después de despertarse del modo de suspensión, vuelven a desactivarse. Repito, solo algunos dispositivos usb hacen eso, no todos. Es por eso que no agregué esta pequeña guía en mi guía.

Así que hiciste lo que te indiqué anteriormente y tu PC se activa con éxito, pero más tarde en el día, de repente, no se vuelve a activar.

Solución:

Abra una terminal y haga:

lsusb

En la información de identificación del dispositivo de teclado, los 4 primeros dígitos son la identificación del proveedor y los 4 dígitos siguientes son la identificación del producto (ver captura de pantalla) ingrese la descripción de la imagen aquí

Siguiente hacer:

sudo nano /etc/udev/rules.d/10-wakeup.rules

Donde "wakeup" ingrese su nombre deseado de la secuencia de comandos. El número 10 es la prioridad en caso de que tenga muchas otras reglas de udev, cuanto menor sea el número, la 'regla' se ejecutará antes que las demás.

Copie y pegue esto y reemplace la identificación del proveedor y la identificación del producto con su propia identificación del proveedor del teclado inalámbrico y la identificación del producto.

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="062a", ATTRS{idProduct}=="4101" RUN+="/bin/sh -c 'echo enabled > /sys/bus/usb/devices/usb8/power/wakeup'"

* usb8 para mí es mi teclado inalámbrico (también puede verlo en la captura de pantalla (Bus 008)), reemplácelo con el suyo.

Ctrl+ Opara guardar, Ctrl+ Xpara salir y reiniciar.

Pavlos Theodorou
fuente
44
Es mejor incorporar esto en su primera respuesta.
ntc2
1
Son 2 cosas diferentes. el primero es la respuesta al problema de despertarse. el segundo es más como "Cómo crear una regla para ejecutar sin arranque" y es solo un "extra", ya que no todos saben cómo hacerlo y no hay una simple guía de aficionados para eso.
Pavlos Theodorou
2

La respuesta de Pavlos Theodorou es muy útil. Me gustaría agregar que puede encontrar el dispositivo usb al que está conectado su mouse / teclado al arrancar conectando dmesg a través de grep un par de veces, luego egrep una vez y finalmente usando la cola para asegurarse de que sea el más reciente entrada.

Usando este método, usted no tiene que habilitar estela de TODOS los puertos USB.

Pongo el siguiente en mi archivo /etc/rc.local y se encuentra mi logitech receptor cada vez, incluso si se trasladan de un puerto USB a otro. Simplemente sustituir el nombre de su teclado o el ratón de dmesg en lugar de "Logitech K270"

KB="$(dmesg | grep "Logitech K270 as" | grep -o -P "usb.{0,5}" | egrep -o ".{0,3}$" | tail -1)"
echo enabled > /sys/bus/usb/devices/${KB}/power/wakeup

Esto funciona en el arranque, pero no parece ejecutarse al despertar desde la suspensión, así que tuve que poner un archivo de script en / lib / systemd / system-sleep /. Créelo, configúrelo como ejecutable globalmente y asígnele un nombre que comience con un número de dos dígitos entre 00 y 99. Mi secuencia de comandos es la siguiente, vuelva a sustituir el teclado / mouse de dmesg:

#!/bin/sh

# Action script to enable wake after suspend by keyboard or mouse

if [ $1 = post ]
    then
    KB="$(dmesg | grep "Logitech K270 as" | grep -o -P "usb.{0,5}" | egrep -o ".{0,3}$" | tail -1)"
    echo enabled > /sys/bus/usb/devices/${KB}/power/wakeup
fi

if [ $1 = pre ]
    then
    KB="$(dmesg | grep "Logitech K270 as" | grep -o -P "usb.{0,5}" | egrep -o ".{0,3}$" | tail -1)"
    echo enabled > /sys/bus/usb/devices/${KB}/power/wakeup
fi

Por alguna razón que no puedo explicar, la declaración "dormir" si el sueño solo funciona en cualquier otro despertar ... pero la declaración "dormir" si parece funcionar siempre.

jcn1
fuente
1

Ninguna de las respuestas mencionadas me ayudó. Por eso publico aquí el mío.

Habilitar / deshabilitar la activación desde la suspensión para dispositivos USB

Probado en KDE neon 5.16.2, basado en Ubuntu 18.04 pero debería funcionar en cualquier distribución.


1. Muestre la lista de dispositivos USB para identificar el que desea habilitar / deshabilitar:

grep . /sys/bus/usb/devices/*/product

deberías obtener algo como esto:

/ sys / bus / usb / devices / 3-3 / product: Cord Optical Mouse
/sys/bus/usb/devices/3-4.3/product:802.11n Adaptador WLAN
/sys/bus/usb/devices/3-4.4/product:USB Receiver
/sys/bus/usb/devices/3-4/product:USB2.0 Hub
/sys/bus/usb/devices/4-4/product:USB3.0 Hub
/ sys / bus / usb / devices / usb1 / product: EHCI Host Controller
/ sys / bus / usb / devices / usb2 / product: EHCI Host Controller
/ sys / bus / usb / devices / usb3 / product: xHCI Host Controller
/ sys / bus / usb / devices / usb4 / product: xHCI Host Controller


2. Verifique el estado de activación de todos los dispositivos USB:

grep. / sys / bus / usb / devices / * / power / wakeup

El resultado debería ser algo como esto:

/ sys / bus / usb / devices / 1-1 / power / wakeup: deshabilitado
/ sys / bus / usb / devices / 2-1 / power / wakeup: deshabilitado
/ sys / bus / usb / devices / 3-11 / power / wakeup: deshabilitado
/ sys / bus / usb / devices / 3-3 / power / wakeup: habilitado
/sys/bus/usb/devices/3-4.4/power/wakeup:disabled
/ sys / bus / usb / devices / 3-4 / power / wakeup: deshabilitado
/ sys / bus / usb / devices / 4-4 / power / wakeup: deshabilitado
/ sys / bus / usb / devices / usb1 / power / wakeup: deshabilitado
/ sys / bus / usb / devices / usb2 / power / wakeup: deshabilitado
/ sys / bus / usb / devices / usb3 / power / wakeup: deshabilitado
/ sys / bus / usb / devices / usb4 / power / wakeup: deshabilitado

En mi caso, el despertador solo está habilitado para el dispositivo USB 3-3 que, según la lista anterior, es "Cable Optical Mouse".

Quiero habilitar la activación desde la suspensión solo para el teclado inalámbrico y deshabilitarlo para el resto. El receptor USB del teclado está conectado a un HUB y corresponde a 3-4.4 en la lista anterior ("Receptor USB").


3. Cree un script que haga el trabajo:

Para tener permisos de root:

sudo su

Luego creamos el archivo para el script (el archivo puede llamarse "usbwakeup" o cualquier descripción que desee):

nano /etc/init.d/usbwakeup 

Contenido del archivo. Sólo adaptarlo a sus necesidades cambiando la sección "SCRIPT ACCIONES" (me gusta añadir comentarios a las secuencias de comandos con el fin de saber lo que hacen en realidad si los abro de nuevo algún día):

#! / bin / bash
# #
#######################
# INFORMACIÓN GENERAL #
#######################
# #
# - Este script habilita / deshabilita la activación desde la suspensión # para dispositivos USB.
# #
# - El script necesita permisos de ejecución.
# #
# - Para que este script se ejecute cuando se inicia el sistema, debe haber
# un enlace simbólico en /etc/rc3.d/ con prioridad S01
# (por ejemplo: /etc/rc3.d/S01usbwakeup)
# #
###########################
# COMANDOS ÚTILES RELACIONADOS #
###########################
# #
# - Identificar dispositivos USB:
# grep. / sys / bus / usb / devices / * / product
# #
# - Verifique el estado de "despertar de la suspensión" de dispositivos USB:
# grep. / sys / bus / usb / devices / * / power / wakeup
# #
# #
##################
# ACCIONES DE SCRIPT #
##################
# #
# Deshabilita la activación desde la suspensión para mouse óptico
echo deshabilitado> / sys / bus / usb / devices / 3-3 / power / wakeup
# #
# Permite la activación desde la suspensión para el teclado inalámbrico
que he conectado a un concentrador USB 3.0 en el puerto USB n. ° 4
echo habilitado> /sys/bus/usb/devices/3-4.4/power/wakeup


4. Déle permisos de ejecución:

chmod +x /etc/init.d/usbwakeup


5. Cree un enlace simbólico en /etc/rc3.d/ para que se inicie en el arranque:

sudo ln -s /etc/init.d/usbwakeup /etc/rc3.d/S01usbwakeup


Al reiniciar el sistema, todo debería funcionar como se especifica en el script. Los cambios serán persistentes ya que se ejecutarán con cada arranque del sistema.

Fuentes consultadas (aparte de esta publicación):

https://ubuntuforums.org/showthread.php?t=2388336

https://www.thomasmonaco.com/prevent-usb-devices-waking-ubuntu-sleep/

/unix/83748/the-rc0-d-rc1-d-directories-in-etc

Juan Gómez Carrillo
fuente
Acabo de encontrar una publicación interesante donde se explica cómo crear una GUI simple para el mismo propósito. No lo he probado, pero quizás podría ayudar a alguien que intente hacerlo gráficamente y con la facilidad de un solo clic para habilitar / deshabilitar: bernaerts-nicolas.fr/linux/74-ubuntu/220-ubuntu-resume-usb- hid
Juan Gómez Carrillo