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:

domingo, mayo 20, 2007

Me cambio a Linux

He sido usuario ya por poco mas de 6 años, aunque he sido usuario un tanto esporádico, con excepción de 2 años en los que por mi trabajo relacionado con servidores Unix, mi pc escritorio era tenia un ambiente Linux con dual boot a Windows, el cual durante ese tiempo utilizaba de forma esporádica.


Comencé con utilizando la distribución Redhat 8, la cual con el tiempo se convirtió en Fedora Core, con mi salida de ese trabajo, volví otra vez a Windows y me convertí en consultor independiente, dejando el uso de Linux otra vez de forma esporádica.

Desde hace un par de semanas atrás reevalue mi posición con respecto a Linux, ya que desde hace 2 años mis actividades de desarrollo de software han ido decreciendo y en cambio me he enfocado a la administración y desarrollo de bases de datos, específicamente Oracle y Microsoft SQL.

Por el lado de Oracle no hay problema ya que lo he utilizado en Unix, Linux y Windows, pero en el caso de MSSQL solamente corre en Windows, pero también es cierto que trabajo menos desconectado, principalmente trabajo por medio de VPN's a las redes de mis clientes, por lo tanto mi escritorio de trabajo no importa mucho que digamos para poder seguir realizando los proyectos de mis clientes.

Así que después de una mala racha con Windows en mi pc – spyware, bajo rendimiento de Windows en general, en ocasiones simplemente se pone lento sin explicación obvia -, decidí ver que me costaría moverme a Linux y utilizar software libre en la medida de lo posible, esta ultima parte no es nueva, ya que aunque estaba en Windows he utilizado una buena cantidad de programas libres, principalmente OpenOffice, ya que no he tenido licencia de MS Office desde hace como 6 años, y aunque algunos clientes me han ofrecido licencia gratuita, no he sentido de la necesidad de instalar MS Office en mi pc.

Hasta el momento Linux me ha funcionado a la perfección – bueno casi – en la actividades de la escuela y de mis clientes y no veo mi regreso a Windows, por lo menos para utilizarlo como mi ambiente principal en un futuro cercano.



La distribución de Linux elegida es Ubuntu 7.04 (Feisty Fawn) con los siguientes puntos a favor y en contra hasta el momento:

A favor

  • Fácil de instalar, con mucho soporte en Internet
  • Con NetworkManager mi configuración de red inalámbrica fue tan fácil como en Windows
  • Soporte para leer/escribir a particiones NTFS
  • Compiz y Beryl proporcionan increíbles efectos – eyecandy – en el escritorio
  • Una gran cantidad de software libre a mi disposición
  • No tengo gran problema con spyware ni virus
  • Reconocimiento de todos mis dispositivos USB/Fireware, cámara de video, fotográfica, teléfonos, PDA, etc. sin problemas y sin instalar drivers – algunos de estos simplemente no los pude usar en Windows -

En contra

  • Aunque es fácil de instalar y todo me funciono prácticamente “Out of the box” tuve que configurar manualmente el servidor X para que me reconociera mi monitor externo
  • Algo similar me paso con el NetworkManager, que aunque me reconoce y me permite conectarme a la redes wireless, no me fue posible configurar mis VPNs de forma gráfica y tuve que editar algunos archivos de configuración para que funcionaran
  • Programas que no están disponibles en paquetes de instalación, y por algún motivo se requieren, es necesario bajar el código fuente y compilarlo por uno mismo.


Si bien Linux ha avanzado en su facilidad de instalación y uso para tareas cotidianas, aun de vez en cuando se requiere tener algún conocimiento adicional para hacer que algunas cosas funcionen.

Sobre los problemas que se me presentaron ya estaré comentado con mas detalle cuales fueron y como los he ido resolviendo.