Dos monitores (dual-head) con xrandr en Linux

Este manual trata algunas prestaciones interesantes que ofrece el driver intel (para tarjetas nuevas) por medio de la utilidad xrandr. Lo realmente interesante es que puedes activar y desactivar la salida externa y cambiar la resolución de ambos monitores sin tener que reiniciar el servidor X.

Todo lo que cuento en esta receta sólo lo he probado con Debian en un VAIO VGN-SZ4XN utilizando la tarjeta Intel. Por supuesto, eso no excluye que pueda funcionar en otras máquinas con otras tarjetas de vídeo u otras distros GNU.

Descripcion del equipo

  • Debian GNU/Linux
  • xrandr 1.2
  • xserver-xorg-video-intel 2.0.0 (también sirve xserver-xorg-video-i810)

Información

Lo primero es ver qué tienes:

[root@unidadlocal.com ~]# xrandr
Screen 0: minimum 320 × 200, current 1280 × 800, maximum 2560 × 1024
VGA disconnected (normal left inverted right)
LVDS connected 1280×800+0+0 (normal left inverted right) 0mm x 0mm
   1280×800       59.9*+   60.0  
   1280×768       60.0  
   1152×768       54.8  
   1024×768       85.0     75.0     70.1     60.0  
   832×624        74.6  
   800×600        85.1     72.2     75.0     60.3     56.2  
   640×480        85.0     72.8     75.0     59.9  
   720×400        85.0  
   640×400        85.1  
   640×350        85.1  
TV disconnected (normal left inverted right)

Y si conectas un monitor a la salida VGA (sin reiniciar las X ni nada):

[root@unidadlocal.com ~]# xrandr
Screen 0: minimum 320 × 200, current 1280 × 800, maximum 2560 × 1024
VGA connected (normal left inverted right)
   1280×960       60.0  
   1280×800       60.0  
   1152×768       54.8  
   800×600        56.2  
   640×480        59.9  
LVDS connected 1280×800+0+0 (normal left inverted right) 0mm x 0mm
   1280×800       59.9*+   60.0  
   1280×768       60.0  
   1152×768       54.8  
   1024×768       85.0     75.0     70.1     60.0  
   832×624        74.6  
   800×600        85.1     72.2     75.0     60.3     56.2  
   640×480        85.0     72.8     75.0     59.9  
   720×400        85.0  
   640×400        85.1  
   640×350        85.1  
TV disconnected (normal left inverted right)

Pues éstas son las resoluciones y frecuencias permitidas por el monitor del portátil (LVDS) y por el monitor externo que tengo conectado durante esta prueba (VGA).

Activando/desactivando la salida VGA

Lo siguiente hace que el monitor VGA muestre lo mismo que el LVDS, es decir, modo “clone”. Tan fácil como:

[root@unidadlocal.com ~]# xrandr —output VGA —mode 1280×800

Y para desactivarla:

[root@unidadlocal.com ~]# xrandr —output VGA —off

No es necesario que los dos monitores tengan la misma resolución, puedes poner la que quieras. El tamaño del escritorio se ajusta automáticamente de modo que el monitor con mayor resolución muestra un área adicional no visible en el monitor con menos resolución. Por ejemplo puedes hacer:

$ xrandr —output LVDS —mode 1280×800 —output VGA —mode 800×600

Escritorio extendido

También es posible definir un escritorio conjunto para los dos monitores (en lugar de usar “clone”). Para eso tienes que definir una posición, bien con pos o bien con uno de --left-of, right-of, above o below. Por ejemplo, suponiendo que ya tienes activada la VGA y fijada la resolución:

$ xrandr —output VGA —left-of LVDS

Aunque también lo puedes hacer todo en el mismo comando:

$ xrandr —output LVDS —mode 1280×800 —output VGA —mode 1024×768 —left-of LVDS

Puede que al intentar crear un escritorio grande te devuelva este error:

xrandr: screen cannot be larger than 2560×1024 (desired size 1280×1600)

Esto lo puedes arreglar definiendo un área suficientemente grande para el “Screen” (la primera línea que aparece al ejecutar xrandr). Para eso, modifica tu fichero

/etc/X11/xorg.conf

y añade una línea Virtual en Screen/Display, por ejemplo:

Section "Screen"
        Identifier      "Default Screen"
        Device          "Intel"
        Monitor         "Monitor"
        DefaultDepth    24
        SubSection "Display"
                Depth           24
                Modes           "1280x800" "1024x768" "800x600" "640x480"
                Virtual         2560 1600
        EndSubSection
EndSection

“La zona muerta”

En el modo de “escritorio extendido” también puedes usar resoluciones diferentes para cada monitor, pero aquí me he encontrado con un problema. En el monitor de menor resolución hay una “zona muerta” no visible, pero que pueden contener ventanas. Corresponde a la diferencia entre ambas resoluciones. Algo como:

+--------------+--------------+
|              |              |
|              |    800x600   |
|   1024x768   |              |
|              +--------------+
|              |  ZONA MUERTA
+--------------+

En otros drivers que dan una funcionalidad similar, como TwinView este problema está resuelto. Si sabes cómo solucionarlo con xrandr, por favor, deja comentario.

Activando resoluciones

A veces te encuentras con monitores o proyectores que disponen de resoluciones que por varias razones no aparecen cuando se consultan sus datos EDID. xrand no permite cambiar a resoluciones no reconocidas, pero afortunadamente se pueden añadir. Por ejemplo, el proyector Sony VPL-CS5 devuelve esto:

[root@unidadlocal.com ~]# xrandr
[...]
VGA connected (normal left inverted right x axis y axis)
   800x600        56.2
   640x480        60.0
[...]

Pero puedes añadir el maravilloso modo 1024×768 con:

$ xrandr —addmode VGA 1024×768

y verás que:

[…]
VGA connected (normal left inverted right x axis y axis)
   800×600        56.2  
   640×480        60.0  
   1024×768       85.0  
[…]

Ahora puedes cambiar a ese nuevo modo sin ningún problema.

Y añadiendo

Si al tratar de hacer lo que explica la sección anterior obtienes un error:

xrandr: cannot find mode “1024×768”

tendrás que añadir dicho modo antes de activarlo. Y para eso necesitas la resolución y la descripción del “ModeLine”, que puedes obtener con aplicaciones como gft y cvt (que pertenecen al paquete xserver-xorg-core).

$ gtf 1024 768 85
  # 1024×768 @ 85.00 Hz (GTF) hsync: 68.60 kHz; pclk: 94.39 MHz
  Modeline “1024×768_85.00”  94.39  1024 1088 1200 1376  768 769 772 807  -HSync +Vsync

Ahora puedes añadir y activar el modo:

$ xrandr —newmode 1024×768  94.39  1024 1088 1200 1376  768 769 772 807  -HSync +Vsync
$ xrandr —addmode 1024×768

como elegir en que pantalla se ejecutara una aplicación?

.
hola, he configurado mi pc con ubuntu 9.04 con 2
escritorios en 2 pantallas distintas, aunque una es monitor
(primario) y la otra TV (secundario).
El problema es que solo algunas aplicaciones que ejecuto
en el monitor secundario permanecen en ahí, osea se
ejecutan en el monitor secundario, y las demás se ejecutan
en el monitor primario, pese a que las haya ejecutado en el
monitor secundario, y no encuentro la manera de
configurarlo para que todos los programas ejecutados en el
el monitor secundario se ejecuten en el monitor secundario....
si me puedes ayudar te lo agradecería, de antemano gracias ;)