web-dev-qa-db-fra.com

Pourquoi utilisons-nous la commande sleep avant xset dpms?

J'ai la ligne suivante pour éteindre l'écran de mon ordinateur portable:

sleep 1 && xset dpms force standby

sleep 1: Met le fil en veille pendant 1 seconde.

xset dpms force standby: From man , force le drapeau dpms à se mettre en veille.

Lorsque j'omets la commande sleep 1, la commande xset met l'ordinateur en mode veille pendant 1 seconde, puis reprend automatiquement le fonctionnement normal. Mais lorsqu'il est combiné à la commande sleep 1, il met le PC en mode veille indéfiniment, jusqu'à ce qu'une entrée utilisateur soit détectée.

Pouvez-vous expliquer la relation entre ces deux commandes et pourquoi cela fonctionne de cette façon?

1
zindarod

Lorsque vous exécutez votre commande, deux événements se produisent, "KeyPress" et "KeyRelease".

Donc, lorsque vous exécutez cette commande en appuyant sur Enter bouton.

xset dpms force standby

Tout d'abord, un "KeyPress" se produit, la commande sera immédiatement exécutée et mettra le moniteur en veille, lorsque vous relâcherez le Enter clé, alors "KeyRelease" se produit et il s’agit d’une activité de l’utilisateur, donc le moniteur revient au travail.

Si vous faites le travail très vite (frapper le Enter et en le réalisant avant que la commande ne soit exécutée), votre moniteur reste dans l'état "veille".


Pour tester cela, installez le paquet x11-xserver-utils.

Sudo apt install x11-xserver-utils

puis exécutez xev.

Maintenant frappé le Enter pour voir ce qui se passe; vous devriez voir quelque chose plus ou moins comme:

KeyPress event, serial 48, synthetic NO, window 0x2600001,
...

KeyRelease event, serial 48, synthetic NO, window 0x2600001,
...

Nous utilisons donc sleep pour nous assurer que ces deux événements se produisent avant que la commande ne soit exécutée.

3
Ravexina

Je pense que cela a probablement à voir avec ce que le système considère comme une "activité utilisateur".

Si le système détecte une activité au clavier, elle sort du mode veille. Le fait que vous appuyiez sur entrée pour envoyer la commande de mise en attente forcée compte comme une activité "courante" et le relâche immédiatement.

veille 1 s'assure que le clavier n'a pas enregistré d'activité pendant 1 seconde avant que la commande de veille ne soit envoyée. Le mode veille passe donc en avance.

0
teknopaul