Script de segundo plano para verificar novas telas
Uma vez por 5 segundos, o script de segundo plano abaixo procura novas telas a serem conectadas.
Se isso acontecer, tente definir a resolução para o que você definir na seção head do script (consulte: Como usar).
Uma notificação mostra se a tela foi configurada com sucesso:
Se o comando para definir a resolução falhar, ele mostrará uma notificação:
O script
#!/usr/bin/env python3
import subprocess
import time
# --- set your main screen below, since you probably want to set it differently
main_screen = "DVI-I-1"
# --- set the tried resolution below
res = "200x300"
#---
screens1 = [main_screen]
def screeens():
[l.split()[0] for l in subprocess.check_output("xrandr")\
.decode("utf-8").splitlines() if " connected" in l]
while True:
time.sleep(5)
screens2 = [l.split()[0] for l in subprocess.check_output("xrandr").decode("utf-8")\
.splitlines() if " connected" in l]
new = [scr for scr in screens2 if not scr in screens1]
for scr in new:
try:
subprocess.check_call(["xrandr", "--auto", "--output", scr, "--mode", res])
# small break to give the screens time to adapt
time.sleep(5)
subprocess.Popen(["notify-send", "successfully set "+scr+" to "+res])
except subprocess.CalledProcessError:
subprocess.Popen(["notify-send", "failed to set resolution of "+scr+" to "+res])
screens1 = screens2
Como usar
- Copie o script em um arquivo vazio, salve-o como
set_screens.py
-
Defina na seção principal do script:
- o nome de sua tela padrão , pois você provavelmente deseja excluí-la do conjunto de resoluções automáticas.
-
a resolução que você quer experimentar em novas telas.
# --- set your main screen below, since you probably want to set it differently main_screen = "DVI-I-1" # --- set the tried resolution below res = "200X300" #---
-
Teste- execute o script pelo comando (de um terminal):
python /path/to/set_screens.py
Se tudo funcionar bem, adicione-o aos aplicativos de inicialização:
/bin/bash -c "sleep 15 && python3 /path/to/set_screens.py"
Notas
-
O
sleep 15
é essencial no comando de inicialização, especialmente se as telas secundárias estiverem possivelmente conectadas. O script será quebrado se a área de trabalho ainda não estiver totalmente carregada, se começar a ser executada.Se o script rodar bem no terminal, mas quebrar como um comando sartup, toque um pouco com o
sleep 15
. -
Se você não quiser excluir sua tela principal de tentar definir a resolução, altere a linha:
screens1 = [main_screen]
para:
screens1 = []
Executando um script de plano de fundo
Se você não precisar executar um script de segundo plano, não o faça. Se adicionar funcionalidades importantes e / ou poupar tempo, não vejo qualquer razão para não o fazer, se :
- Não há outra solução 100% limpa e fácil disponível com a mesma funcionalidade.
e
- O script está bem escrito e não adiciona carga de CPU visível
Nesse caso, verificar xrandr
uma vez a cada cinco segundos significa nada em seu sistema.