terça-feira, 24 de junho de 2008

Usando dois monitores no Linux


Depois de muito me matar tentando colocar meu notebook para funcionar com um monitor externo (como extensão do desktop, não como clone; também conhecido como Dual Head), acabei chegando a uma solução muito simples. Segue a solução, para quem sabe servir a alguém mais.

O processo foi realizado no Kubuntu 7.10, mas deve funcionar em outros sistemas (o guia que eu tomei como base era para o Debian; clique aqui para lê-lo).

Monitor LCD

Hardware usado

O hardware usado:

  • Notebook com placa de video Intel 915GM
  • Um velho monitor LG de 15" de tubo
Um detalhe a se notar é que as resoluções máximas da tela do notebook e do monitor externo são diferentes (1280x800 e 1024x768 respectivamente).

Como fazer?

  • Faça um backup do arquivo de configuração do Xorg (/etc/X11/xorg.conf). Assim, se algo der errado, terá para onde voltar.
  • Se você tem dois monitores lado a lado, digamos, com 1024 pixels de largura em cada, você terá um total de 2048 pixels de largura, e normalmente o X não permite uma coisa dessas. Altere o arquivo xorg.conf adicionando a opção Virtual LARGURA ALTURA (onde LARGURA e ALTURA são as dimensões em pixels do seu desktop virtual) na subseção Display, como no exemplo:
    Section "Screen"
            Identifier      "Default Screen"
            Device          "Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller"
            Monitor         "Generic Monitor"
            DefaultDepth    24
            SubSection "Display"
                    Modes           "1024x768"
                    Virtual         2560 1024
            EndSubSection
    EndSection
        
  • Conecte o cabo do monitor na saída VGA do notebook e reinicie o X (Ctrl+Alt+Backspace faz o serviço).
  • A tela de login deve aparecer com a imagem duplicada na tela do notebook e no monitor, e possivelmente com a resolução errada. Isso é normal, efetue o login.
  • Abra um terminal e execute o comando xrandr -q. Você deve ver informações sobre os monitores, como a seguir:
    $ xrandr -q
    Screen 0: minimum 320 x 200, current 2304 x 800, maximum 2560 x 1024
    VGA connected 1024x768+1280+0 (normal left inverted right) 270mm x 195mm
       1024x768       60.0*+   59.9
       832x624        74.6
       800x600        84.9     72.2     75.0     60.3     59.9     56.2
       640x480        85.0     84.6     75.0     72.8     66.7     60.0
       720x405        69.6
       720x400        70.1
    LVDS connected 1280x800+0+0 (normal left inverted right) 304mm x 190mm
       1024x768       60.0 +
       1280x800       59.9*+   60.0     59.9*
       1280x768       60.0
       800x600        60.3
       640x480        59.9
    TV disconnected (normal left inverted right)
        
  • É agora que vamos ajeitar as coisas. Abra um terminal e execute os comandos:

    $ xrandr --output LVDS --mode 1280x800
    Ajusta a resolução da tela do notebook. Substitua 1280x800 resolução correta

    $ xrandr --output VGA --right-of LVDS
    Posiciona o monitor à direita da tela principal. --right-of pode ser substituído por --left-of, --above ou --below.

    $ xrandr --output VGA --mode 1024x768 --rate 75
    Ajusta a resolução do monitor externo. Note que nesse caso, o refresh rate também é ajustado para 75Hz.
  • Os passos tendo dado certo, você pode criar um script e criar um atalho, ou configurá-lo para ser executado na inicialização do ambiente gráfico (usuários de KDE, salvem o script no diretório ~/.kde/Autostart). Não esqueça de dar permissões de execução ao script (chmod +x SCRIPT).

O que mais dá para fazer?

Além de estender o desktop a mais de um monitor, dá para fazer outras brincadeiras, como inverter ou rotacionar uma das telas, muito útil para quem tem daqueles monitores que podem ser postos na vertical. Veja o manual do xrandr, opção --rotate.

Não sei se é possível trocar o monitor conectado e reconfigurar tudo com o X rodando, mas acredito que não seja possível ainda com a versão do X do Ubuntu 7.10. Talvez isso até já seja possível, mas acredito mais que isso venha a ser possível num futuro próximo (ou até mesmo na versão atual).

Mas tem que ficar executando os comandos toda hora?

Existem tutoriais na internet ensinando como configurar o recurso de dual-head alterando o xorg.conf, e então a configuração fica fixa. Já vi funcionar dessa forma, é verdade. Mas as configurações são meio obscuras, e além de tudo, não consegui fazer funcionar com esse monitor, mesmo seguindo os mesmos passos do outro que funcionou.

Essa configuração com o xrandr, além de ter funcionado comigo de forma simples, ainda tem o benefício de poder alterar as configurações (posição das telas, resolução, refresh rate) em tempo real, sem ter que alterar o arquivo e reiniciar o X (fica mais parecido com a forma que o Windows lida com vários monitores sim, isso é uma boa coisa).

Além do mais, criar um script, como já falei, facilita a vida. Imagine que se você usa em monitores diferentes, ou sem monitor externo, pode ter um script para cada ocasião.

Esse negócio de dois monitores não é frescura?

Não. Pode parecer bobeira, que só é bonitinho de ver funcionar, mas no faz mágica para aumentar sua produtividade. Se tiver condições de ter, experimente. Mas já te adianto que vicia...


Compare preços de Celulares e smartphones, Playstation 2, Playstation 3, Nintendo Wii, Notebook, Câmeras digitais, Pen drive.

4 comments:

Rodrigo Menezes Blog disse...

Muito bom o seu artigo, funcionou muito bem comigo.

No meu caso com o Fedora 10 tive que criar o arquivo xorg.conf pois ele não vem mais, mas depois de criado funcionou de primeira.

Dúvida, ele colocou o meu monitor secundário como o primário (com a barra de tarefas, etc.) como inverter isso?

disse...

Legal ter funcionado, depois você poderia descrever como criou o xorg.conf que não existia.

A posição da barra de tarefas costuma ser independente de qual monitor é primário. O painel do KDE por exemplo pode ser colocado em qualquer das telas. Não sei se existe essa configuração no painel do Gnome, por exemplo, mas eu tentaria achar nas configurações da barra de tarefas.

Kizzy disse...

Olá. No meu caso a resolução máxima do notebook é 1280x800 e a do monitor é 1440x900. Ao aplicar os comandos a resuloção da tela do monitor é alterada e fica igual a resolução do monitor. Alguém sabe me ajudar a resolver este problema?

Lauro_Cavalcanti disse...

Ótimo artigo, difícil achar materias sobre esse assunto, pois bem meu caso é semelhante mas acontece que meu notebook quebrou a tela e uso um monitor externo para viver, no entanto quando vou assistir um video eu vejo ele sendo exibido no monitor quebrado mas no monitor externo ele fica preto uso a configuração de espelhos, bem se puder me dar uma dica fico agradecido. Obrigado.