Réveillez-vous de la suspension à l'aide d'un clavier ou d'une souris USB sans fil (pour toute distribution Linux)

18

Je cherchais des heures, peut-être plus, une solution et je viens de la trouver. Je veux le partager avec tout le monde. De cette façon, il sera plus facile de googler ce problème pour trouver la solution plus rapidement. Ainsi, comme le dit le titre, voici la solution.

Pavlos Theodorou
la source

Réponses:

26

frapper dans le terminal:

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

Le résultat, pour moi, a été de découvrir que toutes les clés USB étaient désactivées. Alors maintenant, tapez:

1.

sudo su

nous avons maintenant des privillages racinaires.

J'ai 8 ports USB ( vous le faites pour autant de ports USB que vous en avez ), donc:

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

Allez-y et testez-le. Vous pouvez désormais vous réveiller à partir de n'importe quel clavier et souris USB sans fil ou filaire.

Donc, la raison pour laquelle nous devons tous les activer, c'est parce qu'à l'étape suivante, nous allons l'écrire dans rc.local pour exécuter la commande après chaque redémarrage, et après le redémarrage, quelques distributions Linux (peut-être toutes) changent les ports USB. Nous n'avons pas à nous soucier de tout ce qui ne va pas en les activant tous, car Linux est en veille ou en veille prolongée, il ne peut pas utiliser le wifi pour télécharger quoi que ce soit, donc il ne se réveillera pas sans que nous le réveillions exprès .

L'étape suivante:

3.

sudo nano /etc/rc.local

et nous collons tout à partir de l'étape 2. là-dedans (avant la sortie 0 bien sûr).

C'est ça. À partir de maintenant, nous pouvons utiliser notre souris et USB sans fil pour nous réveiller de la suspension.

J'espère que cela fonctionne pour vous tous. Ce guide a été réalisé après avoir testé toutes les autres solutions possibles sur Internet.

Pavlos Theodorou
la source
6
Si vous voulez savoir de quel appareil il s'agit, vous pouvez rechercher /sys/bus/usb/devices/<device id>/productune description textuelle.
ntc2
J'ai activé tous les appareils dans " grep . /sys/bus/usb/devices/*/power/wakeup" mais je n'ai toujours pas fonctionné. C'est peut-être parce que le clavier et la souris sont connectés indirectement - sans fil à un dongle qui réside sur l'écran? L'écran est connecté via USB à l'ordinateur portable.
AlikElzin-kilaka
1
comme @ ntc2 l'a dit, utilisez ceci pour voir la description de chacun: grep . /sys/bus/usb/devices/*/productm'a aidé à comprendre ce que je regarde
Ben Yitzhaki
Si cela ne fonctionne toujours pas, assurez-vous que votre appareil (clavier / souris) est toujours alimenté lorsque le PC est en mode veille. S'il n'y a pas de LED sur votre appareil, vous pouvez utiliser un moniteur d'alimentation USB (vous pouvez les trouver environ 10 $ en ligne) pour vérifier l'alimentation du port USB.
J Smith
La partie permanente de cette question ne fonctionne plus avec au moins ubuntu 18.04. L'ajout ( askubuntu.com/a/874701/516072 ) à cette réponse fournie par pavlos-theodorou a aidé pour la partie permanente dans Ubuntu 18.04
Laurens
10

En plus de mon guide ci-dessus, je veux ajouter ces informations, car j'ai récemment découvert que certains périphériques USB sans fil après le réveil du sommeil, ils reviennent à désactiver. Je le répète, seuls certains périphériques USB le font, pas tous. C'est pourquoi je n'ai pas ajouté ce petit guide sur mon guide.

Vous avez donc fait comme je l'ai indiqué ci-dessus et votre ordinateur se réveille avec succès, mais plus tard dans la journée, il ne se réveille plus.

Solution:

Ouvrez un terminal et faites:

lsusb

Sur les informations d'identification de votre appareil clavier, les 4 premiers chiffres sont l'ID du fournisseur et les 4 chiffres suivants sont l'ID du produit (voir capture d'écran) entrez la description de l'image ici

Prochaine:

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

Où "réveil" entrez votre nom de script souhaité. Le numéro 10 est la priorité dans le cas où vous avez beaucoup d'autres règles udev, plus le nombre sera bas que la «règle» sera exécutée avant les autres.

Copiez-collez ceci et remplacez l'ID du fournisseur et l'ID du produit par votre propre ID de fournisseur de clavier sans fil et l'ID du produit.

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

* usb8 est pour moi mon clavier sans fil (vous pouvez également le voir sur la capture d'écran (Bus 008)), remplacez-le par le vôtre.

Ctrl+ Opour enregistrer, Ctrl+ Xpour quitter et redémarrer.

Pavlos Theodorou
la source
4
Mieux vaut incorporer cela dans votre première réponse.
ntc2
1
ce sont 2 choses différentes. le 1er est la réponse au problème du réveil. le 2ème est plus comme "Comment créer une règle pour ne pas exécuter de démarrage" et c'est juste un "extra" car tout le monde ne sait pas comment faire et il n'y a pas de guide amateur simple pour cela.
Pavlos Theodorou
2

La réponse de Pavlos Theodorou est très utile. Je voudrais ajouter que vous pouvez trouver le périphérique USB auquel votre souris / clavier est connecté au démarrage en canalisant dmesg via grep plusieurs fois, puis egrep une fois, et enfin en utilisant tail pour vous assurer qu'il était le plus récent entrée.

En utilisant cette méthode, vous n'avez pas à activer le réveil sur TOUS les ports USB.

J'ai mis ce qui suit dans mon fichier /etc/rc.local et il trouve mon récepteur logitech à chaque fois, même s'il est déplacé d'un port USB à un autre. Remplacez simplement le nom de votre clavier ou souris de dmesg à la place 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

Cela fonctionne au démarrage, mais ne semble pas fonctionner au réveil de la suspension, j'ai donc dû mettre un fichier de script dans / lib / systemd / system-sleep /. Créez-le, définissez-le comme exécutable globalement et donnez-lui un nom qui commence par un nombre à deux chiffres compris entre 00 et 99. Mon script est le suivant, remplacez à nouveau votre verbage clavier / souris 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

Pour une raison quelconque, je ne peux pas l'expliquer, la déclaration «sommeil» si fonctionne uniquement tous les deux réveils ... mais la déclaration «pré» sommeil si semble fonctionner à chaque fois.

jcn1
la source
1

Aucune des réponses mentionnées ci-dessus ne m'a aidé. C'est pourquoi je poste ici le mien.

Activation / désactivation du réveil de la suspension pour les périphériques USB

Testé dans KDE neon 5.16.2, basé sur Ubuntu 18.04 mais devrait fonctionner dans n'importe quelle distribution.


1. Affichez la liste des périphériques USB pour identifier celui que vous souhaitez activer / désactiver:

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

vous devriez obtenir quelque chose comme ceci:

/ sys / bus / usb / périphériques / 3-3 / produit: Cord Optical Mouse
/sys/bus/usb/devices/3-4.3/product:802.11n Adaptateur WLAN
/sys/bus/usb/devices/3-4.4/product: Récepteur USB
/sys/bus/usb/devices/3-4/product:USB2.0 Hub
/sys/bus/usb/devices/4-4/product:USB3.0 Hub
/ sys / bus / usb / périphériques / usb1 / produit: Contrôleur hôte EHCI
/ sys / bus / usb / périphériques / usb2 / produit: Contrôleur hôte EHCI
/ sys / bus / usb / périphériques / usb3 / produit: contrôleur hôte xHCI
/ sys / bus / usb / périphériques / usb4 / produit: contrôleur hôte xHCI


2. Vérifiez l'état de réveil de tous les périphériques USB:

grep. / sys / bus / usb / périphériques / * / alimentation / réveil

le résultat devrait être quelque chose comme ceci:

/ sys / bus / usb / périphériques / 1-1 / alimentation / réveil: désactivé
/ sys / bus / usb / périphériques / 2-1 / alimentation / réveil: désactivé
/ sys / bus / usb / appareils / 3-11 / alimentation / réveil: désactivé
/ sys / bus / usb / périphériques / 3-3 / alimentation / réveil: activé
/sys/bus/usb/devices/3-4.4/power/wakeup:disabled
/ sys / bus / usb / appareils / 3-4 / alimentation / réveil: désactivé
/ sys / bus / usb / périphériques / 4-4 / alimentation / réveil: désactivé
/ sys / bus / usb / périphériques / usb1 / alimentation / réveil: désactivé
/ sys / bus / usb / périphériques / usb2 / alimentation / réveil: désactivé
/ sys / bus / usb / périphériques / usb3 / alimentation / réveil: désactivé
/ sys / bus / usb / périphériques / usb4 / alimentation / réveil: désactivé

Dans mon cas, le réveil n'est activé que pour le périphérique USB 3-3 qui, selon la liste précédente, est "Cord Optical Mouse".

Je veux activer le réveil de la suspension uniquement pour le clavier sans fil et le désactiver pour le reste. Le récepteur USB du clavier est connecté à un HUB et correspond à 3-4.4 dans la liste précédente ("Récepteur USB").


3. Créez un script qui fait le travail:

Pour avoir des autorisations root:

sudo su

Ensuite, nous créons le fichier pour le script (le fichier peut être appelé "usbwakeup" ou n'importe quelle description que vous souhaitez):

nano /etc/init.d/usbwakeup 

Contenu du dossier. Adaptez-le simplement à vos besoins en modifiant la section "ACTIONS DE SCRIPTS" (j'aime ajouter des commentaires aux scripts afin de savoir ce qu'ils font réellement si je les rouvre un jour):

#! / bin / bash
#
#######################
# INFORMATIONS GÉNÉRALES #
#######################
#
# - Ce script active / désactive le réveil de la suspension # pour les périphériques USB.
#
# - Le script a besoin d'autorisations d'exécution.
#
# - Pour que ce script soit exécuté au démarrage du système, il doit y avoir
# un lien symbolique vers celui-ci dans /etc/rc3.d/ avec la priorité S01
# (par exemple: /etc/rc3.d/S01usbwakeup)
#
###########################
# COMMANDES UTILES CONNEXES #
###########################
#
# - Identifiez les périphériques USB:
# grep. / sys / bus / usb / périphériques / * / produit
#
# - Vérifiez l'état de "réveil de la suspension" des périphériques USB:
# grep. / sys / bus / usb / périphériques / * / alimentation / réveil
#
#
##################
# ACTIONS SCRIPT #
##################
#
# Désactive le réveil de la suspension pour la souris optique
écho désactivé> / sys / bus / usb / devices / 3-3 / power / wakeup
#
# Permet le réveil de la suspension pour le clavier sans fil
que j'ai connecté à un HUB USB 3.0 dans le port USB n ° 4
echo activé> /sys/bus/usb/devices/3-4.4/power/wakeup


4. Donnez-lui des autorisations d'exécution:

chmod +x /etc/init.d/usbwakeup


5. Créez un lien symbolique dans /etc/rc3.d/ pour qu'il démarre au démarrage:

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


En redémarrant le système, tout devrait fonctionner comme spécifié dans le script. Les modifications seront persistantes car elles seront exécutées à chaque démarrage du système.

Sources consultées (en dehors de ce billet):

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
la source
Je viens de trouver un article intéressant où il explique comment créer une interface graphique simple dans le même but. Je ne l'ai pas testé mais cela pourrait peut-être aider quelqu'un qui essaie de le faire graphiquement et avec la facilité d'un simple clic pour activer / désactiver: bernaerts-nicolas.fr/linux/74-ubuntu/220-ubuntu-resume-usb- caché
Juan Gómez Carrillo