Hace poco he instalado GNU/Linux en el portátil de la empresa y una de las cosas que he tenido que configurar son los dos monitores que uso (normalmente se le llama dual head). Uno es el del portátil (con una resolución de 1280×800) y un TFT de 17” (de 1280×1024). La verdad es que nunca había necesitado hacer esto y por lo tanto no sabía si era fácil o difícil, lo único que me sonaba era que con Xinerama se conseguía.
Los primeros intentos con Xinerama no funcionaron. El problema era que la pantalla del portátil es panorámica (16:9) y la del TFT es normal (4:3) y ahí es donde se volvía loco. Podía usar resoluciones distintas pero con la misma relación de aspecto en los dos monitores, o bien 16:9 ó 4:3, pero nunca mezclarlas.
Buscando soluciones por Internet encontré XRandR, que es una librería que permite cambiar el tamaño y rotar la pantalla, y además funciona bien con las tarjetas de Intel, que es la que trae el portátil. El problema es que la versión estable de Xorg todavía no soporta las opciones que se necesitan, por lo que hay que instalar una versión beta. En mi caso, que uso Archlinux, se haría de la siguiente forma:
Primero hay que actualizar a las últimas versiones estables varios protocolos de las X.
# pacman -S xproto glproto inputproto
Luego, actualizaremos un par de paquetes, también relacionados con las X.
# pacman -S libxi libdrm
Instalamos la última versión de Xorg (actualmente, en los repositorios de Arch, está la versión 1.4)
# pacman -S testing/xorg-server
Una vez hecho esto deberíamos tener las X funcionando correctamente. Ahora nos falta instalar los nuevos drivers de intel (que actualmente corresponde a la versión 2.1.1)
# pacman -S testing/xf86-video-intel
Por último instalamos xrandr (versión 1.2.2)
# pacman -S testing/libxrandr
Si ejecutamos xrandr, con los dos monitores encendidos, obtenemos lo siguiente:
$ xrandr Screen 0: minimum 320 x 200, current 2560 x 1024, maximum 2560 x 1024 VGA connected 1280x1024+1280+0 (normal left inverted right x axis y axis) 312mm x 234mm 1280x1024 64.9* 1152x864 75.0 1024x768 70.1 60.0 832x624 74.6 800x600 72.2 75.0 60.3 56.2 640x480 75.0 72.8 66.7 60.0 720x400 70.1 LVDS connected 1280x800+0+0 (normal left inverted right x axis y axis) 0mm x 0mm 1280x800 60.2*+ 85.0 75.0 70.0 60.0 1280x768 85.0 75.0 70.0 60.0 1280x720 85.0 75.0 70.0 60.0 1152x768 54.8 1024x768 85.0 75.0 70.1 60.0 832x624 74.6 800x600 85.1 72.2 75.0 60.3 56.2 640x480 85.0 72.8 75.0 59.9 720x400 85.0 640x400 85.1 640x350 85.1 TV disconnected (normal left inverted right x axis y axis)
Indica que el monitor TFT está conectado (VGA) y el del portátil también (LVDS). También indica los modos permitidos y cuáles tiene por defecto (los marcados con *).
Los cambios que hay que hacer en el fichero xorg.conf son muy sencillos, lo único que hay que añadir es el parámetro Virtual dentro de la subsección Display (perteneciente a la sección Screen). En mi caso, el fichero queda de la siguiente manera:
Identifier "Monitor" Option "DPMS" "true" HorizSync 28.0 - 96.0 VertRefresh 50.0 - 75.0 EndSection Section "Device" Identifier "Intel card" Driver "intel"Section "Monitor" Option "XAANoOffscreenPixmaps" VendorName "Intel Corporation" BoardName "Intel Corporation Mobile 945GM/GMS/940GML" EndSection Section "Screen" Identifier "Screen" Device "Intel card" Monitor "Monitor" DefaultColorDepth 24 SubSection "Display" Depth 24 Modes "1280x800" "1024x768" "800x600" "640x480" Virtual 2560 1024 EndSubSection EndSection
En Virtual, lo que hay que especificar es el tamaño del escritorio real. En este caso, quería poner los monitores en horizontal, uno al lado del otro, por lo tanto sería 2560 de ancho (1280 + 1280) y de alto 1024. En caso de haberlos querido poner uno encima del otro la resolución a poner en Virtual sería 1280×1824.
Como hay veces que uso el portátil sin el segundo monitor, he creado un script que se ejecuta al iniciar KDE y que lo único que hace es comprobar si está conectado o no. En caso de estarlo configura las resoluciones y las posiciones de los dos monitores.
#!/bin/bash if xrandr -q | grep -q "VGA connected"; then xrandr --output LVDS --mode 1280x800 --output VGA --mode 1280x1024 --right-of LVDS else xrandr --output VGA --off --output LVDS --mode 1280x800 fi