Changer le comportement de suppression d'écran de la console Linux

38

Comment changer le comportement de suppression d'écran sur les terminaux virtuels Linux?

Par exemple, si je passe à un VT à partir de X, que je me connecte et que je laisse le système tranquille pendant environ 5 minutes, l’écran s’affichera comme un économiseur d’écran. Il revient avec n'importe quelle touche, comme un économiseur d'écran.

La plupart du temps, je veux juste changer le délai d'attente, mais je suis également intéressé par d'autres paramètres.

Si cela peut aider, l’un de mes systèmes exécute Ubuntu 10.04 avec les pilotes graphiques courants. fbsetmontre la console en utilisant le radeondrmfbframebuffer.

Quack Quack
la source
2
J'espère que cela vous aide. J'ai trouvé ceci lorsque j'ai rencontré la même question. Askubuntu.com/questions/138918/…

Réponses:

42

settermLa réponse de @ whitequark est un outil d'espace utilisateur raisonnable, mais ce n'est pas toute l'histoire.

Le comportement de suppression de la console par défaut est intégré au noyau lors de la compilation. Il est configurable au démarrage avec le paramètre consoleblank = , ou en espace utilisateur avec setterm. Dans la documentation du noyau ( kernel-parameters.txt ):

consoleblank=  [KNL] The console blank (screen saver) timeout in
               seconds. Defaults to 10*60 = 10mins. A value of 0
               disables the blank timer.

Voici les options, leurs valeurs par défaut sur mon système Ubuntu et leurs sphères d'influence:

  • setterm -blank [0-60]; indique toujours 0 lorsqu'il est interrogé; efficace lorsqu'il est exécuté sur un vrai VT; affecte tous les vrais ATS; non efficace lorsqu'il est exécuté dans des sessions d'écran sur un VT.
  • setterm -powerdown [0-60]; rapporte toujours "3]" (??); ne semble pas avoir d'effet. Les noyaux Ubuntu n'activent pas APM_DISPLAY_BLANK , ce qui pourrait être lié.
  • consoleblank=N; par défaut à 600 (10 minutes); affecte tous les vrais TP; affecte les sessions d'écran dans un VT; aucun moyen de définir en cours d'exécution.

Donc, mes options pour changer la valeur par défaut sont l’une des suivantes:

  1. Ajoutez setterm -blank X(X en quelques minutes, 0 à désactiver) à un fichier d'initialisation de shell tel que .bashrc .
  2. Ajoutez setterm -blank Xà /etc/rc.local .
  3. Ajoutez consoleblank=Y(Y en secondes, 0 à désactiver) à la ligne de commande du noyau en l'ajoutant aux listes de paramètres dans / etc / default / grub , soit GRUB_CMDLINE_LINUX ou GRUB_CMDLINE_LINUX_DEFAULT . (N'oubliez pas de update-grub.)
Quack Quack
la source
4
J'aimerais noter que setterm -blank Xcela ne fonctionnait pas pour moi à partir de tmux , mais fonctionnait parfaitement lorsque je quittais tmux avant d'exécuter la commande.
Cody Hess
1
Si vous utilisez grub2 comme chargeur de démarrage, vous pouvez ajouter ce paramètre de noyau dans / etc / default / grub GRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0", puis mettre à jour votre configuration grub avec grub[2]-mkconfig -o /boot/grub/grub.cfg.
user3132194
3]car setterm -powerdownn'est que la moitié vraie: setterm -powerdown 3 | hexdump -crevient 033 [ 1 4 ; 3 ]. Vous ne savez pas ce qui doit interpréter cette séquence d'échappement ...
Daniel Alder
1
Selon votre distribution et l'endroit où vous souhaitez que les modifications prennent effet, certaines de ces options risquent de ne pas fonctionner. J'ai trouvé que setterm dans rc.local fonctionne très bien pour RHEL 5 et 6, mais pas 7.
David C.
9

Essayez setterm -blank $minutes(ou passez 0 pour désactiver); -powersaveoption peut également être liée. setterma beaucoup d'autres options utiles, aussi.

Si vous souhaitez définir ces attributs au démarrage du système, envisagez d'écrire un script initscript. Ceci est juste un script placé dans le /etc/init.drépertoire. Qu'on l'appelle setterm:

#!/bin/sh
[ "$1" == "start" ] || exit 0 # only initialize everything when called as /etc/init.d/setterm start
for term in /dev/tty[0-9]*; do # select all ttyNN, but skip ttyS*
    setterm -blank 0 >$term <$term
    setterm -powersave off >$term <$term
done

Puis rendez-le exécutable:

# chmod +x /etc/init.d/setterm

Et enfin, créez les liens symboliques /etc/rcX.d (à la manière de Debian):

# update-rc.d setterm defaults

(Si vous en avez assez de ce comportement, faites-le # update-rc.d -f setterm remove. Notez que ce -fdoit être le premier argument).

Whitequark
la source
hrm semble utile pour la navigation à la volée, bien que sur mon système de test Ubuntu, il s’agisse du -powerdownparamètre en vigueur. Qu'en est-il de définir une valeur par défaut au démarrage, à l'échelle du système? est en cours d'exécution setterm -blank Xou setterm -powerdown Ydans /etc/rc.local (ou ~ / .bashrc ) raisonnable?
Quack Quotote
1
Oui, mais seulement si cela rc.localfonctionne réellement. (La upstartmigration récente a bousillé certaines choses, car elle existe apparemment et fonctionne sur mon système.) Sinon, vous devez créer un script initscript. C'est simple: dans notre cas, il doit tout initialiser lorsqu'il est passé en starttant que premier argument et ne rien faire sinon. Je vais décrire cela dans ma réponse.
Whitequark
la commande setterm -blank X >/dev/ttyNne semble pas fonctionner, donc je ne pense pas que le concept initscript fonctionnera. couru à travers un paramètre boottime tho et fait quelques recherches plus. je semble me tromper à propos de -powerdownet -powersave; n'ont pas été complètement testés mais ceux-ci ne fonctionnent pas sur mon système. setterm -blank Xfonctionne uniquement à partir d’un VT réel et affecte tous les VT. Il est donc raisonnable d’ exécuter une fois via /etc/rc.local . (Upstart n'enlève pas rc.local , juste le truc /etc/rcX.d .)
Quack Quichotte
1
Ahem. On dirait qu'il settermémet des séquences d'échappement stdout, mais vérifie le type de TTY avec stdin: Je viens de vérifier et setterm ... >/dev/ttyN </dev/ttyNfonctionne comme prévu.
Whitequark
cela a du sens, et ça marche (à partir d’un vrai ATS), mais à quoi sert-il d’utiliser cette syntaxe? (1) ne fonctionne toujours pas depuis l’ écran (ou potentiellement d’autres PTY), c’est-à-dire où il serait utile de spécifier un fichier / dev / ttyN; (2) la définition d'un VT affecte tout, donc pas besoin de la boucle initscript.
Quack Quotote
3

Si quelqu'un recherche une autre solution possible pour Debian (éventuellement pas Ubuntu):

Dans /etc/kbd/config, recherchez un paramètre appelé "BLANK_TIME":

# screen blanking timeout.  monitor remains on, but the screen is cleared to
# range: 0-60 min (0==never)  kernels I've looked at default to 10 minutes.
# (see linux/drivers/char/console.c)
BLANK_TIME=30

Changez le en 0, cela le désactivera:

BLANK_TIME=0

Testé sur Debian 6 et 7.

basic6
la source
2

Si vous utilisez une Ubuntu plus récente utilisant upstart, vous pouvez utiliser:

for file in /etc/init/tty*.conf; do tty="/dev/`basename $file .conf`"; echo "post-start exec setterm -blank 0 -powersave off >$tty <$tty" | sudo tee -a "$file"; done

Une petite explication de ce qui se passe ici:

Les versions les plus récentes d'Ubuntu utilisent la méthode upstart pour le démarrage du système. Avec Upstart, les consoles Linux sont configurées avec des fichiers de configuration stockés dans / etc / init. La commande ci-dessus commence par parcourir chacun de ces fichiers de configuration:

for file in /etc/init/tty*.conf;

Le nom du fichier de configuration upstart du tty dans $ file est utilisé pour construire le nom du périphérique tty:

tty="/dev/`basename $file .conf`";

Une commande "post-start" upstart est créée, qui exécute "setterm" pour désactiver le masquage d'écran et l'économie d'énergie après le démarrage du terminal:

echo "post-start exec setterm -blank 0 -powersave off >$tty <$tty"

Et enfin, cette commande est ajoutée au fichier de configuration upstart:

| sudo tee -a "$file";
Chris Pick
la source
2

Sur mes systèmes (différentes versions de RedHat Enterprise Linux), j'ai constaté que différentes approches sont nécessaires.

Pour mes systèmes RHEL 5 et 6, je peux ajouter la ligne

/bin/setterm -blank 0 -powerdown 0 -powersave off

à /etc/rc.local. Ceci désactive la suppression de l'écran de la console au démarrage du système.

J'ai trouvé que cela ne fonctionnait pas sur les systèmes RHEL 7. Sous RHEL7, l’exécution de setterm à partir de rc.local entraîne la génération d’une erreur:

setterm: $TERM is not defined.

La commande fonctionne à partir d'un shell interactif, où $ TERM est défini (en tant que linux). Si je force setterm à l'utiliser:

/bin/setterm -term linux -blank 0 -powerdown 0 -powersave off

Ensuite, je reçois une erreur différente:

setterm: cannot (un)set powersave mode: Inappropriate ioctl for device

Même si la même commande fonctionne correctement à partir d'une session interactive. La définition du consoleblankparamètre du noyau a fonctionné.

Sur RHEL7, modifiez /etc/default/grubet ajoutez consoleblank=0le GRUB_CMDLINE_LINUXparamètre. Puis lancez grub2-mkconfig -o /boot/grub2/grub.cfget redémarrez.

Je n'ai pas essayé de régler consoleblanksur RHEL5 ou 6.

David C.
la source
2
RHEL7 utilise systemd; rc.local n'est pas connecté à un terminal par défaut. Je pense que vous pouvez ajouter </dev/tty1 >/dev/tty1quelque chose ou faire en sorte que cela fonctionne
sourcejedi
1

Séquences CSI privées de la console Linux

Pour définir l' sleep mode/screensaverheure d'entrée (où X est une heure en minute; 0 = jamais):

(depuis la console série)

echo -e '\033[9;X]' > /dev/tty1    

ou (depuis la console framebuffer)

echo -e '\033[9;X]'    

ou pour le définir à chaque démarrage, utilisez /etc/inittab:

tty1::sysinit:echo -e '\033[9;X]'

réfs:

Yurenchen
la source
0

L'ajout gnome-screensaver-command --exità mon .profilefichier a résolu ce problème pour moi sous Debian Linux (Wheezy).

Je pensais que j'ajouterais ceci pour aider les autres qui se tirent les cheveux en essayant d'arrêter le blanking.

Une case à cocher intitulée "Dim écran pour économiser de l'énergie" ne fonctionne pas correctement. Même décoché, il restera TOUJOURS vide l’écran en fonction du temps d’inactivité sélectionné.

MISE À JOUR: J'avais réellement besoin sleep 30 && /usr/bin/gnome-screensaver-command --exit &de le faire fonctionner correctement. L'économiseur d'écran GNOME semble démarrer longtemps après le traitement du fichier .profile.

Mcchinsy
la source
3
Il s’agit du masquage de l’écran de la console et non des écrans de veille Gnome.
basic6