Alterar o comportamento de apagamento da tela do console Linux

38

Como altero o comportamento de apagamento da tela nos terminais virtuais do Linux?

Por exemplo, se eu mudar para um VT a partir do X, efetue login e deixo o sistema em paz por 5 minutos ou mais, a tela ficará em branco como um protetor de tela. Ele volta com qualquer pressionamento de tecla, como um protetor de tela.

Quero apenas alterar o tempo limite, mas também estou interessado em outras configurações.

Se ajudar, um dos meus sistemas está executando o Ubuntu 10.04 com os drivers gráficos. fbsetmostra o console usando o radeondrmfbdispositivo framebuffer.

charlatão quixote
fonte
2
Espero que isso ajude você, eu encontrei isso quando eu conheci a mesma pergunta askubuntu.com/questions/138918/...

Respostas:

42

settermA resposta da @ whitequark é uma ferramenta razoável para o espaço do usuário, mas não é a história toda.

O comportamento padrão de apagamento do console é inserido no kernel no momento da compilação. É configurável no momento da inicialização com o paramater consoleblank = ou no espaço do usuário com setterm. Na documentação do kernel ( 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.

Aqui estão as opções, seus padrões no meu sistema Ubuntu e suas esferas de influência:

  • setterm -blank [0-60]; sempre informa 0 quando consultado; eficaz quando executado em um VT real; afeta todos os TTYs reais; não é eficaz quando executado em sessões de tela em um VT.
  • setterm -powerdown [0-60]; sempre relata "3]" (??); parece não ter nenhum efeito. Os kernels do Ubuntu não ativam APM_DISPLAY_BLANK , e isso pode estar relacionado.
  • consoleblank=N; o padrão é 600 (10 minutos); afeta todos os VTs reais; afeta sessões de tela em uma TV; não há como definir durante a execução.

Portanto, minhas opções para alterar o padrão são uma das seguintes:

  1. Adicione setterm -blank X(X em minutos, 0 para desativar) a um arquivo init do shell como .bashrc .
  2. Adicione setterm -blank Xao /etc/rc.local .
  3. Adicione consoleblank=Y(Y em segundos, 0 para desativar) à linha de comando do kernel, adicionando-a às listas de parâmetros em / etc / default / grub , GRUB_CMDLINE_LINUX ou GRUB_CMDLINE_LINUX_DEFAULT . (Não esqueça update-grub.)
charlatão quixote
fonte
4
Gostaria de observar que setterm -blank Xnão funcionou para mim no tmux , mas funcionou perfeitamente quando saí do tmux antes de executar o comando.
Cody Hess
11
Se você estiver usando o grub2 como um carregador de inicialização, poderá adicionar este parâmetro do kernel em / etc / default / grub GRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0"e atualizar sua configuração do grub com grub[2]-mkconfig -o /boot/grub/grub.cfg.
user3132194
3]pois setterm -powerdowné apenas a meia verdade: setterm -powerdown 3 | hexdump -cretorna 033 [ 1 4 ; 3 ]. Sem saber o que deve interpretar esta sequência de escape ...
Daniel Alder
11
Dependendo da sua distribuição e de onde você deseja que a alteração entre em vigor, algumas dessas opções podem não funcionar. Descobri que setterm em obras rc.local rode grandes para RHEL 5 e 6, mas não 7.
David C.
9

Tente setterm -blank $minutes(ou passe 0 para desativar); -powersaveA opção também pode estar relacionada. settermtambém tem muitas outras opções úteis.

Se você deseja definir esses atributos na inicialização do sistema, considere escrever um initscript. Este é apenas um script colocado no /etc/init.ddiretório Que seja chamado 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

Em seguida, torne-o executável:

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

E finalmente, crie os links simbólicos /etc/rcX.d (a maneira Debian):

# update-rc.d setterm defaults

(Se você se cansar desse comportamento, faça # update-rc.d -f setterm remove. Observe que esse -fdeve ser o primeiro argumento).

whitequark
fonte
hrm. parece útil no momento, embora pareça que no meu sistema Ubuntu de teste é realmente a -powerdownconfiguração que está em vigor. que tal definir um padrão inicializado para todo o sistema? está executando setterm -blank Xou setterm -powerdown Yno /etc/rc.local (ou ~ / .bashrc ) é razoável?
quack quixote
11
Sim, mas apenas se rc.localrealmente funcionar. (A upstartmigração recente estragou algumas coisas, pois ela aparentemente existe e funciona no meu sistema.) Caso contrário, você deve criar um initscript. Isso é fácil: no nosso caso, ele deve inicializar tudo quando passado startcomo primeiro argumento e não fazer outra coisa. Vou descrever isso na minha resposta.
whitequark
o comando setterm -blank X >/dev/ttyNparece não funcionar, então não acho que o conceito initscript funcione. deparei com um parâmetro de boothime e fiz mais algumas pesquisas. eu pareço estar errado sobre -powerdowne -powersave; não foram totalmente testados, mas eles não estão funcionando no meu sistema. setterm -blank Xfunciona, apenas a partir de um VT real, e afeta todos os VTs, portanto, executar uma vez via /etc/rc.local é razoável. (Upstart não tira rc.local , apenas o /etc/rcx.d coisas.)
quack quixote
11
Ahem. Parece que settermemite seqüências de escape ativadas stdout, mas verifica o tipo TTY com stdin: Acabei de verificar e setterm ... >/dev/ttyN </dev/ttyNfunciona como pretendido.
whitequark
isso faz sentido e funciona (de um verdadeiro TTY), mas qual é o sentido de usar essa sintaxe? (1) ainda não funciona na tela (ou possivelmente em outros PTYs), onde é útil especificar um / dev / ttyN; (2) definir um VT afeta todos, portanto, não é necessário o loop initscript.
quack quixote
3

Se alguém está procurando outra solução possível para o Debian (possivelmente não o Ubuntu):

Em /etc/kbd/config, procure uma configuração chamada "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

Altere para 0, isso irá desativá-lo:

BLANK_TIME=0

Testado no Debian 6 e 7.

basic6
fonte
2

Se você estiver executando um Ubuntu mais recente que use upstart, poderá 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

Uma pequena explicação do que está acontecendo aqui:

Versões mais recentes do Ubuntu usam upstart para inicialização do sistema. Com o inicio, os consoles Linux são configurados com arquivos de configuração armazenados em / etc / init. O comando acima começa iterando sobre cada um desses arquivos de configuração:

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

O nome do arquivo de configuração inicial do tty em $ file é usado para criar o nome do dispositivo tty:

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

É criado um comando inicial "pós-inicialização" que executa "setterm" para desativar o apagamento da tela e a economia de energia após o início do tty:

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

E, finalmente, esse comando é anexado ao arquivo de configuração inicial:

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

Nos meus sistemas (várias versões do RedHat Enterprise Linux), descobri que são necessárias diferentes abordagens.

Para meus sistemas RHEL 5 e 6, posso adicionar a linha

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

para /etc/rc.local. Isso desativa a tela do console que fica em branco na inicialização do sistema.

Descobri que isso não funciona nos sistemas RHEL 7. No RHEL7, a execução de setterm do rc.local causa um erro:

setterm: $TERM is not defined.

O comando funciona a partir de um shell interativo, onde $ TERM é definido (como linux). Se eu forçar o setterm a usá-lo:

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

Então eu recebo um erro diferente:

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

Mesmo que o mesmo comando funcione bem em uma sessão interativa. Definir o consoleblankparâmetro do kernel funcionou.

No RHEL7, edite /etc/default/grube acrescente consoleblank=0ao GRUB_CMDLINE_LINUXparâmetro. Em seguida, execute grub2-mkconfig -o /boot/grub2/grub.cfge reinicie.

Não tentei definir consoleblankno RHEL5 ou 6.

David C.
fonte
2
RHEL7 usa systemd; O rc.local não está conectado a um terminal por padrão. Eu acho que você pode adicionar </dev/tty1 >/dev/tty1ou algo para fazê-lo funcionar
sourcejedi
1

Sequências CSI privadas do console Linux

Para definir o sleep mode/screensavertempo de inserção (onde X é um tempo em minutos; 0 = nunca):

(do console serial)

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

ou (do console do framebuffer)

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

ou para configurá-lo em cada inicialização, use /etc/inittab:

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

refs:

yurenchen
fonte
0

A adição gnome-screensaver-command --exitde meu .profilearquivo corrigiu esse problema para mim no Debian Linux (Wheezy).

Pensei em acrescentar isso para ajudar outras pessoas que estão arrancando os cabelos tentando parar de apagar a tela.

Uma caixa de seleção intitulada "Tela escura para economizar energia" está com defeito. Mesmo desmarcada, AINDA deixará a tela em branco de acordo com o tempo de inatividade selecionado.

ATUALIZAÇÃO: Eu realmente precisava sleep 30 && /usr/bin/gnome-screensaver-command --exit &fazê-lo funcionar corretamente. O protetor de tela do GNOME parece iniciar muito depois do processamento do .profile.

Mcchinsy
fonte
2
Trata-se do apagamento da tela do console, não dos protetores de tela do Gnome.
basic6