Configuração de monitor duplo com xrandr: estendendo sem / com rolagem desativada

11

Esta não é uma pergunta, mas uma solução alternativa para um problema no Ubuntu, eu encontrei.

Configuração:
dada uma tela de laptop (por exemplo, "LVDS-1-0") e uma segunda tela (por exemplo, "DP-1"), com a segunda tela sendo sua tela principal e o monitor à direita da tela principal ( esquerda) como uma extensão (veja a figura). A primeira tela sempre foi estendida virtualmente, apesar das instruções explícitas do xrandr para não fazer isso. Ao entrar nisso, pude evitar a rolagem irritante ao mover o cursor do mouse para a direita no monitor principal.

xrandr --output LVDS-1-0 --off
xrandr --output DP-1 --mode 1920x1080 --primary --pos 0x0 --output LVDS-1-0 --mode 1920x1080 --pos 1920x0

Depois disso, ele passa de um monitor para o outro sem rolar a tela.

Atualizar

Depois de mudar para uma placa gráfica discreta (a nvidia é discreta e a intel integrada para o meu laptop), a ordem das saídas precisava ser alterada:

output_DP=$(xrandr | grep " connected" | grep DP | awk '{print $1}')
output_LVDS=$(xrandr | grep " connected" | grep LVDS | awk '{print $1}')

xrandr --output $output_LVDS --off
xrandr --output $output_LVDS --mode 1920x1080 --pos 1920x0 --output $output_DP --mode 1920x1080 --pos 0x0  --primary

Para maior conveniência, criei essas variáveis ​​para ter mais flexibilidade, pois a troca entre placas gráficas discretas e integradas altera a designação dos dispositivos de saída (por exemplo, LVDS-1-0 vs LVDS-1).

Layout do monitor

rocky_hiker
fonte

Respostas:

6

Eu conheci o mesmo bug. Sua solução alternativa não funcionou para mim. Seu truque é simplesmente um gatilho que faz com que o bug não caia. Eu cavei um pouco e encontrei um cara legal com uma solução que poderia ajudar outras pessoas aqui também.

O principal problema é que o bug que encontramos aqui faz com que o monitor que está rolando para o outro tenha uma tela virtual com o tamanho de ambas as telas somadas. Portanto, a solução pode parecer desativar esse espaço virtual extra na tela para ajustar a resolução dos monitores. Isso geralmente é feito com o --panning AxBargumento - Nós o usamos para definir o tamanho do espaço virtual.

É assim que você pode fazer:

xrandr \
  --output LVDS-1-0 --mode 1920x1080 --panning 1920x1080 --pos 1920x0 \
  --output HDMI-0   --mode 1920x1080 --panning 1920x1080 --pos 0x0    --primary

(Barra \adicionada para usar novas linhas no comando.)

Infelizmente, o problema aqui é que o driver (que é o bug) parece sobrescrever o panorama que definimos (ou não). Mas o que não é necessário é definir outra parte do panorama: a área de rastreamento! A área de rastreamento é na verdade a parte da tela em que a câmera segue o cursor no monitor.

tl; dr: Portanto, a idéia é definir o panorama como o motorista, mas restringir a área de rastreamento.

Isso é feito com o seguinte comando:

xrandr \
  --output LVDS-1-0 --mode 1920x1080 \
  --output HDMI-0   --mode 1920x1080 --panning 3840x1080+0+0/1920x1080+1920+0/0/0/0/0    --primary

"Os quatro primeiros parâmetros [do panningargumento] especificam a área total de panorâmica, os próximos quatro a área de rastreamento de ponteiro (que é o padrão da mesma área). Os últimos quatro parâmetros especificam a borda e o padrão como 0." [ homem xrandr ]

Sebastian Barth
fonte
Coloquei o último comando em um script de shell que chamo via teclado (ao alternar o hardware da tela) e alguns segundos após o login automaticamente.
Sebastian Barth
Definir a área de rastreamento também foi crucial na minha configuração.
krlmlr
No final, sua solução não me ajudou, mas eu encontrei uma solução deixando as resoluções em paz. Comando para espelho: xrandr --output HDMI1 --same-as Laptop1e para estendido:xrandr --output Laptop1 --auto --output HDMI1 --auto --left-of Laptop1
Edenshaw