xrandr (Português)

From ArchWiki

Status de tradução: Esse artigo é uma tradução de xrandr. Data da última tradução: 2020-08-14. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

O xrandr é um utilitário de configuração oficial para o RandR (Redimensionar e girar) a extensãoX Window System. Pode ser usado para definir o tamanho, orientação ou reflexo das saídas para uma tela. Para configurar vários monitores, consulte a página Multihead.

Instalação

Instale o pacote xorg-xrandr.

Front-ends gráficos

  • ARandR — Fornece um front-end visual simples para XRandR. As posições relativas do monitor são mostradas graficamente e podem ser alteradas arrastando e soltando.
https://christian.amsuess.com/tools/arandr/ || arandr
  • LXRandR — Resolução de tela e ferramenta de gerenciamento de monitores externos para LXDE.
https://wiki.lxde.org/en/LXRandR || GTK 2: lxrandr, GTK 3: lxrandr-gtk3

Front-ends CLI

  • xlayoutdisplay — Detecta e organiza exibições. Alças: estado da tampa do laptop, taxas de atualização mais altas disponíveis, cálculo e aplicação do DPI real. Melhor usado em .xinitrc, então pode ser chamado ao conectar/desconectar monitores ou fechar a tampa do laptop.
https://github.com/alex-courtis/xlayoutdisplay || xlayoutdisplayAUR

Configuração de teste

Quando executado sem qualquer opção, o xrandr mostra os nomes de diferentes saídas disponíveis no sistema (VGA-1, HDMI-1, etc.) e as resoluções disponíveis em cada um, com um * após a atual e um + após a preferida:

xrandr
Screen 0: minimum 320 x 200, current 3200 x 1080, maximum 8192 x 8192
VGA-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 531mm x 299mm
   1920x1080     59.93 +  60.00*   50.00    59.94  
   1920x1080i    60.00    50.00    59.94  
   1680x1050     59.88  
…
Nota: Se a sua resolução não estiver presente na lista acima, consulte #Adicionando resoluções não detectadas

Você pode usar xrandr para definir uma resolução diferente (deve estar presente na lista acima) em alguma saída:

$ xrandr --output HDMI-1 --mode 1920x1080

Quando várias taxas de atualização estão presentes na lista, ela pode ser alterada pela a opção --rate, ao mesmo tempo ou de forma independente. Por exemplo:

$ xrandr --output HDMI-1 --mode 1920x1080 --rate 60

A opção --auto irá ligar a saída especificada se estiver desligada e definir a resolução preferida (máxima):

$ xrandr --output HDMI-1 --auto

É possível especificar várias saídas em um comando, por exemplo, desligar HDMI-1 e ligar HDMI-2 com resolução preferida:

$ xrandr --output HDMI-1 --off --output HDMI-2 --auto
Nota:
  • Alterações que você faz usando xrandr durará apenas na sessão atual.
  • xrandr tem muito mais recursos - veja xrandr(1) para detalhes.

Configuração

O xrandr é apenas uma interface simples para a extensão RandR e não possui arquivo de configuração. No entanto, existem várias maneiras de obter configuração persistente:

  1. A extensão RandR pode ser configurada via configuração do X, veja Multihead#RandR para detalhes. Este método fornece apenas configuração estática.
  2. Se você precisa de configuração dinâmica, você precisa executar o comando xrandr cada vez que o servidor X é iniciado. Veja na inicialização do Xorg para detalhes. Este método tem a desvantagem de ocorrer bastante tarde no processo de inicialização, portanto, não irá alterar a resolução do gerenciador de exibição se você usar um.
  3. Scripts personalizados chamando o xrandr pode ser vinculado a eventos (por exemplo, quando o monitor externo está conectado), veja udev ou acpid para detalhes. O #Scripts A seção fornece alguns scripts de exemplo que podem ser úteis para essa finalidade.
Dica: Tanto o KDM quanto o GDM têm scripts de inicialização que são executados quando o X é iniciado. Para GDM, eles estão em /etc/gdm/, enquanto para KDM isso é feito em /usr/share/config/kdm/Xsetup e para SDDM em /usr/share/sddm/scripts/Xsetup. Este método requer acesso root e mexer nos arquivos de configuração do sistema, mas terá efeito mais cedo no processo de inicialização do que usar o xprofile.

Scripts

Alternar monitor externo

Este script alterna entre um monitor externo (especificado por $extern) e um monitor padrão (especificado por $intern), para que apenas um monitor esteja ativo por vez.

O monitor padrão deve estar conectado ao executar o script, o que sempre é verdade para um laptop.

#!/bin/bash
intern=LVDS1
extern=VGA1

if xrandr | grep "$extern disconnected"; then
    xrandr --output "$extern" --off --output "$intern" --auto
else
    xrandr --output "$intern" --off --output "$extern" --auto
fi
Nota: Para deixar o monitor padrão ativado quando um monitor externo for conectado, substitua o else dessa forma xrandr --output "$intern" --primary --auto --output "$extern" --right-of "$intern" --auto.

Alternar configurações automaticamente com autorandr

O pacote autorandr permite que você configure facilmente o xrandr "profiles" que será ativado automaticamente quando você conectar / desconectar monitores. O Autorandr é executado automaticamente sempre que um monitor é conectado ou desconectado graças a um hook do udev. Veja a homepage para exemplos de uso.

Gerenciar 2 monitores

O monsAUR é um script de shell compatível com POSIX para gerenciar rapidamente a exibição de 2 monitores.

Ele fornece modos bem conhecidos como computador, duplicar, estender e modo de projetor, bem como selecionar e posicionar um ou dois monitores entre aqueles conectados (para mais detalhes, veja mons).

Exemplo 3

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Basic shell mistakes: relying on quoting errors to relay arguments (instead of using arrays), convoluted grep+sed pipes (instead of awk), echo -e (instead of printf), ancient backtick format (instead of $()) (Discuss in Talk:Xrandr (Português))

Este script itera por meio de monitores conectados, seleciona o monitor ativo no momento, liga o próximo e desliga os outros:

# obter informações do xrandr
connectedOutputs=$(xrandr | grep " connected" | sed -e "s/\([A-Z0-9]\+\) connected.*/\1/")
activeOutput=$(xrandr | grep -E " connected (primary )?[1-9]+" | sed -e "s/\([A-Z0-9]\+\) connected.*/\1/")

# inicializar variáveis
execute="xrandr "
default="xrandr "
i=1
switch=0

for display in $connectedOutputs
do
	# construir configuração padrão
	if [ $i -eq 1 ]
	then
		default=$default"--output $display --auto "
	else
		default=$default"--output $display --off "
	fi

	# construir configuração de "switching"
	if [ $switch -eq 1 ]
	then
		execute=$execute"--output $display --auto "
		switch=0
	else
		execute=$execute"--output $display --off "
	fi

	# verifique se a próxima saída deve ser ligada
	if [ $display = $activeOutput ]
	then
		switch=1
	fi

	i=$(( $i + 1 ))
done

# verifique se a configuração padrão precisa ser executada e execute-a
echo "Configuração resultante:"
if [ -z "$(echo $execute | grep "auto")" ]
then
	echo "Comando: $default"
	`$default`
else
	echo "Comando: $execute"
	`$execute`
fi
echo -e "\n$(xrandr)"

Evite o travamento do X com xrasengan

Use esta solução alternativa para ligar as saídas conectadas que podem estar no modo suspenso e, portanto, mostradas como desconectadas, como costuma ser o caso de monitores DisplayPort:

declare -i count=2
declare -i seconds=1

while ((count)); do
    xrandr >/dev/null
    sleep $seconds
    ((count--))
done

O xrasenganAUR é um wrapper xrandr com esta solução alternativa embutida.

$ xrasengan --force -on DisplayPort-0 -off HDMI-0

Com a opção --force, xrasengan irá atualizar o status de todas as saídas antes que HDMI-0 seja desligado, evitando uma falha do X se fossem as únicas saídas conectadas/ativas.

Para forçar o recarregamento das configurações atuais, o xrasengan fornece uma opção --try-reload-active-layout, que usa --force e unxrandr do pacote arandr para montar a linha de comando:

$ xrasengan --try-reload-active-layout

Isso pode ser usado na unidade do systemd ou em um teclado para evitar tela em branco ao retomar os monitores DisplayPort da suspensão.

Configuração usando arandr

arandr can graphically arrange your monitors, change resolutions, and save a script to duplicate your setup. By default, if you "Save As" it will be saved in ~/.screenlayout/. These files can then be added to your ~/.profile. Sometimes problems arise from running the arandr script too soon after login.

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Graphical things do not belong into ~/.profile. (Discuss in Talk:Xrandr (Português))

Edit ~/.profile

$ sleep 3
$ /home/<user>/.screenlayout/myLayout.sh

Solução de problemas

Adicionando resoluções não detectadas

Devido a erros de hardware ou drivers, as resoluções corretas do seu monitor nem sempre podem ser detectadas pelo xrandr. Por exemplo, o bloco de dados EDID consultado no monitor pode estar incorreto. No entanto, podemos adicionar as resoluções desejadas ao xrandr. Além disso, este mesmo procedimento pode ser usado para adicionar taxas de atualização que você sabe que são suportadas, mas não habilitadas pelo seu driver.

Primeiro execute gtf ou cvt para obter o Modeline para a resolução que queremos:

$ cvt 1280 1024
# 1280x1024 59.89 Hz (CVT 1.31M4) hsync: 63.67 kHz; pclk: 109.00 MHz
Modeline "1280x1024_60.00"  109.00  1280 1368 1496 1712  1024 1027 1034 1063 -hsync +vsync
Dica: Para algumas telas LCD (por exemplo, Samsung 2343NW, Acer XB280HK), o comando cvt -r (= com ponto cego reduzido) deve ser usado.
Dica: Se você descobrir que a tela fica em branco quando a linha de modelo é aplicada, tente uma taxa de atualização mais baixa (por exemplo, 30 ou 45 em vez de 60). A taxa de atualização deve ser passada como o terceiro argumento: cvt 2560 1440 45
Nota: Se o driver de vídeo Intel xf86-video-intel é usado, pode relatar a resolução desejada junto com suas propriedades em /var/log/Xorg.0.log — use isso primeiro se for diferente da saída de gtf ou cvt. Por exemplo, o log e seu uso com o xrandr:
[    45.063] (II) intel(0): clock: 241.5 MHz   Image Size:  597 x 336 mm
[    45.063] (II) intel(0): h_active: 2560  h_sync: 2600  h_sync_end 2632 h_blank_end 2720 h_border: 0
[    45.063] (II) intel(0): v_active: 1440  v_sync: 1443  v_sync_end 1448 v_blanking: 1481 v_border: 0
xrandr --newmode "2560x1440" 241.50 2560 2600 2632 2720 1440 1443 1448 1481 -hsync +vsync

Você também pode encontrar linhas semelhantes para o driver de configuração de modo.

Em seguida, criamos um novo modo xrandr. Observe que a palavra-chave Modeline precisa ser omitida.

$ xrandr --newmode "1280x1024_60.00"  109.00  1280 1368 1496 1712  1024 1027 1034 1063 -hsync +vsync
Dica: Alguns programas têm problemas para reconhecer os modos marcados com "_60.00" veja [1]

*/

Depois de criá-lo, precisamos de uma etapa extra para adicionar este novo modo à nossa saída atual (VGA1). Usamos apenas o nome do modo, uma vez que os parâmetros foram configurados anteriormente.

$ xrandr --addmode VGA1 1280x1024_60.00

Agora mudamos a resolução da tela para a que acabamos de adicionar:

$ xrandr --output VGA1 --mode 1280x1024_60.00

Observe que essas configurações só têm efeito durante esta sessão.

Se você não tiver certeza sobre a resolução que irá testar, você pode adicionar um sleep 5 e uma linha de comando de resolução segura a seguir, como esta:

$ xrandr --output VGA1 --mode 1280x1024_60.00 && sleep 5 && xrandr --newmode "1024x768-safe" 65.00 1024 1048 1184 1344 768 771 777 806 -HSync -VSync && xrandr --addmode VGA1 1024x768-safe && xrandr --output VGA1 --mode 1024x768-safe

Além disso, mude VGA1 para corrigir o nome da saída.

A soma de verificação EDID é inválida

Se o método anterior resultar em um *ERROR* EDID checksum is invalid erro durante a inicialização, veja KMS#Forcing modes and EDID e [2].

Ou xrandr --addmode pode dar-lhe o erro X Error of failed request: BadMatch. Os usuários da NVIDIA devem ler NVIDIA/Troubleshooting#xrandr BadMatch. BadMatch pode indicar uma soma de verificação EDID inválida. Para verificar se este é o caso, execute o X no modo detalhado (por exemplo startx -- -logverbose 6) e verifique seu log do Xorg para mensagens sobre um EDID incorreto.

A resolução da tela volta após um piscar

Se você usa GNOME e seu monitor não tem um EDID, acima #Adicionando resoluções não detectadas pode não funcionar, com a tela piscando apenas uma vez, após xrandr --output.

Edite o arquivo ~/.config/monitors.xml, ou exclua-o completamente e reinicie.

It is better explained in this article.

Adicionando resoluções não detectadas permanentemente

Assim que uma resolução adequada for encontrada usando o xrandr, o modo pode ser adicionado permanentemente criando uma entrada em /etc/X11/xorg.conf.d/:

/etc/X11/xorg.conf.d/10-monitor.conf
Section "Monitor"
    Identifier "VGA1"
    Modeline "1280x1024_60.00"  109.00  1280 1368 1496 1712  1024 1027 1034 1063 -hsync +vsync
    Option "PreferredMode" "1280x1024_60.00"
EndSection

Section "Screen"
    Identifier "Screen0"
    Monitor "VGA1"
    DefaultDepth 24
    SubSection "Display"
        Modes "1280x1024_60.00"
    EndSubSection
EndSection

Section "Device"
    Identifier "Device0"
    Driver "intel"
EndSection

Substituir intel com o driver certo, por exemplo: nvidia. Quando o servidor X for reiniciado, você poderá definir a nova resolução.

Se isso não funcionar para você, tente remover as seções Tela e Dispositivo e apenas sair da seção monitor. [3]

Resolução menor do que o esperado

{{Dica|Tente [[#Adicionando resoluções não detectadas] primeiro, se não funcionar, você pode tentar este método.}}

Se sua placa de vídeo for reconhecida, mas a resolução for menor do que o esperado, você pode tentar fazer isso.

Histórico: Placa de vídeo ATI X1550 e dois monitores LCD DELL 2408 (até 1920x1200) e Samsung 206BW (até 1680x1050). No primeiro login após a instalação, o padrão de resolução é 1152x864. xrandr não lista nenhuma resolução superior a 1152x864. Você pode querer tentar editar /etc/X11/xorg.conf, adicionar uma seção sobre tela virtual, logout, login e ver se isso ajuda. Se não, então continue a ler.

Alterar xorg.conf

/etc/X11/xorg.conf
Section "Screen"
        ...
        SubSection "Display"
                Virtual 3600 1200
        EndSubSection
EndSection

Sobre os números: DELL à esquerda e Samsung à direita. Portanto, a largura virtual é a soma de ambas as larguras do LCD 3600 = 1920 + 1680; A altura então é calculada como o máximo deles, que é máximo (1200,1050) = 1200. Se você colocar um LCD acima do outro, use este cálculo: (max (largura1, largura2), altura1 + altura2).

Correção de resoluções de tv overscan através da propriedade underscan

Com uma TV de tela plana, w:overscan parece que a foto é "ampliada" então as bordas são cortadas.

Verifique na sua TV se há um parâmetro a ser alterado. Caso contrário, verifique se a saída tem suporte para a propriedade underscan (xrandr --prop), em caso afirmativo, aplique um underscan e alterar os valores das bordas. O necessário underscan vborder e underscan hborder os valores podem ser diferentes para você, basta verificar e alterar para mais ou menos.

$ xrandr --output HDMI-0 --set underscan on --set "underscan vborder" 25 --set "underscan hborder" 40

Correção de resoluções de tv overscan via --transform

Se o underscan não estiver disponível, outra solução está usando xrandr --transform a,b,c,d,e,f,g,h,i, que aplica uma matriz de transformação na saída. Veja a página de manual xrandr(1) § RandR_version_1.3_options para a explicação da transformação.

Por exemplo, a transformação escalando coordenadas horizontais por 0.8, coordenadas verticais por 1.04 e mover a tela 35 pixels para a direita e 19 pixels para baixo é:

$ xrandr --output HDMI1 --transform 0.80,0,-35,0,1.04,-19,0,0,1

RGB total em HDMI

Pode ocorrer que o driver Intel não configurará corretamente a saída do monitor HDMI. Ele definirá uma faixa de cores limitada (16-235) usando o Broadcast RGB property, e o preto não parecerá preto, será cinza.

Veja Intel graphics#Weathered colors (color range problems).

Desativando monitor fantasma

Em alguns casos, um monitor inexistente pode ser detectado pelo sistema. Para desativá-lo, encontre o nome da saída fantasma, por exemplo: VGA1, e desligue-o com

$ xrandr --output VGA1 --off

Para tornar isso permanente, adicione o seguinte a uma entrada em /etc/X11/xorg.conf.d/:

/etc/X11/xorg.conf.d/10-monitor.conf
Section "Monitor"
    Identifier "VGA1"
    Option "Ignore" "true"
EndSection

Veja também