Defina a resolução, dependendo da presença de uma tela anexada (específica)
Abaixo duas opções:
- Definir a resolução da tela e alternar a tela (detecção automática da segunda tela) por uma tecla de atalho
- 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
- Copie um dos scripts acima em um arquivo vazio, salve-o como
set_screens.py
-
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)
-
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"
-