Parece que sua TV está desconectada quando você a desliga, senão não perderá a configuração. Abaixo de duas opções para resolver o problema, o que provavelmente é o resultado de um bug:
- O script (plano de fundo) abaixo (a opção
[1.]
deve mover automaticamente a tela da TV (no seu caso:HDMI-0
) para a direita da tela principal, se ela estiver conectada depois de ser desconectada. - O atalho de teclado faz o mesmo, mas manualmente, depois de conectar (ligar) a TV.
1. Um script de segundo plano, configurando automaticamente a segunda tela
O script é escrito de tal forma que leva a tela que você quer que apareça à direita (aquela que é desconectada agora e depois) como um argumento (veja a explicação abaixo). Portanto, ele funciona com qualquer combinação de telas, você só precisa digitar o nome da tela da direita no comando. O script encontrará a resolução da tela esquerda, para posicionamento correto.
O script
#!/usr/bin/env python3
import subprocess
import time
import sys
"""
This script is a fix for what is presumably a bug, causing the secundary screen
to appear on the left side instead of the right side of the "main" screen.
Run it in the background.
"""
#--- set your secundary (right) screen below
sec = sys.argv[1]
#---
scr_id = sec+" connected"
def get_xrandr():
return subprocess.check_output("xrandr").decode("utf-8")
def get_setup():
# returns output of xrandr if secundary monitor was connected (else None)
get_xr = subprocess.check_output("xrandr").decode("utf-8")
if scr_id in get_xr:
return get_xr
def get_xshift(xr):
# find connected screens (lines)
mons = [l for l in xr.splitlines() if " connected" in l]
# get name and x-size of main screen
left = [l.split() for l in mons if not l.startswith(scr_id)][0]
return [(left[0], s.split("x")[0]) for s in left if s.count("+") == 2][0]
check1 = []
while True:
time.sleep(4)
check2 = get_setup()
if check1 != check2:
# on change in monitor setup:
if check2 != None:
# if secundary monitor was just connected
print("run setup")
x_shiftdata = get_xshift(check2)
cmd1 = ["xrandr", "--output", x_shiftdata[0], "--pos", "0x0"]
cmd2 = ["xrandr", "--output", sec, "--pos", x_shiftdata[1]+"x0"]
for cmd in [cmd1, cmd2]:
subprocess.call(cmd)
check1 = check2
Como usar
- Copie o script em um arquivo vazio, salve-o como
screen_set.py
-
Teste-o com a tela secundária como um argumento com o comando:
python3 /path/to/screen_set.py HDMI-0
(porque
HDMI-0
é sua tela secundária) Desconecte (desligue) a TV e conecte-a novamente, ela deve aparecer no lado direito. -
Se tudo funcionar bem, adicione-o a Startup Applications, com um pequeno intervalo: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:
/bin/bash -c "sleep 15 && python3 /path/to/screen_set.py HDMI-0"
Agora, isso deve ser resolvido.
2. Alternativamente; um atalho de teclado
O script de segundo plano adiciona praticamente nada ao carregamento do processador, e não será percebido de forma alguma. Se você, no entanto, preferir um atalho de teclado para um script de fundo (trabalhando automaticamente), adicione o comando:
/bin/bash -c "xrandr --output DVI-0 --pos 0x0 && xrandr --output HDMI-0 --pos 2560x0"
que fará o mesmo, mas manualmente: Escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:
/bin/bash -c "xrandr --output DVI-0 --pos 0x0 && xrandr --output HDMI-0 --pos 2560x0"
Explicação; o script de plano de fundo
- Uma vez por quatro segundos, o script verifica se a TV está conectada, verificando se a string
HDMI-0 connected
está na saída do comandoxrandr
. -
(Apenas) se houver uma alteração no estado:
False -> True
, o script executa o comando (no seu caso):xrandr --output DVI-0 --pos 0x0 && xrandr --output HDMI-0 --pos 2560x0
que organiza suas telas da esquerda para a direita, como explicado aqui . Se as resoluções da tela forem diferentes, o script procurará as figuras corretas e o nome da tela principal. Contanto que você use a tela secundária como argumento, ela funciona bem.