Cambiar el comportamiento de la pantalla en blanco de la consola de Linux

38

¿Cómo cambio el comportamiento de supresión de pantalla en terminales virtuales Linux?

Por ejemplo, si cambio a un VT desde X, inicio sesión y dejo el sistema solo durante 5 minutos más o menos, la pantalla se pondrá en blanco como un protector de pantalla. Vuelve con cualquier pulsación de tecla, como un protector de pantalla.

Principalmente solo quiero cambiar el tiempo de espera, pero también estoy interesado en otras configuraciones.

Si ayuda, uno de mis sistemas está ejecutando Ubuntu 10.04 con los controladores de gráficos de stock. fbsetmuestra la consola usando el radeondrmfbdispositivo framebuffer.

quijote curandero
fuente
2
Espero que esto te ayude, encontré esto cuando me encontré con la misma pregunta askubuntu.com/questions/138918/…

Respuestas:

42

settermLa respuesta de @ whitequark es una herramienta de espacio de usuario razonable, pero no es toda la historia.

El comportamiento predeterminado de supresión de la consola se integra en el núcleo en el momento de la compilación. Es configurable en el momento del arranque con el parámetro consolaleblank = , o en el espacio de usuario con setterm. De la documentación del kernel ( kernel-parameter.txt ):

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

Estas son las opciones, sus valores predeterminados en mi sistema Ubuntu y sus esferas de influencia:

  • setterm -blank [0-60]; siempre informa 0 cuando se le consulta; eficaz cuando se ejecuta en un VT real; afecta a todos los TTY reales; no es efectivo cuando se ejecuta en sesiones de pantalla en un VT.
  • setterm -powerdown [0-60]; siempre informa "3]" (??); no parece tener ningún efecto Los núcleos de Ubuntu no habilitan APM_DISPLAY_BLANK , y esto podría estar relacionado.
  • consoleblank=N; el valor predeterminado es 600 (10 minutos); afecta a todos los VT reales; afecta las sesiones de pantalla en un VT; No hay forma de configurar mientras se ejecuta.

Entonces, mis opciones para cambiar el valor predeterminado son una de las siguientes:

  1. Agregue setterm -blank X(X en minutos, 0 para deshabilitar) a un archivo de inicio de shell como .bashrc .
  2. Añadir setterm -blank Xa /etc/rc.local .
  3. Agregue consoleblank=Y(Y en segundos, 0 para deshabilitar) a la línea de comando del kernel agregándolo a las listas de parámetros en / etc / default / grub , ya sea GRUB_CMDLINE_LINUX o GRUB_CMDLINE_LINUX_DEFAULT . (No te olvides de hacerlo update-grub)
quijote curandero
fuente
44
Me gustaría señalar que setterm -blank Xno funcionó para mí desde tmux , pero funcionó perfectamente cuando salí de tmux antes de ejecutar el comando.
Cody Hess
1
Si está utilizando grub2 como gestor de arranque, puede agregar este parámetro del kernel en / etc / default / grub GRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0"y luego actualizar su configuración de grub con grub[2]-mkconfig -o /boot/grub/grub.cfg.
user3132194
3]porque setterm -powerdownes solo la mitad de verdad: setterm -powerdown 3 | hexdump -cretornos 033 [ 1 4 ; 3 ]. No estoy seguro de qué debería interpretar esta secuencia de escape ...
Daniel Alder
1
Dependiendo de su distribución y de dónde desea que el cambio surta efecto, algunas de estas opciones pueden no funcionar. Encontré que setterm en rc.local funciona muy bien para RHEL 5 y 6, pero no para 7.
David C.
9

Intente setterm -blank $minutes(o pase 0 para deshabilitar); -powersaveLa opción también puede estar relacionada. settermtambién tiene muchas otras opciones útiles.

Si desea establecer estos atributos en el inicio del sistema, considere escribir un initscript. Esto es solo un script colocado en el /etc/init.ddirectorio. Que se llame 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

Luego hazlo ejecutable:

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

Y finalmente, cree los enlaces simbólicos /etc/rcX.d (a la manera de Debian):

# update-rc.d setterm defaults

(Si se cansa de ese comportamiento, hágalo # update-rc.d -f setterm remove. Tenga en cuenta que ese -fdebe ser el primer argumento).

Whitequark
fuente
hrm. parece útil para sobre la marcha, aunque parece que en mi sistema Ubuntu de prueba es en realidad la -powerdownconfiguración que está vigente. ¿Qué pasa con la configuración de un arranque en todo el sistema predeterminado? ¿está funcionando setterm -blank Xo setterm -powerdown Yen /etc/rc.local (o ~ / .bashrc ) razonable?
quack quijote
1
Sí, pero solo si rc.localrealmente funciona. (La upstartmigración reciente arruinó algunas cosas, aparentemente existe y funciona en mi sistema). De lo contrario, debe crear un initscript. Eso es fácil: en nuestro caso, debe inicializar todo cuando se pasa startcomo primer argumento, y no hacer nada diferente. Lo describiré en mi respuesta.
whitequark
el comando setterm -blank X >/dev/ttyNno parece funcionar, así que no creo que el concepto initscript funcione. encontré un parámetro de tiempo de arranque e investigé un poco más. Parece que estoy equivocado acerca de -powerdowny -powersave; no lo he probado completamente, pero esos no funcionan en mi sistema. setterm -blank Xfunciona, solo desde un VT real, y afecta a todos los VT, por lo que es razonable ejecutarlo una vez a través de /etc/rc.local . (Upstart no quita rc.local , solo las cosas /etc/rcX.d .)
quack quixote
1
Ejem. Parece que settermemite secuencias de escape stdout, pero comprueba el tipo de TTY con stdin: Acabo de comprobar y setterm ... >/dev/ttyN </dev/ttyNfunciona según lo previsto.
whitequark
eso tiene sentido, y funciona (desde un TTY real), pero ¿cuál es el punto de usar esa sintaxis? (1) todavía no funciona desde la pantalla (o potencialmente otros PTY), que es donde especificar a / dev / ttyN sería útil; (2) establecer un VT afecta a todos, por lo que no es necesario el bucle initscript.
quack quijote
3

Si alguien está buscando otra posible solución para Debian (posiblemente no Ubuntu):

En /etc/kbd/config, busque una configuración llamada "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

Cámbielo a 0, esto lo deshabilitará:

BLANK_TIME=0

Probado en Debian 6 y 7.

básico6
fuente
2

Si está ejecutando un Ubuntu más nuevo que usa upstart, puede usar:

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

Una pequeña explicación de lo que está pasando aquí:

Las versiones más nuevas de Ubuntu usan el arranque para el inicio del sistema. Con el arranque, las consolas de Linux se configuran con archivos de configuración almacenados en / etc / init. El comando anterior comienza iterando sobre cada uno de esos archivos de configuración:

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

El nombre del archivo de configuración inicial de tty en $ file se usa para construir el nombre del dispositivo tty:

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

Se construye un comando "post-start" inicial que ejecuta "setterm" para deshabilitar la supresión de pantalla y el ahorro de energía después de que se ha iniciado el tty:

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

Y finalmente, ese comando se agrega al archivo de configuración inicial:

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

En mis sistemas (varias versiones de RedHat Enterprise Linux), descubrí que se necesitan diferentes enfoques.

Para mis sistemas RHEL 5 y 6, puedo agregar la línea

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

a /etc/rc.local. Esto desactiva la pantalla en blanco de la consola al iniciar el sistema.

Descubrí que esto no funciona en los sistemas RHEL 7. En RHEL7, ejecutar setterm desde rc.local hace que se genere un error:

setterm: $TERM is not defined.

El comando funciona desde un shell interactivo, donde se define $ TERM (como linux). Si fuerzo a setterm a usarlo:

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

Entonces me sale un error diferente:

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

Aunque el mismo comando funciona bien desde una sesión interactiva. Establecer el consoleblankparámetro del núcleo funcionó.

En RHEL7, edite /etc/default/gruby agregue consoleblank=0al GRUB_CMDLINE_LINUXparámetro. Luego corre grub2-mkconfig -o /boot/grub2/grub.cfgy reinicia.

No he intentado configurar consoleblanken RHEL5 o 6.

David C.
fuente
2
RHEL7 usa systemd; rc.local no está conectado a un terminal de forma predeterminada. Creo que se puede añadir </dev/tty1 >/dev/tty1o algo para que funcione
sourcejedi
1

Consola Linux Secuencias CSI privadas

Para establecer el sleep mode/screensavertiempo de entrada (donde X es un tiempo en minutos; 0 = nunca):

(desde la consola en serie)

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

o (desde la consola framebuffer)

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

o para configurarlo en cada arranque, use /etc/inittab:

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

refs:

yurenchen
fuente
0

Agregar gnome-screensaver-command --exita mi .profilearchivo solucionó este problema para mí en Debian Linux (Wheezy).

Pensé que agregaría esto para ayudar a otros que se están sacando el pelo tratando de dejar de dejar la pantalla en blanco.

Una casilla de verificación titulada "Atenuar pantalla para ahorrar energía" funciona correctamente. Incluso sin marcar, TODAVÍA dejará en blanco la pantalla de acuerdo con el tiempo de inactividad seleccionado.

ACTUALIZACIÓN: en realidad necesitaba sleep 30 && /usr/bin/gnome-screensaver-command --exit &que funcionara correctamente. El protector de pantalla de GNOME parece comenzar mucho después de que se haya procesado .profile.

mcchinsy
fuente
3
Se trata de la supresión de la pantalla de la consola, no de los protectores de pantalla de Gnome.
basic6