Linux: Evita que a tela de virada do teclado fique sob X

4

Estou tentando vincular uma chave (usando xbindkeys ) para ativar / desativar meus monitores em X. Até agora, tenho a chave associada a este script:

#!/bin/bash
MOUSE="Logitech USB-PS/2 Optical Mouse"

if [[ ! -z $(xset q | grep "Monitor is On") ]]; then
    logger "Turning off display"
    xinput disable "$MOUSE"
    xset s 2 2
    xset dpms force off
else
    logger "Turning on display"
    xinput enable "$MOUSE"
    xset s 3600 3600
    xset dpms force on
fi

Isso funciona quase perfeitamente: se a tela estiver ativada, ela desativará o mouse (para evitar ativações acidentais), definirá o tempo de apagamento em 2 segundos (caso algo seja ativado) e desligará a tela. Se estiver desligado, restaura as configurações anteriores e volta a ligar a tela.

Infelizmente, isso parece não funcionar quando realmente vinculado a uma chave: sempre acredita que a tela está ativada. Eu suspeito que isso é porque pressionar a tecla os ativa novamente e, em seguida, executa o script que os desliga novamente.

Não consigo encontrar nenhuma maneira de impedir que a tela seja ativada automaticamente ao pressionar o teclado, exceto para desabilitar totalmente o teclado (o que tornaria difícil reativá-lo).

Uma solução ainda melhor seria se eu pudesse ter um script executado a qualquer momento em que a tela fosse ligada / desligada; então eu ainda seria capaz de voltar a tela pressionando qualquer tecla, não apenas aquela ligada a esse script.

    
por Rena 30.01.2015 / 22:57

2 respostas

2

O script é executado imediatamente depois que você pressiona a tecla de atalho, mas a tela só é ativada quando você a solta.

Você pode testar isso inserindo

xset dpms force off

no seu terminal e pressionando Enter .

A tela fica desligada até você soltar a tecla e voltar imediatamente.

Uma solução simples é adicionar um pequeno atraso para executar o comando xset após a liberação da chave (usando o comando sleep , por exemplo).

    
por 15.07.2018 / 14:36
1

Algo que fiz foi usar xscreensaver (definido para em branco apenas na tela, para não executar nenhum gráfico) e, em seguida, assisti-lo usando xscreensaver-command -watch :

   -watch  Prints a line each time the screensaver changes state: when the
           screen  blanks,  locks,  unblanks,  or when the running hack is
           changed.  This option never returns; it is intended for use  by
           shell  scripts  that  want  to react to the screensaver in some
           way.  An example of its output would be:
           BLANK Fri Nov  5 01:57:22 1999
           RUN 34
           RUN 79
           RUN 16
           LOCK Fri Nov  5 01:57:22 1999
           RUN 76
           RUN 12
           UNBLANK Fri Nov  5 02:05:59 1999

A página man inclui um exemplo que vale a pena conferir.

Infelizmente, o estoque xscreensaver insiste em definir as configurações do DPMS com seus próprios valores de tempos em tempos. Eu enviei um um patch para pará-lo fazendo isso , mas o jwz recusou. Você pode achar o patch útil - ou apenas compilar o xscreensaver com --without-dpms-ext .

Como alternativa, pode ser instrutivo examinar o código xscreensaver para dicas sobre como escrever seu próprio observador.

    
por 05.05.2015 / 10:58