domingo, 6 de diciembre de 2009

Interfaz Gráfica - Servidor Xorg y dos monitores.

El sistema de ventanas X nació en 1980 y se usa actualmente como interfaz gráfica en sistemas Unix. Fue desarrollado por el MIT inicialmente. Ahora está en su versión X11R7.5 y esta siendo desarrollado y soportado por la Xorg foundation que lo distribuye bajo la licencia GPL.

Este sistema de ventanas usa el modelo cliente-servidor. Las aplicaciones o clientes solicitan mostrar algo por pantalla y el servidor les responde. También funciona igual cuando desean emplear el teclado o el ratón.

Pueden existir varios servidores X en una misma máquina. Un ejemplo podría ser el de los monitores duales, o una aplicación de escritorio virtual tipo VNC.

Los servidores de ventanas usan entornos gráficos como pueden ser KDE o GNOME y estos dan el decoro a las ventanas y se encargan de solicitar los recursos al servidor X.

Todos los componentes de entrada y salida del servidor X, deberán estar en el archivo de configuración que se encuentra en la ruta /etc/X11/xorg.conf
Este archivo puede ser configurado automáticamente en Ubuntu mediante el comando:
  • sudo dpkg-reconfigure xserver-xorg
El problema de este comando es que no siempre se consigue los resultados deseados por lo que a veces será necesario configurarlo a mano.
Por ello explicaré como configurar este archivo manualmente y como configurar el servidor Xorg para poner dos monitores conectados a dos tarjetas de vídeo diferentes. Si este no fuera tu caso se explicará además como configurarlo para 1.

El primer paso de todos es abrir el archivo de configuración. Para ello ejecutaremos en el terminal lo siguiente:
  • sudo gedit /etc/X11/xorg.conf
Para empezar seleccionaremos todo lo que haya y lo borraremos pues enseñaremos a configurarlo a mano desde el principio:

Lo primero de todo será añadir el teclado. Para ello añadiremos al fichero lo siguiente:
##Teclado
Section "InputDevice"
Identifier "Teclado"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105″
Option "XkbLayout" "es"
EndSection
##Teclado
El XkbLayout sería "es" porque nuestro teclado tiene Ñ. Si tuvieras otro teclado aquí tendrías que poner en , de, fr o el del lenguaje de tu teclado.

Ya tenemos el teclado. El siguiente y más usado sistema de entrada es el ratón. Para añadir el ratón incluiremos el siguiente código al archivo abierto:
##Ratón
Section "InputDevice"
Identifier "Raton"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2
Option "Emulate3Buttons" "true"
EndSection
##Ratón
Este ratón, es el típico que se conecta por el puerto PS2, es decir la entrada circular que normalmente tiene color verde. Si lo conectaras por USB tendrías que modificar el protocolo por el de USB.

Hasta ahora todo va bien. Tenemos configurado el teclado y el ratón como dispositivos de entrada pero nos faltan los de salida.
Para este paso necesitaremos ejecutar en un terminal el siguiente comando:
  • lspci
El comando nos mostrará la lista de dispositivos que tenemos conectados a nuestro ordenador:
Tendremos que buscar los dispositivos VGA, es decir, las tarjetas gráficas. En mi caso tengo una AGP Radeon 9200 y una PCI Radeon 7000 (no os riáis de mi por tener un pc viejo)

Tenemos ahora dos maneras de configurarlo. Si sólo tienes una tarjeta gráfica pero esta tiene 2 salidas como mi Radeon 9200 deberás añadir al archivo:

##Radeon 9200 VGA
Section "Device"
Identifier "Salida1"
Driver "ati"
BusID "PCI:1:0:0"
EndSection
##Radeon 9200 VGA

##Radeon 9200 S-Video
Section "Device"
Identifier "Salida2"
Driver "ati"
BusID "PCI:1:0:1"
EndSection
##Radeon 9200 S-Video
Si quisiéramos emplear la tarjeta PCI entonces:
##Radeon 9200 VGA
Section "Device"
Identifier "Salida1"
Driver "ati"
BusID "PCI:1:0:0"
EndSection
##Radeon 9200 VGA

##Radeon 7000 VGA
Section "Device"
Identifier "Salida2"
Driver "ati"
BusID "PCI:0:9:0"
EndSection
##Radeon 7000 VGA

Aquí ya dependerá mucho de vosotros. Existen multitud de tarjetas gráficas y dependiendo de la vuestra tendréis que tocar:
El driver: Como mi tarjeta es antigua pongo el driver ati que esta desarrollado por canonical. Este controlador es libre y soporta todas las ATI Radeon y modelos anteriores hasta la Radeon 9250. Si tu modelo fuese superior tendrías que escoger el controlador fglrx para ello solo tendrías que modificar la palabra ati por fglrx.
Si tu tarjeta fuese NVIDIA tendrías que poner la palabra nv para el driver. Si fuese intel tendrias que poner intel. Si tuvieras algún problema puedes emplear el driver vesa que es libre y soporta la gran mayoría de tarjetas aunque su rendimiento gráfico no sea el óptimo

El Bus ID aunque la tarjeta sea AGP tiene que ser PCI seguido de los números que te aparezcan en el comando lspci. En mi caso 1:0:0 para la salida VGA y 1:0:1 para la salida S-Video. Si usamos la tarjeta secundaria entonces pondríamos PCI:0:9:0
Estos números pueden cambiar pero podéis verlos sin ningún problema en el terminal por lo que no debéis preocuparos.

Si sólo tuvieseis un monitor entonces solo deberéis poner:

##Radeon 9200 VGA
Section "Device"
Identifier "Salida1"
Driver "ati"
BusID "PCI:1:0:0"
EndSection
##Radeon 9200 VGA

Ahora sólo nos queda configurar los monitores. Para ello añadimos al archivo:

##Monitor 19 pulgadas
Section "Monitor"
Identifier "Monitor1"
Option "DPMS"
HorizSync 30-81
VertRefresh 56-75
EndSection
##Monitor 19 pulgadas

##Monitor 17 pulgadas
Section "Monitor"
Identifier "Monitor2"
Option "DPMS"
HorizSync 30-81
VertRefresh 56-75
EndSection
##Monitor 17 pulgadas
Si sólo tuvierais un monitor entonces debería quedar así:
##Monitor 19 pulgadas
Section "Monitor"
Identifier "Monitor1"
Option "DPMS"
HorizSync 30-81
VertRefresh 56-75
EndSection
##Monitor 19 pulgadas

Bien. Ahora ya tenemos casi todo. Sólo nos falta configurar las resoluciones de las pantallas y el color de salida. Para ello añadimos:

##Principal
Section "Screen"
Identifier "Principal"
Device "Salida1"
Monitor "Monitor1"
DefaultDepth 16
SubSection "Display"
Depth 16
Modes "1280x1024" "1152x864" "1024x768" "800x600" "720x400" "640x480"
EndSubSection
EndSection
##Principal

##Secundario
Section "Screen"
Identifier "Secundario"
Device "Salida2"
Monitor "Monitor2"
DefaultDepth 16
SubSection "Display"
Depth 16
Modes "1280x1024" "1152x864" "1024x768" "800x600" "720x400" "640x480"
EndSubSection
EndSection
##Secundario
Si sólo tuviésemos un monitor entonces:
##Principal
Section "Screen"
Identifier "Principal"
Device "Salida1"
Monitor "Monitor1"
DefaultDepth 16
SubSection "Display"
Depth 16
Modes "1280x1024" "1152x864" "1024x768" "800x600" "720x400" "640x480"
EndSubSection
EndSection
##Principal

Por último configuramos el orden de nuestras pantallas. Para esto añadimos:
Section "ServerLayout"
Identifier "Default Layout"
Screen 0 "Principal"
Screen 1 "Secundario" RightOf "Principal"
InputDevice "Teclado"
InputDevice "Raton"
Option "xinerama" "off"
Option "clone" "off"
EndSection

Section "Extensions"
Option "Composite" "Enable"
EndSection

Section "DRI"
Mode 0666
EndSection
Si sólo tuviésemos un monitor:

Section "ServerLayout"
Identifier "Default Layout"
Screen 0 "Principal"
InputDevice "Teclado"
InputDevice "Raton"
EndSection

Section "Extensions"
Option "Composite" "Enable"
EndSection

Section "DRI"
Mode 0666
EndSection
Para terminar pulsa guardar y reinicia tu ordenador.
Si todo funcionó bien deberías tener los dos monitores funcionando correctamente y con aceleración gráfica. Si sólo tuvieras un monitor este debería funcionar correctamente.

Nota: Esta guía sirve para tarjetas antiguas. Actualmente los drivers propietarios para linux configuran automáticamente el servidor Xorg para poder emplear monitores duales. En cualquier caso esta es una buena guía para conocer como funciona el archivo de configuración del servidor X.

No hay comentarios:

Publicar un comentario