Desativar o monitor externo quando inativo

1

Eu adicionei um monitor externo ao meu laptop na semana passada e tenho quase tudo funcionando como eu quero, exceto pelo brilho & amp; Comportamento de bloqueio.

Por muito tempo eu tive isso definido para "Desligar a tela quando inativo por: 5 minutos" e funciona como um encanto para a tela do laptop - antes e depois da adição do monitor externo. Mas isso não funciona no monitor externo. Quando estou longe da minha mesa por mais tempo do que pretendia, volto para uma tela de laptop preta e para a tela bloqueada e entrada de login no monitor externo.

A questão parece ser semelhante a esta questão , mas nessa um parece que é o monitor primário que não fica preto. É por isso que estou postando isso como uma questão separada.

Sim, sei que posso desligar o monitor, e faço isso à noite, mas gostaria que fosse preto em sincronia com a tela nativa, se possível.

Estou no dia 14.04. O monitor está conectado via HDMI. O laptop é um VAIO com pouca idade agora.

EDITOR DE ACOMPANHAMENTO

Como acompanhamento, quando testei o script bash na resposta aceita, configurei um tempo limite baixo, executei o script a partir de um terminal, observei os dois monitores escurecendo e depois aceitei a resposta. Posteriormente, eu realmente adicionei o script (com um tempo limite de re-set) aos meus scripts de inicialização e devolvi minha máquina.

Após minha primeira ausência mais do que esperada, imagine minha surpresa quando voltei para a minha mesa para encontrar meu monitor externo brilhando intensamente!

Pesquisas posteriores mostraram que isso é provavelmente causado pelo próprio monitor HDMI, e nenhum script vai consertá-lo. De fato, eu (acidentalmente) estive em minha mesa quando este script entrou em cena. Ambos os monitores ficam pretos como deveriam, e cerca de um minuto depois, o monitor externo se liga novamente. : - (

Oh bem. Eu tentei.

    
por G. Ann - SonarSource Team 12.04.2016 / 19:21

1 resposta

1

Eu suspeito que o problema é o resultado de um bug, já que não consigo encontrar outra causa. Pelo menos como solução alternativa, o script de plano de fundo abaixo pode ser usado.

O script faz o trabalho no meu sistema, mas você terá que tentar e ver. Se não funcionar no seu sistema, podemos mudar para xrandr para mudar especificamente de por monitor , mas esta é a opção mais simples.

Recursos?

Sobre os recursos que você não precisa se preocupar, o script verifica uma vez a cada dez segundos se o tempo ocioso é excedido. Mesmo que eu consiga 10 vezes por segundo , a carga é praticamente nula.

#!/usr/bin/env python3
import subprocess
import time

t = 300

scr = True
while True:
    time.sleep(10)
    idle = int(subprocess.check_output("xprintidle").decode("utf-8").strip())/1000
    if idle > t and scr == True:
        subprocess.Popen(["xset", "dpms", "force", "off"])
        scr = False
    elif idle < t and scr == False:
        subprocess.Popen(["xset", "dpms", "force", "on"])
        scr = True

Como usar

  1. O script precisa de xprintidle :

    sudo apt-get install xprintidle
    
  2. Copie o script em um arquivo vazio, salve-o como switchoff.py

  3. Na cabeça do script, defina o tempo ocioso (em segundos) na linha:

    t = 300
    
  4. Desligue o seu "normal" desligue a tela após a idletime - configurações

  5. Execute o script com o comando:

    python3 /path/to/switchoff.py
    
  6. Se tudo funcionar bem, adicione-o aos aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar.

    Adicione o comando:

    /bin/bash -c "sleep 15 &&  python3 /path/to/switchoff.py"
    

EDITAR

Conforme solicitado em um comentário, abaixo da versão bash do mesmo script. Você ainda precisa instalar o xprintidle .

#!/bin/bash

# --- set the idle time in seconds below
let "t = 300"
# ---

let "div = 1000"
t=$(($t * $div))
scr=true

while true
do
  sleep 10
  let "idle = "$(xprintidle)""
  if  [ "$idle" -gt "$t" ] && [ "$scr" = true ] 
  then
    scr=false
    xset dpms force off
  elif [ "$idle" -lt "$t" ] && [ "$scr" = false ] 
  then
    xset dpms force on
    scr=true
  fi
done

Nota

  • Como não sabemos o que causa o comportamento em seu sistema, ainda precisamos descobrir se é necessário desativar especificamente suas telas por tela por xrandr . Você teria que tentar.
por Jacob Vlijm 13.04.2016 / 10:14