Usando dois monitores no Linux

Por:
Usando dois monitores no Linux

Embora seja um recurso bem interessante, que está disponível desde os tempos do Windows 98, não sei quanta gente realmente usa dois monitores. Talvez pelo custo de ter duas placas de vídeo e dois monitores, talvez pelo medo de ser algo complicado de configurar a maioria acaba deixando a idéia de lado.

A configuração de dois monitores no Windows ja é conhecimento comum, você instala a segunda placa de vídeo, ativa-a na configuração do vídeo e em seguida indica a posição do segundo monitor em relação ao primeiro. Relativamente simples.

Este artigo é dedicado a ensinar como fazer o mesmo no Linux. A configuração também é simples, mas ainda não encontrei nenhum utilitário que faça isso automáticamente, por isso vou ensinar como ativar “na mão”, editando diretamente o arquivo de configuração do X. A vantagem é que você vai poder usar o que aprender aqui em qualquer distribuição, sem se preocupar se a ferramenta XYKZ está ou não instalada.

O Mandrake 9.1 (em diante) é capaz de detectar a segunda placa de vídeo automaticamente durante a instalação, se você estiver com medo de editar a configuração do X, pode começar testando com ele. Creio que em breve teremos mais opções de configuradores gráficos.

Vamos colocar a mão na massa então.

O suporte a múltiplos monitores no Linux é feito através das extensões Xinerama. Elas estão disponíveis desde o tempo do Xfree 2.x, mas antigamente era necessário sair recompilando o X inteiro para fazê-las funcionar. A partir do Xfree 4.0 elas vem incorporadas por default. Ou seja, você já tem todo o software necessário, só falta mesmo a configuração.

Lembre-se que muitas distribuições oferecem a opção de usar o Xfree 3.3.6 durante a instalação ao invés do 4.x para manter compatibilidade com algumas placas antigas que não são mais suportadas na versão recente. Se por acaso você está usando o Xfree antigo, vai precisar primeiro reconfigurar o vídeo.

O documento que originalmente descreve a configuração é o Xinerama HOWTO: http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Xinerama-HOWTO.html

Vamos então ao que interessa.

O arquivo de configuração do Xfree 4.x é o /etc/X11/XF86Config-4. Existe um outro arquivo na mesma pasta, o /etc/X11/XF86Config que era usado pelo Xfree 3.3.6 mas geralmente é encontrado até hoje por questão de compatibilidade.

Antes de mais nada, faça um backup do arquivo original, assim se as coisas não derem certo da primeira vez você poderá restaurar a configuração inicial e começar de novo:

cp /etc/X11/XF86Config-4 /etc/X11/XF86Config-4.original

Para isso cria o arquivo /etc/X11/XF86Config-4.original que você pode restaurar posteriormente com o comando:

cp /etc/X11/XF86Config-4.original /etc/X11/XF86Config-4

O Linux não tem registro nem configurações escondidas, ao restaurar um determinado arquivo de configuração você realmente desfaz todas as alterações. Não ficam “sobras” espalhadas pelo sistema.

O primeiro passo é naturalmente espetar a segunda placa de vídeo. Você pode tanto usar duas placas PCI quanto uma placa PCI e outra AGP. A segunda placa de vídeo pode ser qualquer placa PCI, mesmo que antiga. Eu por exemplo estou utilizando uma velha Trident 9680 de 2 MB. Quem tem que suportar o recurso de dois monitores é a primeira placa de vídeo, que deve ser alguma coisa mais atual.

Se você estiver usando uma placa AGP e outra PCI, lembre-se de verificar a opção “Initialize First” no Setup, que determina qual será a placa de vídeo “titular”. Ao usar duas placas PCI então a primeira placa será a que estiver no Slot PCI mais próximo da fonte.

No primeiro boot o segundo monitor nem dará sinal de vida. Não se preocupe pois isso é normal. Uma forma fácil de verificar se tudo está funcionando é rodar o comando “X -configure” (como root). Normalmente este comando deveria ser dado em texto puro, sem o X rodando. Mas, você pode executa-lo sem precisar fechar a seção atual:

a) Abra um terminal e logue-se como root.

b) Execute o comando: X -configure :2

c) Execute o comando: XFree86 -xf86config /root/XF86Config.new :2

Isto vai inicializar um X “pelado” nos dois monitores para que você possa verificar se a sua segunda placa de vídeo é compatível. Para voltar para a seção inicial, pressione Ctrl + Alt + F7

gdh1
O comando gera um arquivo de configuração modelo chamado /root/XF86Config.new. Nós usaremos algumas coisas detectadas pelo X e escritas neste arquivo na configuração do nosso /etc/X11/XF86Config-4 principal. Comece abrindo os dois arquivos:

kedit /etc/X11/XF86Config-4 &

kedit /root/XF86Config.new

Logo no comecinho do arquivo kedit /etc/X11/XF86Config-4 nós faremos uma pequena mudança. Logo abaixo da linha “Screen 0 “Screen0″ 0 0”, adicionaremos uma segunda linha que ativa o segundo monitor. A nova linha está em negrito:

Section “ServerLayout”
Identifier “XFree86 Configured”
Screen 0 “Screen0” 0 0
Screen 1 “Screen1” RightOf “Screen0”
InputDevice “Keyboard0” “CoreKeyboard”
InputDevice “PS/2 Mouse” “CorePointer”
EndSection

O “RightOf” (à direita de) indica a posição so segundo monitor em relação ao primeiro, o que determina como o mouse vai se comportar na hora de mudar entre os dois. Se ele estiver à esquerda do primeiro (como na minha foto) você pode substituir por “LeftOf”, se ele estiver em cima use o “Above” e se ele estiver abaixo substitua por “Below”

Logo abaixo você deve adicionar três linhas, que fazem o segundo monitor ser inicializado por default:

Section “ServerFlags”
Option “Xinerama” “true”
EndSection

Um detalhe importantíssimo é que caso já exista uma seção “Server Flags” com alguma opção dentro, você deve apenas adicionar a linha Option “Xinerama” “true” dentro da seção que já existe e não cliar outra. Em geral, depois da alteração a seção ficará parecida com:

Section “ServerFlags”
Option “Xinerama” “true”
Option “AllowMouseOpenFail” “true”
EndSection

O restante da configuração do X é composto pelas seções “Input Device” (onde vai a configuração do teclado e do mouse), “Monitor” (configuração do monitor, como o nome sugere), “Device” (que indica o driver da placa de vídeo) e a seção “Screen”, que indica qual resolução e profundidade de cores será usada.

Para ativar a segunda placa de vídeo nós deveremos duplicar as seções Monitor, Device e Screen, adicionando configurações separadas para a segunda placa e monitor.

Se você vai usar a mesma resolução e taxa de atualização nos dois monitores fica mais fácil, pois você vai precisar apenas copiar as seções Monitor e Screen, alterando só o nome. Não é preciso usar dois monitores iguais, apenas verificar se o segundo suporta mesma configuração que você está usando no primeiro. Você pode começar usando 1024×768 com 60 hz de atualização, que quase todos os monitores de 14″ ou mais já suportam.

Vamos começar então. Descendo um pouco você verá a seção “Monitor” que em muitas distribuições pode ser bem grnade, cheia de modos alternativos. Mas não importa muito o conteúdo, basta dar um Ctrl+C, Ctrl+V em tudo.

No meu micro a seção original é:

Section “Monitor”
Identifier “Monitor0”
HorizSync 31.5-95# Warning: This may fry old Monitors
VertRefresh 50-150# Very conservative. May flicker.
vendorname “Typical Monitors”
modelname “1280×1024, 75Hz”
ModeLine “1024×768/85Hz” 98.9 1024 1056 1216 1408 768 782 788 822 -HSync -VSync
ModeLine “1024×768/60Hz” 65 1024 1032 1176 1344 768 771 777 806 -HSync -VSync
ModeLine “800×600/60Hz” 40 800 840 968 1056 600 601 605 628 +HSync +VSync
EndSection

A adicionei a cópia logo abaixo dela:

Section “Monitor”
Identifier “Monitor1”
HorizSync 31.5-95# Warning: This may fry old Monitors
VertRefresh 50-150# Very conservative. May flicker.
vendorname “Typical Monitors”
modelname “1280×1024, 75Hz”
ModeLine “1024×768/85Hz” 98.9 1024 1056 1216 1408 768 782 788 822 -HSync -VSync
ModeLine “1024×768/60Hz” 65 1024 1032 1176 1344 768 771 777 806 -HSync -VSync
ModeLine “800×600/60Hz” 40 800 840 968 1056 600 601 605 628 +HSync +VSync
EndSection

Note que eu mudei o Identifier “Monitor0” para Identifier “Monitor1”. Esta linha indica justamente o “nome” do segundo monitor, que como disse acima, precisa ser alterado.

Logo abaixo vem a seção “Device”, com a configuração da placa de vídeo. Esta seção ja vai dar um pouquinho mais de trabalho, pois é preciso indicar o driver que será usado para a placa de vídeo.

A minha placa principal é uma TnT2 AGP, com os drivers da nVidia instalados e a minha segunda placa é uma Trident 9680 de 2MB. A seção “Device” original era:

Section “Device”
Identifier “Card0”
Driver “nvidia”
VendorName “All”
BoardName “All”
EndSection

E a nova seção que adicionei para ativar a Trident ficou:

Section “Device”
Identifier “Card1”
Driver “trident”
BusID “PCI:2:10:0”
vendorname “trident”
boardname “trident9680”
EndSection

O “Identifier”, “vendorname” e “boardname” são apenas para seu controle, podem ser qualquer coisa. O que interessa mesmo são as seções “Driver” e “BusID”, que devem ter as configurações corretas. Mas, não é preciso ficar quebrando a cabeça para descobrir quais são as configurações, pois o comando “X -configure :2” que rodamos acima já detectou a placa para nós. Olhe dentro daquele arquivo /root/XF86Config.new que abrimos anteriormente e você verá a configuração já mastigadinha. No meu caso estava:

Section “Device”
Identifier “Card1”
Driver “trident”
VendorName “Trident Microsystems”
BoardName “TGUI 9660/938x/968x”
BusID “PCI:2:10:0”
EndSection

Você pode simplesmente copiar a seção toda de um arquivo para o outro, sem alterar nada.

Finalmente, falta duplicar a seção “Screen”, assim como fizemos com a configuração do monitor. A minha seção “Screen” original, com a configuração para a TnT2 era:

Section “Screen”
Identifier “Screen0”
Device “Card0”
Monitor “Monitor0”
DefaultColorDepth 16
SubSection “Display”
Depth 16
Modes “1024×768/60Hz” “640×480”
Virtual 0 0
EndSubSection
EndSection

A segunda seção, que adicionei logo abaixo:

Section “Screen”
Identifier “Screen1”
Device “Card1”
Monitor “Monitor1”

DefaultColorDepth 16
SubSection “Display”
Depth 16
Modes “1024×768/60Hz” “640×480”
Virtual 0 0
EndSubSection
EndSection

Veja que alterei as linhas Device e Monitor, colocando os nomes do segundo monitor (do jeito que coloquei na seção “Monitor”) e da segunda placa de vídeo (e exatamente como está escrito na seção Device).

Pronto, agora só precisamos recompilar o Kernel adicionando o patch para o Xinerama, baixar a versão mais recente do X e matar dois frangos para que tudo funcione…

Haha, é brincadeira! Depois de salvar o arquivo o segundo monitor já deve estar funcionando. Basta dar um Ctrl + Alt + Backspace para reiniciar o X ou, se preferir, dar um reset. 😛

gdh2
Se não funcionar da primeira vez, restaure o backup do arquivo de configuração do X que criamos no início, dando um:

cp /etc/X11/XF86Config-4.original /etc/X11/XF86Config-4

(como root)

E comece de novo. Provavelmente você deixou faltar alguma linha na hora de copiar e colar as seções. Como você pode ver, a lógica não é muito complicada e não é preciso instalar nenhum programa adicional. Com um pouco de prática você vai ser capaz de fazer isso em poucos minutos em qualquer distribuição, já que a configuração é a mesma para qualquer uma.

Este é o meu arquivo /etc/X11/XF86Config-4 depois de todas as alterações (exatamente como está funcionando na minha máquina, com os comentários e tudo) que você pode verificar caso ainda tenha alguma dúvida:

XF86Config-4.txt


Xinerama x KDE

Praticamente todos os gerenciadores de janelas oferecem um bom suporte ao Xinerama. Você pode arrastar janelas entre os dois monitores e até mesmo dimensionar as janelas de modo que elas ocupem as telas dos dois monitores, útil para programas de imagem ou CAD, onde é preciso ter muito espaço.

Exemplos clássicos são abrir o gimp e deixar a imagem que está sendo editada num monitor e as barras de ferramentas no outro; deixar o navegador em um e o ICQ/IRC/MSN no segundo, deixar uma janela do VMware com um segundo sistema operacional aberto no segundo monitor e assim por diante.

gdh3
O sistema passa a enxergar os dois monitores como se fossem um único desktop, tanto que se você tirar um screenshot da tela usando o ksnapshot por exemplo, vai ver as imagens dos dois “coladas”:

gdh4
Se você quiser ter uma melhor qualidade, experimente usar dois monitores de tela plana, se possível dois monitores de LCD. O monitores CRT tradicionais tem a tela angulada, o que dá um efeito muito estranho ao colocar uma janela entre os dois monitores.

Se por acaso os dois monitores estiverem se comportando como se fosem duas seções separadas do X, sem o recurso de arrastar janelas significa que o Xinerama NÃO está funcionando corretamente. Em geral o problema tem a ver com a seção “Server Flags” do arquivo /etc/X11/XF86Config-4, onde o Xinerama é ativado.

Um exemplo de configuração que não funciona:

Section “ServerFlags”
Option “Xinerama” “true”
EndSection

Section “ServerFlags”
Option “AllowMouseOpenFail” “true”
EndSection

Veja que a seção está duplicada. Pelas regras da configuração do arquivo só pode existe uma seção “Server Flags”, o X passa então a simplesmente ignorar a primeira, onde está a instrução para habilitar o Xinerama. No final acaba sendo como se você não tivesse adicionado a linha.

O correto é colocar todas as opções dentro de uma única seção, como em:

Section “ServerFlags”
Option “Xinerama” “true”
Option “AllowMouseOpenFail” “true”
EndSection

O KDE possui algumas opções relacionadas ao Xinerama. Por exemplo, para escolher em qual tela a barra de tarefas ficará, clique com o botão direito sobre uma área vazia e acesse a opção “Configurar Painel”. A ativar o Xinerama aparecerá uma opção “Tela Xinerama”.

gdh5
Você encontrará mais algumas opções no KControl em Ambiente de Trabalho > Comportamento da jenela > Avançado.

gdh6

Usando três ou mais monitores

O Xinerama não se limita a apenas duas placas de vídeo e dois monitores. Em teoria você pode usar quantas placas for possível instalar na placa mãe, 3, 5 ou até 7 numa placa com um slot AGP e 6 PCI.

Para isso você deve repetir os passos acima, adicionando uma seção “Monitor, “Device” e “Screen” para cada nova placa de vídeo. Se você tiver 3 placas, você terá três seções “Monitor” e assim por diante.

Não se esqueça de também adicionar uma nova linha na seção “Server Layout” para cada nova placa. Com tres placas a seção ficaria assim:

Section “ServerLayout”
Identifier “XFree86 Configured”
Screen 0 “Screen0” 0 0
Screen 1 “Screen1” RightOf “Screen0”
Screen 2 “Screen1” LeftOf “Screen0”

InputDevice “Keyboard0” “CoreKeyboard”
InputDevice “PS/2 Mouse” “CorePointer”
EndSection

Você não é obrigado a usar a mesma resolução e taxa de atualização para todas as placas, você pode usar por exemplo um monitor de 17″ a 1280×1024 e dois monitores de 15″ a 1024×768 por exemplo, mas, é obrigatório utilizar o mesmo número de bits de cor para todos os monitores. Hoje em dia isso não deve ser o problema, pois qualquer placa de vídeo com 4 MB já suporta 1280×1024 com 24 bits de cor.

A configuração da resolução e taxa de atualização para cada monitor vai dentro da seção “Screen” referente a ele. Esta configuração que usei como exemplo usa 1024×768 com 60 Hz e 16 bits de cor:

Section “Screen”
Identifier “Screen0”
Device “Card1”
Monitor “Monitor1”
DefaultColorDepth 16
SubSection “Display”
Depth 16
Modes “1024×768/60Hz” “640×480”
Virtual 0 0
EndSubSection
EndSection

Se você quisesse mudar para 800×600 com 75 Hz de taxa de atualização por exemplo, bastaria alterar o “1024×768/60Hz” por “800×600/75Hz”:

Section “Screen”
Identifier “Screen0”
Device “Card1”
Monitor “Monitor1”
DefaultColorDepth 16
SubSection “Display”
Depth 16
Modes “800×600/75Hz” “640×480”
Virtual 0 0
EndSubSection
EndSection

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X