lunes, mayo 21, 2007

Configurar X server para 2 monitores con tarjeta de video ATI

Uno de los problemas que tuve el Linux, es que solo me reconocía un solo monitor cuando conectaba un monitor externo a mi laptop, es decir solo activaba el monitor externo, pero no el de la laptop o en el peor de los casos “clonaba” los monitores, es decir en los veía exactamente lo mismo, en Windows realmente es muy sencillo activar los 2 monitores para tener un escritorio grande, desafortunadamente en Linux no es así.

Primeramente es necesario saber que tarjeta de video estamos utilizando y cual es el driver que usamos para la misma, ya que dependiendo de la combinación de tarjeta/driver es el procedimiento a utilizar.



En mi caso mi laptop cuenta con una tarjeta ATI mobility radeon 9600, y para tal tarjeta tengo 2 opciones de drivers, los drivers libres y los drivers binarios de ATI, cuando instale Linux, este me instalo los drivers libres, así que son los que le deje y sobre los cuales realice mi configuración.

Mi primer intento de configurar los 2 monitores como un escritorio extendido, fue el utilizar el programa displayconfig-gtk (el cual se puede encontrar el los repositorios de Ubuntu), el cual proporciona una interfase gráfica sencilla de comprender y de realizar cambios a nuestra configuración de la tarjeta de video, el programa no función en mi caso, así que tuve que realizar los cambios de forma directa y manual en el archivo xorg.conf.

Asumiendo que los drivers libres para la tarjeta ATI están instalados, el siguiente paso del proceso consiste en habilitar la funcionalidad MergedFB que es la que permite extender el escritorio a mas de un monitor, en primer lugar hay que editar el archivo xorg.conf que se encuentra en /etc/X11, a mi en lo personal me gusta usar el editor vi, pero también es posible usar gedit:
$sudo vi /etc/X11/xorg.conf o $gksu /etc/X11/xorg.conf

Las instrucciones sudo y gksu nos ayudan a realizar los cambios como usuario root/administrador, ya que como usuarios normales no es posible realizar cambios en este archivo, acto seguido localizamos dentro del archivo la sección llamada “Device”, aquí se van a realizar algunos cambios y agregar algunas lineas, en mi caso la sección quedo de la siguiente forma:

Section “Device”
Identifier "ATI Technologies Inc RV350 [Mobility Radeon 9600 M10]"
Driver "radeon"
BusID "PCI:1:0:0"
Option "MergedFB" "true" #Habilita la funcionalidad de MergedFB
Option "MergedNonRectangular" "true" #Si la resolución de los 2 monitores no es igual (con respecto a la altura), es decir que forme un rectángulo, es necesario habilitar esta opcion
Option "MergedXinerama" "on" #Esta opción indica a las aplicaciones que se cuenta con mas de un monitor y eso ayuda a posicionar de manera correcta nuevas ventanas que se abran
Option "AGPMode" "8"
Option "EnablePageFlip"
Option "ColorTiling" "on"
Option "AccelMethod" "XAA"
Option "XAANoOffscrenPixmaps" "true"
Option "AddARGBGLXVisuals" "true"
Option "RenderAccel" "true"
Option "MonitorLayout" "LVDS, CRT" #Se definen los tipos de monitor que tenemos, LVDS es para la pantalla de la laptop y CRT indica que el monitor esta conectado al puerto VGA
Option "CRT2Hsync" "30-70" #Valores de sincronización horizontal del monitor externo, ver manual del mismo
Option "CRT2VRefresh" "50-150" #Valores de barrido vertical del monitor externo, ver manual
Option "CRT2Position" "RightOf" #Posición física del monitor externo con respecto al de la laptop, en este caso dice que mi monitor secundario esta a la derecha del de mi laptop
Option "MetaModes" "1280x800 1280x800-1280x1024" #Se definen las resoluciones tanto del primer monitor como del segundo, en este caso dice que tengo 2 configuraciones definidas, la primera 1280x800, es para cuando solo tengo el monitor de mi laptop, la segunda 1280x800-1280x1024, es para cuando tengo conectado mi monitor externo, se define la resolución de cada monitor separada por un guion (-)
EndSection

Los cambios necesarios para activar MergedFB son los que están comentados con # en el código de arriba.

Adicionalmente en la sección de “Screen” tuve que agregar la resolución total de cuando están activados ambos monitores, en mi caso fue de 2560x1024, solo agregue esta definición para 24 bits de colores, aunque se puede agregar a las otras definiciones también:

SubSection "Display"
Depth 24
Modes "1280x800" "1024x768" "800x600"
Virtual 2560 1024
EndSubSection

Una vez que tenemos la configuración correcta, es necesario reiniciar el X server, una forma de hacerlo es reiniciando la pc o bien presionando atl+ctrl+backspace, una vez que se inicie la sesión gráfica, ambos monitores deben de estar activados.

Un problema que tuve que solucionar una vez activada la funcionalidad de MergeFB, es que no encontré forma de que detectara si esta conectado o no el monitor secundario, por lo tanto aun y cuando no estuviera conectado mi resolución siempre era de 2560x1024, lo cual provocaba que algunas ventanas se abrieran en el área del monitor no conectado.

La única forma que encontré de solucionar este problema fue de forma manual y con la ayuda de un par de scripts. De acuerdo a mi configuración yo se que solo tengo definidas 2 resoluciones 1280x800 y 2560x1024, así que con la ayuda de el programa xrandr puedo cambiar entre las resoluciones de forma rápida, activando y desactivado el monitor externo según lo requiera. Los scripts son los siguientes:

smallscreen.sh
#!/bin/bash
sudo xrandr -s 0

bigscreen.sh
#!/bin/bash
sudo xrandr -s 1

Simplemente es necesario guardar los scritps y darles permisos de ejecución con:
$chmod +x smallscreen.sh
$chmod +x bigscreen.sh

Al ejecutarlos desde una terminal solicitan el password de administrador para poder correr. El valor numérico en la instrucción xrandr puede obtenerse ejecutando xrandr de la siguiente forma y modificando esos valores a los correctos para nuestra pc:
$ sudo xrandr -q
SZ: Pixels Physical Refresh
0 1280 x 800 ( 867mm x 347mm ) 60
*1 2560 x 1024 ( 867mm x 347mm ) *25
Current rotation - normal
Current reflection - none
Rotations possible - normal
Reflections possible – none

Aquí hay 2 ligas a los foros de Ubuntu con mayor información acerca de como configurar un monitor externo:

3 comentarios:

Anónimo dijo...

Muchas gracias!
Acabas de darme un poco más de vida.

Javier dijo...

Hola.
Ya tenia configurado los dos monitores de casi la misma manera, pero no que no he encontrado es la solucion para subirle la tasa de refresco. Se me queda fija en 35Hz.
Te agradeceria mucho si te paso lo mismo y encontraste solucion que fueras tan amable de comentarla.
Muchas gracias y un saludo.

Mario Alberto Chavez dijo...

Javier;

Fijate que no tuve ningun problema de ese tipo, has intentado con drivers mas nuevos de tu distro, por ejemplo en Ubuntu Gutsy le han puesto especial interes en configuraciones de 2 monitores.

Mario