Modifica il comportamento di cancellazione dello schermo della console Linux


38

Come posso modificare il comportamento di oscuramento dello schermo sui terminali virtuali Linux?

Ad esempio, se passo a un VT da X, eseguo il login e lascio il sistema da solo per circa 5 minuti, lo schermo si oscura come uno screensaver. Torna con qualsiasi pressione dei tasti, come uno screensaver.

Principalmente voglio solo cambiare il timeout, ma sono anche interessato ad altre impostazioni.

Se aiuta, uno dei miei sistemi esegue Ubuntu 10.04 con i driver grafici stock. fbsetmostra la console utilizzando il radeondrmfbdispositivo framebuffer.


2
Spero che questo ti aiuti, ho trovato questo quando ho incontrato la stessa domanda askubuntu.com/questions/138918/…

Risposte:


42

settermdalla risposta di @ whitequark è uno strumento di spazio utente ragionevole, ma non è l'intera storia.

Il comportamento di cancellazione della console predefinito viene inserito nel kernel al momento della compilazione. È configurabile al momento dell'avvio con il paramater consoleblank = , o nello spazio utente con setterm. Dalla documentazione 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.

Ecco le opzioni, i loro valori predefiniti sul mio sistema Ubuntu e le loro sfere di influenza:

  • setterm -blank [0-60]; riporta sempre 0 quando richiesto; efficace quando eseguito su un VT reale; influenza tutti i TTY reali; non efficace quando eseguito nelle sessioni dello schermo su un VT.
  • setterm -powerdown [0-60]; riporta sempre "3]" (??); non sembra avere alcun effetto. I kernel Ubuntu non abilitano APM_DISPLAY_BLANK e questo potrebbe essere correlato.
  • consoleblank=N; il valore predefinito è 600 (10 minuti); influenza tutti i VT reali; influenza le sessioni dello schermo in un VT; nessun modo di impostare durante la corsa.

Quindi le mie opzioni per modificare il valore predefinito sono una delle seguenti:

  1. Aggiungi setterm -blank X(X in minuti, 0 per disabilitare) a un file init shell come .bashrc .
  2. Aggiungi setterm -blank Xa /etc/rc.local .
  3. Aggiungi consoleblank=Y(Y in secondi, 0 per disabilitare) alla riga di comando del kernel aggiungendolo agli elenchi dei parametri in / etc / default / grub , GRUB_CMDLINE_LINUX o GRUB_CMDLINE_LINUX_DEFAULT . (Non dimenticare di update-grub.)

4
Vorrei notare che setterm -blank Xnon ha funzionato per me all'interno di tmux , ma ha funzionato perfettamente quando sono uscito da tmux prima di eseguire il comando.
Cody Hess il

1
Se stai usando grub2 come bootloader, potresti aggiungere questo parametro del kernel in / etc / default / grub GRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0"e quindi aggiornare la tua configurazione di grub grub[2]-mkconfig -o /boot/grub/grub.cfg.
user3132194,

3]perché setterm -powerdownè solo la metà vera: setterm -powerdown 3 | hexdump -critorna 033 [ 1 4 ; 3 ]. Non sono sicuro di cosa debba interpretare questa sequenza di fuga ...
Daniel Alder,

1
A seconda della distribuzione e del punto in cui si desidera rendere effettiva la modifica, alcune di queste opzioni potrebbero non funzionare. Ho scoperto che setterm in rc.local funziona alla grande per RHEL 5 e 6, ma non 7.
David C.

9

Prova setterm -blank $minutes(o passa 0 per disabilitare); -powersavel'opzione può anche essere correlata. settermha anche molte altre utili opzioni.

Se si desidera impostare questi attributi all'avvio del sistema, prendere in considerazione la scrittura di un initscript. Questo è solo uno script inserito nella /etc/init.ddirectory. Lascia che sia chiamato 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

Quindi renderlo eseguibile:

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

E infine, creare i symlink /etc/rcX.d (il modo Debian):

# update-rc.d setterm defaults

(Se ti stanchi di quel comportamento, fallo # update-rc.d -f setterm remove. Nota che -fdeve essere il primo argomento).


hrm. sembra utile al volo, anche se sul mio test il sistema Ubuntu è in realtà l' -powerdownimpostazione attiva. per quanto riguarda l'impostazione di un valore predefinito all'avvio, a livello di sistema? è in esecuzione setterm -blank Xo setterm -powerdown Yin /etc/rc.local (o ~ / .bashrc ) ragionevole?
Quack Quixote

1
Sì, ma solo se rc.localfunziona davvero. (La recente upstartmigrazione ha rovinato alcune cose, apparentemente esiste e funziona sul mio sistema.) Altrimenti dovresti creare un initscript. È facile: nel nostro caso, deve inizializzare tutto quando viene passato startcome primo argomento e non fare diversamente. Lo descriverò nella mia risposta.
whitequark,

il comando setterm -blank X >/dev/ttyNnon sembra funzionare, quindi non credo che il concetto di initscript funzionerà. mi sono imbattuto in un parametro boottime e ho fatto qualche ricerca in più. mi sembra di sbagliare su -powerdowne -powersave; non sono stati completamente testati ma quelli non funzionano sul mio sistema. setterm -blank Xfunziona, solo da un VT reale, e influenza tutti i VT, quindi è ragionevole eseguirlo una volta tramite /etc/rc.local . (Upstart non toglie rc.local , solo il /etc/rcX.d roba.)
quack quixote

1
Ahem. Sembra che settermemetta sequenze di escape stdout, ma controlla il tipo TTY con stdin: Ho appena controllato e setterm ... >/dev/ttyN </dev/ttyNfunziona come previsto.
whitequark,

ha senso, e funziona (da un vero TTY), ma che senso ha usare quella sintassi? (1) continua a non funzionare all'interno dello schermo (o potenzialmente altri PTY), dove è utile specificare un / dev / ttyN; (2) l'impostazione di un VT influisce su tutti, quindi non è necessario il ciclo initscript.
Quack Quixote,

3

Se qualcuno è alla ricerca di un'altra possibile soluzione per Debian (forse non Ubuntu):

In /etc/kbd/config, cerca un'impostazione denominata "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

Modificalo su 0, questo lo disabiliterà:

BLANK_TIME=0

Testato su Debian 6 e 7.


2

Se stai eseguendo un Ubuntu più recente che utilizza upstart, puoi utilizzare:

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 piccola spiegazione di ciò che sta succedendo qui:

Le versioni più recenti di Ubuntu utilizzano upstart per l'avvio del sistema. Con upstart, le console Linux sono installate con file di configurazione memorizzati in / etc / init. Il comando sopra inizia ripetendo su ciascuno di quei file di configurazione:

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

Il nome del file di configurazione upstart di tty in $ file viene utilizzato per creare il nome del dispositivo tty:

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

Viene creato un comando "post-avvio" che esegue "setterm" per disabilitare la cancellazione dello schermo e il risparmio energetico dopo l'avvio di tty:

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

E infine quel comando viene aggiunto al file di configurazione upstart:

| sudo tee -a "$file";

2

Sui miei sistemi (varie versioni di RedHat Enterprise Linux), ho scoperto che sono necessari approcci diversi.

Per i miei sistemi RHEL 5 e 6, sono in grado di aggiungere la linea

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

a /etc/rc.local. Ciò disabilita la cancellazione dello schermo della console all'avvio del sistema.

Ho scoperto che questo non funziona sui sistemi RHEL 7. Su RHEL7, l'esecuzione di setterm da rc.local provoca la generazione di un errore:

setterm: $TERM is not defined.

Il comando funziona da una shell interattiva, in cui è definito $ TERM (as linux). Se costringo setterm a usarlo:

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

Quindi ricevo un errore diverso:

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

Anche se lo stesso comando funziona bene da una sessione interattiva. L'impostazione del consoleblankparametro del kernel ha funzionato.

Su RHEL7, modifica /etc/default/grube aggiungi consoleblank=0al GRUB_CMDLINE_LINUXparametro. Quindi eseguire grub2-mkconfig -o /boot/grub2/grub.cfge riavviare.

Non ho provato a impostare consoleblanksu RHEL5 o 6.


2
RHEL7 utilizza systemd; rc.local non è collegato a un terminale per impostazione predefinita. Penso che tu possa aggiungere </dev/tty1 >/dev/tty1o qualcosa per farlo funzionare
sourcejedi

1

Sequenze CSI private della console Linux

Per impostare l' sleep mode/screensaverora di inserimento (dove X è un tempo in minuti; 0 = mai):

(dalla console seriale)

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

o (dalla console di framebuffer)

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

o per impostarlo ad ogni avvio, utilizzare /etc/inittab:

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

arbitri:


0

L'aggiunta gnome-screensaver-command --exital mio .profilefile ha risolto questo problema per me su Debian Linux (Wheezy).

Ho pensato di aggiungere questo per aiutare gli altri che si stanno strappando i capelli cercando di smettere di oscurare lo schermo.

Una casella di controllo denominata "Schermo scuro per risparmiare energia" non funziona correttamente. Anche se deselezionato, ANCORA si oscura lo schermo in base al tempo di inattività selezionato.

AGGIORNAMENTO: In realtà avevo bisogno sleep 30 && /usr/bin/gnome-screensaver-command --exit &di farlo funzionare correttamente. Lo screensaver GNOME sembra iniziare molto tempo dopo l'elaborazione .profile.


2
Si tratta di oscuramento dello schermo della console, non di salvaschermi di Gnome.
basic6
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.