Posso forçar a tela em branco e ignorar a entrada?

5

Eu gostaria de forçar minha tela a ficar em branco e deixá-la em branco, independentemente do que eu faça com o teclado e o mouse até que receba um comando para desencaixá-la (como uma fechadura).

Os comandos que conheço são:

xset dpms force off
sleep 2
xset dpms force on

Eu só quero que ele fique em branco por dois segundos, em seguida, unblank, mas eu quero absolutamente ficar em branco por estes dois segundos, não importa o quê. Isso pode ser feito?

    
por Cestarian 28.02.2016 / 13:57

3 respostas

2

Você poderia apenas desativar seu teclado e mouse pela duração. Primeiro, pegue seus IDs de teclado e mouse:

$ xinput --list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Logitech M325                             id=14   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ SIGMACHIP USB Keyboard                    id=11   [slave  keyboard (3)]

Tenho várias coisas conectadas à minha máquina e estou executando um laptop para que a saída de xinput --list seja muito longa. Eu o redigi aqui para maior clareza. Você precisa descobrir quais são os IDs dos dispositivos que você precisa desativar. No meu caso, eles eram 14 e 11 .

Agora, desligue a tela, desative o teclado e o mouse, aguarde dois segundos e ligue tudo de novo:

xinput set-prop 'Logitech M325' 'Device Enabled'  0 &&
xinput set-prop 'SIGMACHIP USB Keyboard' 'Device Enabled' 0 &&
xset dpms force off &&
sleep 2 &&
xinput set-prop 'Logitech M325' 'Device Enabled' 1 &&
xinput set-prop 'SIGMACHIP USB Keyboard' 'Device Enabled' 1 &&
xset dpms force on

No meu sistema, SIGMACHIP USB corresponde a mais de um dispositivo. Por algum motivo, ele também é identificado como um mouse. Para ter 100% de certeza de obter os dispositivos certos, você pode preceder a turma ao nome dela:

xinput set-prop 'pointer:Logitech M325' 'Device Enabled'  0 &&
xinput set-prop 'keyboard:SIGMACHIP USB Keyboard' 'Device Enabled' 0 &&
xset dpms force off &&
sleep 2 &&
xinput set-prop 'pointer:Logitech M325' 'Device Enabled' 1 &&
xinput set-prop 'keyboard:SIGMACHIP USB Keyboard' 'Device Enabled' 1 &&
xset dpms force on
    
por 28.02.2016 / 14:17
2

Você pode usar xrandr . Por exemplo, se o seu monitor é HDMI1, você pode fazer

xrandr --output HDMI1 --off
sleep 2
xrandr --output HDMI1 --auto

Você pode encontrar o nome com

xrandr|grep ' connected'
    
por 28.02.2016 / 14:38
0

Eu finalmente descobri uma resposta que pelo menos funciona em meus sistemas (um Lenovo ThinkPad X201 e um ThinkPad X201 Tablet, que usam painéis LVDS). Na verdade, desativa a luz de fundo, mas a menos que você tenha um LCD refletivo ou refletivo (o que é bastante incomum), ele deve efetivamente ser o mesmo que ter o LCD desligado.

Primeiro, eu instalei as Intel GPU Tools (README here para mais informações). No debian, isso foi feito com:

# apt-get install intel-gpu-tools

Este pacote contém um programa chamado intel_backlight , que interage diretamente com os registradores das GPUs Intel e, portanto, não está limitado ao 'intervalo seguro' no sistema de arquivos sysfs dos kernels Linux atuais, onde o nível de brilho 0 deve sempre estar "em um nível baixo de brilho".

Infelizmente, este programa precisa ser executado como root, e ele realmente não higieniza muito bem suas entradas (apenas cegamente atoi() é o primeiro argumento para o script e assume que é realmente um número). Ainda estou trabalhando em uma solução adequada para isso, mas por enquanto suas opções são:

  1. Executa isso como root
  2. Escreva um script e uma configuração rápida para ativá-lo em um evento ACPI específico.

Eu escolhi a última opção. Eu escolhi uma combinação de teclas que acpi_listen detectou como disparando um evento ACPI, mas que não foi mapeado para fazer nada no meu laptop. Eu escolhi fn + f1. Teoricamente, também é possível acionar a tecla de brilho, verificar se o brilho já está no mínimo e, em caso afirmativo, desligar a luz de fundo.

Eu escrevi os seguintes arquivos:

/etc/acpi/events/fnf1-toggle-lcd:

event=button/fnf1
action=/etc/acpi/toggle-thinklight-or-tablet-lcd.sh "%e"

/etc/acpi/toggle-thinklight-or-tablet-lcd.sh:

#! /bin/bash
# intel_backlight appears to require root privs.

# is the light on or off?
export INTEL_BACKLIGHT="/usr/bin/intel_backlight"
export light_state=$("$INTEL_BACKLIGHT" | sed 's/current backlight value: //g'|sed 's/%//g')
if [ "$light_state" -eq 0 ]; then # if the backlight is currently off
  # restore brightness level
  cat /root/brightness > /sys/class/backlight/acpi_video0/brightness
else # the backlight is currently on
  # back up current brightness level
  cat /sys/class/backlight/acpi_video0/brightness > /root/brightness
  # turn off backlight
  "$INTEL_BACKLIGHT" 0
fi

Certifique-se de que o script de shell esteja marcado como executável.

Talvez não seja exatamente o que se queria, e sei que estou atrasado para a festa, mas está funcionando aqui.

Como alternativa, nos painéis eDP, fazer echo 0 > /sys/class/backlight/acpi_video0/bl_power pode funcionar. Isso absolutamente não irá funcionar em painéis LVDS, porque aparentemente alguns desenvolvedores do kernel acharam que era uma boa idéia.

    
por 21.09.2018 / 19:31