Como desativar automaticamente a exibição padrão e definir a resolução se eu conectar um monitor específico?

3

Sempre que me conecto a um monitor externo específico, a resolução padrão não é a desejada e preciso configurá-lo novamente.

Como eu salvo uma resolução específica para uma exibição específica e desativo minha exibição padrão se eu conectar essa exibição?

    
por Lawand 25.04.2017 / 21:26

1 resposta

2

Defina a resolução, dependendo da presença de uma tela anexada (específica)

Abaixo duas opções:

  1. Definir a resolução da tela e alternar a tela (detecção automática da segunda tela) por uma tecla de atalho
  2. Execute um script de segundo plano para desligar automaticamente a tela principal e alterar a resolução

Opção 1; atalho

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

# set the default screen
default = "DVI-I-1"
# set the specific external screen
external = "VGA-1"
# set the resolution of the single screen setup
singleres = "1680x1050"
# set the resolution of the specific external screeen
extrares = "1280x1024"

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8")

def run(cmd):
    subprocess.call(cmd)

def get_screens():
    return [l.split()[0] for l in get("xrandr").splitlines() if " connected" in l]

def set_screen(n_scr, screens):
    if n_scr == 1:
        run(["xrandr", "--output", default, "--auto"])
        run(["xrandr", "-s", singleres])
        print("1 screen")
    elif all([n_scr == 2, external in screens]):    
        run(["xrandr", "--output", default, "--off"])
        run(["xrandr", "-s", extrares])
        print("2 screens")

screens = get_screens()
n_scr2 = len(screens)
set_screen(n_scr2, screens)

Opção 2; uma versão em segundo plano

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

# set the default screen
default = "DVI-I-1"
# set the specific external screen
external = "VGA-1"
# set the resolution of the single screen setup
singleres = "1680x1050"
# set the resolution of the specific external screeen
extrares = "1280x1024"

def get(cmd):
    try:
        return subprocess.check_output(cmd).decode("utf-8")
    except subprocess.CalledProcessError:
        pass

def run(cmd):
    subprocess.call(cmd)

def get_screens(scrdata):
    return [l.split()[0] for l in scrdata.splitlines() if " connected" in l]

def set_screen(n_scr, screens):
    if n_scr == 1:
        run(["xrandr", "--output", default, "--auto"])
        run(["xrandr", "-s", singleres])
        print("1 screen")
    elif all([n_scr == 2, external in screens]):    
        run(["xrandr", "--output", default, "--off"])
        run(["xrandr", "-s", extrares])
        print("2 screens")

n_scr1 = None

while True:
    time.sleep(4)
    scrdata = get("xrandr")
    if scrdata:
        screens = get_screens(scrdata)
        n_scr2 = len(screens)
        if n_scr2 != n_scr1:
            set_screen(n_scr2, screens)
        n_scr1 = n_scr2

Como usar

  1. Copie um dos scripts acima em um arquivo vazio, salve-o como set_screens.py
  2. Substitua na seção head do script os valores de:

    # set the default screen
    default = "DVI-I-1"
    # set the specific external screen
    external = "VGA-1"
    # set the resolution of the single screen setup
    singleres = "1680x1050"
    # set the resolution of the specific external screeen
    extrares = "1280x1024"
    

    (as configurações atuais são apenas para a configuração do meu teste)

  3. Teste e aplique o script:

    • se você usar a opção 1, o atalho :

      Abra um terminal, execute o script subseqüentemente com e sem a tela externa, com o comando:

      python3 /path/to/set_screens.py
      

      Deve definir os ecrãs como pretendido.

      Posteriormente, adicione, se tudo funcionar bem, o script para um atalho: Escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:

      python3 /path/to/set_screens.py
      
    • se você usar a opção 2, o script de plano de fundo :

      Abra um terminal, execute o script com o comando:

      python3 /path/to/set_screens.py
      

      e conecte / desconecte o monitor externo. Deve alterar a resolução e ligar / desligar o seu monitor predefinido conforme pretendido.

      Em seguida, adicione, se tudo funcionar bem, o script para Startup Applications: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:

      /bin/bash -c "sleep 10 && python3 /path/to/set_screens.py"
      
por Jacob Vlijm 27.04.2017 / 17:38