A exibição adicional é sempre adicionada no lado errado

0

Eu tenho um computador desktop com drivers Radeon R7 360 e FOS. O meu ecrã principal, que utilizo sempre, está ligado à porta DVI e o meu televisor está ligado à saída HDMI, para o caso de querer colocar quaisquer vídeos ou filmes ou apenas necessitar de um ecrã extra.

No entanto, quando eu ligo minha TV e ela é reconhecida pelo Ubuntu, o espaço adicional é sempre adicionado ao lado errado. Eu costumo optar por "expandir a área de trabalho para o lado direito", mas o que realmente acontece é a minha área de trabalho principal é exibida na TV e meu monitor regular é "adicionado" ao seu espaço. Eu sempre tenho que entrar nas configurações e arrastar as telas na ordem correta, essa configuração também não é salva, já que tenho que refazer este procedimento toda vez que eu ligo minha TV para expandir minha área de trabalho.

Existe alguma solução para isso ou alguém tem uma ideia sobre onde configurar uma configuração fixa para os meus dois monitores?

Atualmente estou usando o Ubuntu Studio 15.10 com o Xfce.

Edit: Esta é a saída do xrandr:

Screen 0: minimum 320 x 200, current 4480 x 1080, maximum 16384 x 16384
DisplayPort-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected 1920x1080+2560+0 (normal left inverted right x axis y axis) 160mm x 90mm
   1920x1080     60.00*+  50.00    59.94    30.00    25.00    24.00    29.97    23.98  
   1920x1080i    60.00    50.00    59.94  
   1280x1024     60.02  
   1360x768      60.02  
   1152x864      59.97  
   1280x720      60.00    50.00    59.94  
   1024x768      60.00  
   800x600       60.32  
   720x576       50.00  
   720x576i      50.00  
   720x480       60.00    59.94  
   640x480       60.00    59.94  
   720x400       70.08  
DVI-0 connected primary 2560x1080+0+0 (normal left inverted right x axis y axis) 673mm x 284mm
   2560x1080     60.00*+
   1920x1080     60.00  
   1680x1050     59.88  
   1280x1024     75.02    60.02  
   1280x800      59.91  
   1152x864      75.00  
   1024x768      75.08    60.00  
   800x600       75.00    60.32  
   640x480       75.00    60.00  
   720x400       70.08  
    
por Prototype700 13.02.2016 / 19:14

2 respostas

3

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:

  1. 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.
  2. 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

  1. Copie o script em um arquivo vazio, salve-o como screen_set.py
  2. 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.

  3. 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 comando xrandr .
  • (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.

por Jacob Vlijm 14.02.2016 / 08:17
2

Eu tenho um cartão ATI R5 que nunca salva meu layout gráfico para meus três monitores usando xfce4-display-settings . O ARandR deve resolver seu problema. Instale digitando o seguinte no terminal:

sudo apt-get install arandr

Use o ARandR para configurar suas telas, salve-o em um script (Layout > Salvar como) e defina-o para ser executado como Sessão e Inicialização > Item de início automático do aplicativo. (Você pode precisar configurá-lo para dormir 5 antes de executar o script de layout).

Se você tem dois layouts diferentes, você pode configurar cada um com o ARandR. Em seguida, você pode executar um script ou outro, dependendo do layout desejado. Ou, melhor ainda, você poderia atribuir cada um ao seu próprio atalho de teclado, se assim desejar.

    
por jbrock 14.02.2016 / 02:47