Como alinhar as bordas inferiores de dois monitores com o xrandr?

20

Eu tenho duas saídas que eu gostaria de usar no meu laptop:

  • LVDS1 - 1366 × 768
  • HDMI1 - 1920 × 1080

Eu configurei meus monitores da seguinte maneira:

xrandr --output LVDS1 --auto --output HDMI1 --auto --right-of LVDS1

Tudo está bem, mas meu laptop fica consideravelmente mais baixo que meu monitor externo e, com as bordas superiores das telas alinhadas, faz com que o salto de uma tela para a outra seja pouco intuitivo. Existe uma maneira de alinhar as bordas inferiores? Eu pensei que eu poderia usar a --posbandeira de fazer isso, mas eu tentei e não vi nenhuma diferença (talvez eu não sei como usá-lo corretamente).

elynnaie
fonte

Respostas:

36
 xrandr --output LVDS1 --auto --pos 0x312 --output HDMI1 --auto --pos 1366x0

Basicamente, --pos especifica a posição do canto superior esquerdo da tela no espaço da tela virtual. A tela virtual é uma tela que abrange todas as telas físicas. Essa é uma maneira muito genérica de especificar as posições da tela.

Você deseja esta configuração:

(virtual screen coordinates)
     0       1366                 1366+1920

   0           A-----------------------
               |                      |
               |                      |
               |                      |
  x? B---------|         HDMI         |
     |         |                      |
     |  LVDS   |       1920x1080      |
     |1366x768 |                      |
1080 ----------------------------------

E você precisa das coordenadas de A e B para usar na --posopção xé resolvido facilmente como 1080 - 768 = 312, então A está em (1366,0) e B está em (0,312).

Portanto, as opções --pos apropriadas são --pos 1366x0 para HDMI e --pos 0,312 para LVDS. Você não precisa especificar o tamanho da tela virtual (mais), ela é redimensionada automaticamente.

Observe que --pospode ser abusado, por exemplo, para criar um buraco entre suas duas telas ou criar sobreposições. A maioria (todos?) Do WM não conseguirá lidar com isso.

EDIT: oh, você quer o contrário, consertou isso.

BatchyX
fonte
Heh, percebi isso logo antes de você postar. Você seria capaz de explicar como a bandeira --pos funciona?
elynnaie
Obrigado, isso faz muito sentido! Eu acho que você deseja substituir 1600 por 1080 no seu exemplo, no entanto.
elynnaie
@denaje: Fixed.
BatchyX
2
Não há como fazer isso no xrandr sem usar valores mágicos? Eu gostaria de ter um script que funcione independentemente da resolução da tela que eu conecto. Se não, acho que poderia extrair os valores da saída do xrandr, mas isso soa um pouco tedioso ...
Khaur
5

Além da excelente resposta do @ BatchyX , uma opção alternativa - e IMO mais conveniente - poderia estar usando o ARandR (que significa "Outra GUI do XRandR"):

O ARandR foi projetado para fornecer um front end visual simples para o XRandR. As posições relativas do monitor são mostradas graficamente e podem ser alteradas de maneira arrastar e soltar.

Pode ser necessário instalá-lo primeiro, mas ele está disponível nos repositórios da maioria das distribuições . Aqui está como me parece no LXDE, para uma configuração com um monitor externo conectado via VGA, acima, e o monitor nativo (tamanho de netbook) abaixo dele:

Captura de tela do ARandR

valioso
fonte
3

Se você estiver procurando uma solução baseada em GUI baseada em arrastar e soltar, posso recomendar o ARandR .

Permite definir as configurações mais importantes do XRandR, por exemplo, posição e resolução da tela, que podem ser salvas na forma de um shell script que chama xrandrcom os parâmetros correspondentes.

Florian Franzen
fonte