Página 1 de 1

Para los que usan switches KVM

Publicado: Mar, 02 Ago 2011, 14:38
por 103
A la hora de trabajar con varios servidores con un solo teclado y display, un switch KVM es un dispositivo ideal para resolver este problema. Con el KVM todo iba de maravillas excepto cuando cambiaba de una máquina a la estación de trabajo que usa interfaz gráfica el display no tomaba la resolución correcta. Tras muchos intentos de búsquedas fallidos encontré estas magníficas instrucciones para resolver el problema, ojalá y les resulte útil como a mí.

Se que esto cabe más en la wiki, pero la vagancia me privó de enviar la solicitud de permisos de escritura.

NOTA: estas instrucciones las tomé de http://unixlandia.com/web_interna/index ... &Itemid=35 están plasmadas aquí casi textualmente, excepto por algunos fragmentos de texto innecesarios.

Lo primero que deberíamos hacer es conectar el monitor directamente a la tarjeta gráfica, sin switch de por medio. Arrancamos el sistema, incluido el entorno gráfico, y nos hacemos una copia del archivo /var/log/Xorg.0.log (el cero puede variar, si tenemos más tarjetas), colocándola en un lugar a mano. No es estrictamente necesario, pero nos puede ahorrar algún reinicio si algo no sale bien.

Lo que vamos a hacer ahora es encontrar en ese "log" los valores EDID que el monitor ha comunicado a la gráfica, en un arranque "normal". Para ello, buscaremos un patrón asociado a los monitores: el hertzio.

Código: Seleccionar todo

$ grep -i hz Xorg.0.log | head
Lo "empipo" al comando head porque la información que nos interesa suele estar al principio: el sincronismo horizontal y el refresco vertical mínimos y máximos soportados por nuestro monitor. Es una línea como ésta:

Código: Seleccionar todo

(II) NV(0): Ranges: V min: 50 V max: 160 Hz, H min: 30 H max: 71 kHz, PixClock max 110 MHz
Apuntamos esta información en algún sitio, bien usando el socorrido portapapeles, bien a lápiz/papel. En el ejemplo, el sincronismo horizontal es 30-71 y el refresco vertical es 50-160 (no es necesario especificar las unidades, ya que el servidor gráfico toma las correctas por defecto).

A continuación, buscamos las resoluciones de pantalla que queremos usar. Supongamos que son dos: 1024x768 y 1280x800.

Código: Seleccionar todo

$ grep 1024 Xorg.0.log | grep -i modeline
$ grep 1280 Xorg.0.log | grep -i modeline
Como se puede ver, nos interesa la información referente a las "modelines", que luego tendremos que incluir a mano en el xorg.conf. Una línea de este listado tiene este estilo:

Código: Seleccionar todo

(II) NV(0): Modeline "1024x768"x84.9 94.50 1024 1096 1200 1376 768 771 775 809 -hsync +vsync (68.7 kHz)
(II) NV(0): Modeline "1280x1024"x59.9 109.00 1280 1368 1496 1712 1024 1027 1034 1063 -hsync +vsync (63.7 kHz)
Normalmente, aparecen unas cuantas líneas por cada resolución. ¿Cuál escoger? Inmediatamente tras las comillas, figura el refresco vertical (en los ejemplos, 84.9 y 59.9, lo que en la práctica es 85 y 60). Lo lógico es que, de todas las modelines, elijamos la que mayor refresco proporcione (en monitores CRT) o la que se ajuste al valor recomendado por el fabricante (en monitores LCD-TFT).

Así pues, acabamos teniendo apuntadas una línea "ranges" y otras tantas "modelines" como resoluciones queramos tener disponibles. Ya podemos cerrar el archivo Xorg.0.log.

Ahora, como root (o con sudo), abriremos el archivo /etc/X11/xorg.conf y buscaremos la sección "monitor" (vuestros nombres variarán respecto a este ejemplo):

Código: Seleccionar todo

Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
EndSection
Introducimos "dentro" de ella la información que tenemos apuntada, de la siguiente forma:

Código: Seleccionar todo

Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
HorizSync 30-71
VertRefresh 50-160
ModeLine "1024x768" 94.50 1024 1096 1200 1376 768 771 775 809
ModeLine "1280x1024" 109.00 1280 1368 1496 1712 1024 1027 1034 1063
EndSection
- En HorizSync, tecleamos los dos valores apuntados, separados por un guión.
- En VertRefresh, lo mismo.
- Por último, las Modelines las copiamos tal cual, pero eliminando el refresco vertical, el -hsync y todo lo que venga después. Es decir, sólo tenemos que escribir la resolución en pixels (entre comillas), la velocidad del reloj (un valor que suele tener dos decimales) y ocho cifras enteras, separadas por espacios.

Acabada la sección del monitor, bajamos a la de "screen":

Código: Seleccionar todo

Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Viewport 0 0
Depth 1
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 4
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 8
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 15
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 16
EndSubSection

EndSection
Vemos que hay seis diferentes subsecciones, cada una con una "depth" diferente (la paleta de colores). Hoy en día no hay muchas razones para usar otra que no sea la de 24 bits (salvo juegos antiguos), así que nos limitamos a introducir lo siguiente sólo en ella:

Código: Seleccionar todo

SubSection "Display"
Viewport 0 0
Depth 24
Modes "1280x800" "1024x768"
EndSubSection
Es decir, una línea "Modes" seguida de la resolución o resoluciones, entrecomilladas, que vamos a emplear. Efectivamente, una por cada "modeline".

Guardamos los cambios del xorg.conf y reiniciamos las X con nuestro método favorito (recomendado CTRL+ALT+retroceso, que desahoga mucho).