web-dev-qa-db-fra.com

Comment utiliser une touche pour réveiller un ordinateur portable suspendu avec un commutateur KVM?

J'utilise un clavier Logitech sans fil avec un récepteur Logitech Unifying connecté à un commutateur KVM. J'ai créé un raccourci système susp pour suspendre l'ordinateur portable, un Lenovo IdeaPad. Le couvercle de l'ordinateur portable est toujours fermé. Je ne parviens pas à faire sortir Lenovo de la suspension sans lever le couvercle de l'ordinateur portable. Une fois le couvercle soulevé, l'ordinateur portable se réveille. Je veux pouvoir réveiller l'ordinateur portable sans avoir à soulever le couvercle. Je ne sais pas comment faire ça.

J'ai essayé deux choses, ni travaillé. Tout d'abord, j'ai activé le fichier de réveil pour le récepteur Logitech Unifying (proc/acpi/wakeup). Il a en effet réveillé l'ordinateur portable lorsque j'ai utilisé le clavier. Le problème était que l'ordinateur portable s'est réveillé en cinq minutes environ sans aucune intervention de ma part. Aucune activité du clavier ou quoi que ce soit d'autre. Deuxièmement, j'ai essayé le correctif décrit à l'étape Comment puis-je obtenir un clavier USB sans fil pour sortir Ubuntu 13.10 de la suspension? Même problème que le premier - l'ordinateur portable se réveille à des moments imprévisibles, apparemment seul.

Lorsque je regarde des périphériques utilisant lsinput, je peux voir le clavier Logitech. Son adresse physique est usb-0000: 00: 14.0-3.1.1: 1. Quand je regarde proc/acpi/wakeup, je vois pci: 0000: 00: 14.0. Il n'y a pas d'extension 3.1.1. Si je regarde /sys/bus/usb/devices/1-3.1.1, je vois qu’il s’agit du récepteur Logitech Unifying.

Voici le résultat de cat syslog lors d'un événement wake: syslog of laptop waking up

Comment puis-je mettre tout cela ensemble pour réveiller avec l'entrée au clavier, mais pour supprimer d'autres événements de réveil?

Quelques jours plus tard, j'ai découvert ceci: "Interaction avec le contrôleur intégré C'est là que des problèmes très difficiles à diagnostiquer se produisent. Le contrôleur intégré (EC) contient un code propriétaire permettant de contrôler les périphériques." De https://wiki.ubuntu.com/Kernel/Reference/ACPITricksAndTips

Cela suffit à dire, cela semble assez difficile et est probablement spécifique à mon Lenovo.

3
KCinAZ

De: réveil à distance USB IR de Suspend

J'avais le même problème et mes clés USB n'apparaissaient pas dans/proc/acpi/wakeup. Au final, cependant, malgré les nombreuses solutions suggérant que cela était nécessaire, je n’étais pas obligé d’activer les clés USB dans ACPI.

Au lieu de cela, activer le réveil sur le port USB auquel mon périphérique IR était connecté était suffisant.

Trouvez votre identifiant d'appareil:

$ lsusb

Périphérique de bus 002 002: ID 8087: 8001 Intel Corp.
Périphérique de bus 002: ID 1d6b: 0002 concentrateur racine Linux Foundation 2.0
Périphérique de bus 001: ID2: 8087: 8009 Intel Corp.
Périphérique de bus 001: ID 1d6b: 0002 concentrateur racine Linux Foundation 2.0
Périphérique de bus 004: ID 1d6b: 0003 concentrateur racine Linux Foundation 3.0
Dispositif de bus 003: ID 13ba: 0018 Code à barres PCPlay PCP-BCG4209
Dispositif de bus 003: ID 1934: 5168 Feature Integration Technology Inc. (Fintek) Récepteur/émetteur-récepteur infrarouge grand public F71610A
Périphérique de bus 003: ID 1d6b: 0002 concentrateur racine Linux Foundation 2.0

Dans l'exemple ci-dessus, mon ID de périphérique est 5168 .

Grep/sys/bus/usb pour trouver le port sur lequel votre périphérique est branché:

$ grep 5168 /sys/bus/usb/devices/*/idProduct  

/ sys/bus/usb/devices/3-13/idProduct: 5168

Cela indique que mon appareil est branché sur bus3, port 13.

Confirmez que le port est correct:

$lsusb -t

/: Bus 04.Port 1: Dev 1, Classe = root_hub, Pilote = xhci_hcd/6p, 5000M
/: Bus 03.Port 1: Dev 1, Classe = root_hub, Pilote = xhci_hcd/14p, 480M
| __ Port 13: Dev 2, Si 0, Classe = Classe spécifique au fournisseur, Pilote = mceusb, 12M

| __ Port 14: Dev 3, Si 0, Classe = Périphérique d'interface humaine, Pilote = usbhid, 1,5 M
| __ Port 14: Dev 3, Si 1, Classe = Périphérique d'interface humaine, Pilote = usbhid, 1,5 M
/: Bus 02.Port 1: Dev 1, Classe = root_hub, Pilote = ehci-pci/2p, 480M | __ Port 1: Dev 2, Si 0, Class = Hub, Pilote = hub/8p, 480M
/: Bus 01.Port 1: Dev 1, Classe = root_hub, Pilote = ehci-pci/2p, 480M
| __ Port 1: Dev 2, Si 0, Classe = Hub, Pilote = Hub/6p, 480M

Le bus 13, port 13, correspond au bus/port renvoyé par grep (3-13)

Vérifiez si le réveil est activé:

$ cat /sys/bus/usb/devices/3-13/power/wakeup  

désactivé

Activer le réveil sur le port:

$ Sudo sh -c 'echo "enabled" > /sys/bus/usb/devices/3-13/power/wakeup'

Vérifiez si le réveil est activé:

$ cat /sys/bus/usb/devices/3-13/power/wakeup  

activée

Testez votre appareil, cela réveille-t-il le système?

Rendre ce changement persistant lors des redémarrages:

$ Sudo nano /etc/rc.local

Ajoutez les lignes suivantes après les commentaires et avant 'exit 0'

# Enable Wake on IR for USB bus 3 port 13.  
echo enabled > /sys/bus/usb/devices/3-13/power/wakeup

Maintenant, réveillez-vous avec bonheur votre PC depuis votre périphérique USB.

Limitations
L’un des problèmes de cette approche est que, si le périphérique USB est branché sur les modifications apportées au port USB, l’activation de ce port n’aide en rien.

This post possède un moyen d'activer tout port IR basé sur le périphérique branché dessus à l'aide d'une règle Udev.

Références
Kodi, MCE Remote et Ubunt
Wake de suspendre avec le clavier ou la souris
Activation des périphériques IR avec une règle Udev


Réponse originale ci-dessous

Cette question a trois réponses qui peuvent fonctionner pour vous: Réveillez-vous en suspendant en utilisant un clavier ou une souris USB sans fil (pour tout Distro Linux)


Réponse 1 (15 votes positifs)

frappé dans le terminal:

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

Le résultat, pour moi, a été de découvrir que tous les usb étaient désactivés. Alors maintenant, tapez:

1.

Sudo su

nous avons maintenant des privillages de racine.

2.J'ai 8 ports USB ( vous le faites pour autant de ports USB que vous 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. Désormais, vous pouvez vous réveiller à partir de n’importe quel clavier et souris USB filaires ou câblés.

Donc, la raison pour laquelle nous devons tous les activer, c'est parce que dans l'étape suivante, nous écrirons ceci dans rc.local pour exécuter la commande après chaque redémarrage, et après le redémarrage de certaines distributions linux (peut-être toutes) changeront les ports usb. Nous n'avons pas à nous soucier de tout ce qui ne va pas en les activant tous, puisque Linux est en suspension ou en veille prolongée, il ne peut pas utiliser le wifi pour télécharger quoi que ce soit, il ne le fera pas. réveillez-vous sans nous réveiller exprès.

L'étape suivante:

3.

Sudo nano /etc/rc.local

et nous collons tout de l’étape 2. à cet endroit (avant la sortie 0, bien sûr).

C'est tout. Désormais, nous pouvons utiliser notre souris et notre port USB sans fil pour sortir 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.


Réponse 2 (7 votes positifs)

En plus de mon guide ci-dessus, je souhaite ajouter ces informations, car j’ai récemment découvert que certains périphériques USB sans fil après leur réveil en veille étaient réactivés. 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 suivi les instructions ci-dessus et votre ordinateur s'est réveillé avec succès, mais plus tard dans la journée, soudainement, il ne s'est pas réveillé.

Solution:

Ouvrez un terminal et faites:

lsusb

Sur les informations d'identification de votre clavier, les 4 premiers chiffres correspondent à l'identifiant du fournisseur et les 4 prochains chiffres représentent l'identifiant du produit (voir capture d'écran) enter image description here

Ensuite faire:

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

Où "réveil" entrez votre nom désiré du script. Le nombre 10 est la priorité au cas où vous auriez beaucoup d'autres règles udev, plus le nombre de "règles" exécutées avant les autres sera bas.

Copier coller ceci et remplacer l'ID de fournisseur et l'ID de produit par votre propre ID de fournisseur de clavier sans fil et l'ID de 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 + O sauver , Ctrl + X pour sortir et redémarrer.


Réponse 3

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 effectuant un piping dmesg à travers grep plusieurs fois, puis egrep une fois, et enfin en utilisant tail pour s'assurer qu'il s'agit bien de l'entrée la plus récente.

En utilisant cette méthode, vous ne devez pas activer le réveil sur TOUS ports USB.

Je mets le texte suivant 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. Il suffit de remplacer le nom de par 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 après la suspension. J'ai donc dû placer un fichier de script dans/lib/systemd/system-sleep /. Créez-le, définissez-le comme exécutable globalement et attribuez-lui un nom commençant par un nombre à deux chiffres compris entre 00 et 99. Mon script est le suivant, encore une fois substite 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 expliquer, l'instruction 'post' sleep si ne fonctionne que tous les autres réveils ... mais le 'pré' sleep ' si déclaration semble fonctionner à chaque fois.

1
WinEunuuchs2Unix