Xubuntu salva a configuração de vários monitores

2

Eu tenho uma configuração multi-monitor com 2 telas (3 com o notebook T460s) no xubuntu 16.04 em um Switch DP KVM. O notebook está conectado através da Docking Station Dock-3 em 2 portas DP.

Toda vez que eu mudo do desktop para o laptop, a configuração do monitor é perdida, então eu tenho que configurá-lo a partir do zero, incluindo a ativação dos monitores individuais. Existe uma maneira de salvar essas configurações e restaurá-las automaticamente se o notebook estiver conectado à estação de acoplamento?

A saída (encurtada) de xrandr com as telas conectadas:

Screen 0: minimum 8 x 8, current 6800 x 1440, maximum 32767 x 32767
eDP1 connected 2560x1440+4240+0 (normal left inverted right x axis y axis) 310mm x 170mm
   2560x1440     60.00*+  48.00  
   1920x1440     60.00  

   .........

DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
DP2-1 connected 1680x1050+2560+0 (normal left inverted right x axis y axis) 473mm x 296mm
   1680x1050     59.88*+  59.95  
   1920x1080     60.00    50.00    59.94  

   ..........

DP2-2 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 527mm x 296mm
   2560x1440     59.95*+
   1920x1200     59.95  

   ..........

DP2-3 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
    
por Atomius 12.04.2016 / 21:22

3 respostas

2

Não 16.04 específico

O problema que você está enfrentando não é exclusivo do 16.04, acontece em muitas versões do Ubuntu.

Como resolver

Lendo sua saída de xrandr , e supondo que eu não tenha cometido nenhum erro de digitação, o seguinte comando deve organizar suas telas da maneira que você configurou:

xrandr --output DP2-2 --auto --pos 0x0 --output DP2-1 --auto --pos 2560x0 --output eDP1 --auto --pos 4240x0

A solução mais rápida e fácil é adicioná-lo a uma tecla de atalho: Configurações > Teclado > Atalhos de aplicativos. Em seguida, pressione o atalho depois que as telas estiverem conectadas.

Explicação

A partir da saída de xrandr , podemos ver as informações nas três telas conectadas:

eDP1 connected 2560x1440+4240+0
DP2-1 connected 1680x1050+2560+0
DP2-2 connected primary 2560x1440+0+0

Nas últimas seções: 2560x1440+4240+0 , na parte: +4240+0 , podemos ver a posição da tela em toda a imagem das telas combinadas (x, y). Da esquerda para a direita, as telas estão obviamente organizadas como:

DP2-2 +0+0 | DP2-1 +2560+0 | eDP1 +4240+0

Seestearranjonãoélembradoautomaticamente,podemosconfigurá-locomocomandoqueeuadicioneinoiníciodestaresposta.

Aopção--autoIfoiadicionada,jáquevocêmencionouterqueativarastelas.

EDITAR

Conformesolicitado,umpequenoscriptbashparaserexecutadoemsegundoplanoparafazeraconfiguração,seastelasestiveremconectadas:

#!/bin/bash let "target = 3" swon=false function nscreens { curr=$(xrandr | grep " connected" | wc -l) } function setup_scr { xrandr --output DP2-1 --auto --pos 0x0 \ --output DP2-2 --auto --pos 2560x0 \ --output eDP1 --auto --pos 4240x0 } while true do sleep 4 nscreens if [ "$curr" -eq "$target" ] && [ "$swon" == false ] then setup_scr swon=true elif [ "$curr" -ne "$target" ] && [ "$swon" == true ] then swon=false fi done
  • Copie o script em um arquivo vazio, salve-o como setup_scr.sh , torne-o executável
  • Teste - execute-o em um terminal com o comando:

    /path/to/setup_scr.sh
    

    conecte / desconecte as telas

  • se funcionar bem, adicione-o aos aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:

    /bin/bash -c "sleep 15 && /path/to/setup_scr.sh"
    

Explicação

  • Uma vez por 4 segundos, o script conta o número de telas conectadas. Se for igual a 3, ele executa a configuração uma única vez, lembrando que ele configurou as telas trocando o valor de "swon" (ligado) para true .

    Em seguida, se o número de telas não for mais igual a 3, "swon" será definido como false novamente e assim por diante.

Nota

Eu testei o script na minha configuração de duas telas, e funcionou bem, no entanto, há sempre a possibilidade de eu ter feito um erro de digitação em algum lugar, e obviamente não pude testá-lo no seu sistema. Em caso de erro, por favor mencione.

    
por Jacob Vlijm 14.04.2016 / 07:42
1

Eu tentei o método proposto por Jacob Vlijm, que eu naturalmente editei para o meu cenário. Não funcionou bem e por algum motivo qualquer comando xrand que tinha --auto ou --pos nele caiu minha máquina (eu estou usando o Xubuntu 16.04)

Aqui está minha solução para isso

xrandr --output HDMI1 --mode 1920x1080 --pos 0x0 --rate 60.00 --output eDP1 --off

isso leva meu monitor secundário que eu conectei através de HDMI e o ajusta para 1080p 60Hz enquanto desabilita meu monitor de laptop

xrandr --output eDP1 --mode 1366x768 --pos 0x0 --rate 60.00

isso define a tela do meu laptop para sua resolução nativa de 1366x768 60Hz

Eu uso a primeira configuração quando estou conectado a 2 monitores e uso a segunda configuração quando estou conectado apenas à tela do meu laptop.

Aqui está o meu arquivo setup_scr.sh:

#!/bin/bash

let "target = 2"
swon=false

function nscreens 
{
        curr=$(xrandr | grep " connected" | wc -l)
}

function setup_dubai 
{
    xrandr --output HDMI1 --mode 1920x1080 --pos 0x0 --rate 60.00 --output eDP1 --off
}

function setup_normal 
{
    xrandr --output eDP1 --mode 1366x768 --pos 0x0 --rate 60.00
}

while true
do
  sleep 4
    nscreens
  if [ "$curr" -eq "$target" ] && [ "$swon" == false ]
  then
    setup_dubai
    swon=true
  elif [ "$curr" -ne "$target" ] && [ "$swon" == true ]
  then
    swon=false
    setup_normal
  fi
done

Obrigado a Jacob Vlijm por tornar esta configuração muito simples com a sua boa explicação

    
por Egene 05.01.2017 / 13:10
0

essas respostas são apenas sobre restauração. Para "salvar" o estado atual, você poderia usar este script (dump_randr.sh)

#!/bin/bash
fileName="$1"
while read -r line; do
    IFS=" "
    entry=( $line )
    display=${entry[0]}
    IFS="x+"
    if [[ "${entry[2]}" == primary ]]; then
        primary=1
        measurement=( ${entry[3]} )
    else
        primary=0
        measurement=( ${entry[2]} )
    fi
    unset IFS
    width=${measurement[0]}
    height=${measurement[1]}
    left=${measurement[2]}
    top=${measurement[3]}

    xrandrOpt="$xrandrOpt --ouput $display --mode ${width}x${height} --pos ${left}x${top}"
    ((primary)) && xrandrOpt="$xrandrOpt --primary"

done < <(xrandr | grep " connected")

echo $'#!/bin/bash\n'xrandr $xrandrOpt > "$fileName"
chmod +x "$fileName"

Isto irá descarregar as opções atuais do xrandr para usá-las novamente. Você pode fazer algo assim para armazenar a configuração atual:

dump_randr.sh 2_monitors_home.sh

que cria 2_monitors_home.sh para restaurar o estado atual.

    
por estani 14.02.2018 / 16:28