Desperte da suspensão usando o teclado ou mouse USB sem fio (para qualquer distribuição Linux)

18

Eu estava procurando por horas, talvez mais, por uma solução e acabei de encontrá-la. Eu quero compartilhar com todos. Dessa forma, será mais fácil pesquisar esse problema no Google para encontrar a solução mais rapidamente. Então, assim como o título diz, abaixo está a solução.

Pavlos Theodorou
fonte

Respostas:

26

acerto no terminal:

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

O resultado, para mim, foi descobrir que todos os usb estavam desativados. Então agora, digite:

1

sudo su

agora temos privilégios de raiz.

2.Eu tenho 8 portas USB ( você faz isso para quantas portas USB tiver ), então:

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

Vá em frente e teste. Agora você pode acordar de qualquer teclado e mouse USB com ou sem fio.

Então, a razão pela qual devemos habilitar todos eles é que, na próxima etapa, escreveremos isso em rc.local para executar o comando após cada reinicialização e, após a reinicialização, algumas distribuições Linux (talvez todas) alterem as portas USB. Não precisamos nos preocupar com nada de errado ativando todos eles, já que o linux está em suspensão ou hibernação, ele não pode usar o wifi para baixar nada, para que não acorde sem acordá-lo de propósito. .

Próxima Etapa:

3)

sudo nano /etc/rc.local

e colamos tudo da etapa 2. lá (antes da saída 0, é claro).

É isso aí. A partir de agora, podemos usar nosso mouse e usb sem fio para ativar a suspensão.

Espero que funcione para todos vocês. Este guia foi elaborado após testar todas as outras soluções possíveis na Internet.

Pavlos Theodorou
fonte
6
Se você quiser descobrir qual dispositivo é qual, procure /sys/bus/usb/devices/<device id>/productuma descrição de texto.
Ntc2
Ativei todos os dispositivos em " grep . /sys/bus/usb/devices/*/power/wakeup", mas ainda não funcionou. Talvez seja porque o teclado e o mouse estejam conectados indiretamente - sem fio a um dongle que reside na tela? A tela está conectada via USB ao laptop.
AlikElzin-Kilaka
11
como @ NTC2 disse, usar isso para ver a descrição de cada um: grep . /sys/bus/usb/devices/*/productme ajudou a descobrir o que eu estou olhando
Ben Yitzhaki
Se isso ainda não funcionar, verifique se o dispositivo (teclado / mouse) ainda está ligado quando o PC está no modo de suspensão. Se não houver LED no seu dispositivo, você pode usar um monitor de energia USB (pode encontrá-los cerca de US $ 10 on-line) para verificar se há energia na porta USB.
J # Smith
A parte permanente dessa pergunta não funciona mais com pelo menos o ubuntu 18.04. A adição ( askubuntu.com/a/874701/516072 ) a esta resposta fornecida por pavlos-theodorou ajudou na parte permanente do Ubuntu 18.04
Laurens
10

Além do meu guia acima, quero adicionar essas informações, porque descobri recentemente que alguns dispositivos USB sem fio, depois de acordarem do sono, voltam a ser desativados. Repito, apenas alguns dispositivos USB fazem isso, não todos. Por isso não adicionei este pequeno guia no meu guia.

Então você fez como eu instruí acima e seu PC acorda com sucesso, mas no final do dia, de repente, ele não acorda novamente.

Solução:

Abra um terminal e faça:

lsusb

Nas informações de identificação do dispositivo do teclado, os 4 primeiros dígitos são a identificação do fornecedor e os 4 dígitos seguintes são a identificação do produto (veja a captura de tela) insira a descrição da imagem aqui

Em seguida faça:

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

Onde "wakeup" insira o nome desejado do script. O número 10 é a prioridade, caso você tenha muitas outras regras do udev, quanto menor o número, a 'regra' será executada antes das outras.

Copie e cole isso e substitua a identificação do fornecedor e a identificação do produto pela sua própria identificação de fornecedor de teclado sem fio e identificação do produto.

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 mim é o meu teclado sem fio (você também pode ver isso na captura de tela (Bus 008)), substitua-o pelo seu.

Ctrl+ Opara salvar, Ctrl+ Xpara sair e reiniciar.

Pavlos Theodorou
fonte
4
Melhor incorporar isso em sua primeira resposta.
Ntc2
11
eles são 2 coisas diferentes. o primeiro é a resposta para o problema de despertar. o segundo é mais como "Como criar uma regra para executar nenhuma inicialização" e é apenas um "extra", pois nem todo mundo sabe como fazer isso e não há um guia amador simples para isso.
Pavlos Theodorou
2

A resposta de Pavlos Theodorou é muito útil. Gostaria de acrescentar que você pode encontrar o dispositivo USB ao qual o mouse / teclado está conectado na inicialização, executando dmesg através do grep algumas vezes, depois egrep uma vez e finalmente usando o tail para garantir que seja o mais recente entrada.

Usando esse método, você não precisa ativar a ativação em TODAS as portas USB.

Coloquei o seguinte no meu arquivo /etc/rc.local e ele encontra meu receptor da logitech todas as vezes, mesmo se movido de uma porta USB para outra. Basta substituir o nome do seu teclado ou mouse por dmesg no 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

Isso funciona na inicialização, mas não parece ser executado após a suspensão, então tive que colocar um arquivo de script em / lib / systemd / system-sleep /. Crie-o, defina-o como executável globalmente e dê um nome que comece com um número de dois dígitos entre 00 e 99. Meu script é o seguinte, substitua novamente o verbage do teclado / mouse pelo 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 alguma razão, não sei explicar, a instrução 'post' de suspensão se funciona apenas em todas as outras operações de despertar ... mas a instrução 'pré' de suspensão se parece funcionar todas as vezes.

jcn1
fonte
1

Nenhuma das respostas acima mencionadas me ajudou. É por isso que eu posto aqui o meu próprio.

Ativando / desativando a ativação de suspensão para dispositivos USB

Testado no KDE neon 5.16.2, baseado no Ubuntu 18.04, mas deve funcionar em qualquer distribuição.


1. Mostre a lista de dispositivos USB para identificar o que você deseja ativar / desativar:

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

você deve obter algo como isto:

/ sys / bus / usb / devices / 3-3 / product: Mouse óptico de cabo
Adaptador WLAN /sys/bus/usb/devices/3-4.3/product:802.11n
/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: Controlador de host EHCI
/ sys / bus / usb / devices / usb2 / product: Controlador de host EHCI
/ sys / bus / usb / devices / usb3 / product: Controlador de host xHCI
/ sys / bus / usb / devices / usb4 / product: Controlador de host xHCI


2. Verifique o status de ativação de todos os dispositivos USB:

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

o resultado deve ser algo como isto:

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

No meu caso, a ativação é ativada apenas para o dispositivo USB 3-3 que, de acordo com a lista anterior, é "Cord Optical Mouse".

Desejo ativar a ativação de suspender apenas para o teclado sem fio e desativá-lo para o resto. O receptor USB do teclado está conectado a um HUB e corresponde a 3-4.4 na lista anterior ("USB Receiver").


3. Crie um script que faça o trabalho:

Para ter permissões de root:

sudo su

Em seguida, criamos o arquivo para o script (o arquivo pode ser chamado de "usbwakeup" ou qualquer descrição que você desejar):

nano /etc/init.d/usbwakeup 

Conteúdo do arquivo. Basta adaptá-lo às suas necessidades, alterando a seção "AÇÕES DE SCRIPT" (eu gosto de adicionar comentários aos scripts para saber o que eles realmente fazem se eu os abrir novamente algum dia):

#! / bin / bash
#
#######################
# INFORMAÇÃO GERAL #
#######################
#
# - Este script habilita / desabilita a ativação do # de suspensão para dispositivos USB.
#
# - O script precisa de permissões de execução.
#
# - Para que este script seja executado quando o sistema for iniciado, deve haver
# um link simbólico para ele em /etc/rc3.d/ com prioridade S01
# (por exemplo: /etc/rc3.d/S01usbwakeup)
#
###########################
# COMANDOS ÚTEIS RELACIONADOS #
###########################
#
# - Identifique dispositivos USB:
# grep. / sys / bus / usb / devices / * / product
#
# - Verifique o status de "ativação da suspensão" dos dispositivos USB:
# grep. / sys / bus / usb / devices / * / power / wakeup
#
#
##################
# AÇÕES DE SCRIPT #
##################
#
# Desativa a ativação da suspensão para o mouse óptico
eco desativado> / sys / bus / usb / devices / 3-3 / power / wakeup
#
# Permite ativar a suspensão do teclado sem fio
que conectei a um HUB USB 3.0 na porta USB nº 4
eco ativado> /sys/bus/usb/devices/3-4.4/power/wakeup


4. Conceda permissões de execução:

chmod +x /etc/init.d/usbwakeup


5. Crie um link simbólico em /etc/rc3.d/ para iniciar na inicialização:

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


Ao reiniciar o sistema, tudo deve funcionar conforme especificado no script. As alterações serão persistentes, pois serão executadas a cada inicialização do sistema.

Fontes consultadas (além deste post):

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
fonte
Acabei de encontrar um post interessante, onde é explicado como criar uma GUI simples para o mesmo objetivo. Eu não testei, mas talvez ajude alguém tentando fazê-lo graficamente e com a facilidade de um único clique para ativar / desativar: bernaerts-nicolas.fr/linux/74-ubuntu/220-ubuntu-resume-usb- hid
Juan Gómez Carrillo