En mi puesto detengo 2 pc conectados a un monitor Samsung SyncMaster 933HD mediante un KVM y frecuentemente me encontraba que la autodetección de las Xorg en el arranque me ponía resoluciones indeseables, ya que solo se detectaba la resolución óptima (1360x768) para el PC seleccionado por el KVM.
Como primera solución probé a generar un xorg.conf estático, con los pasos típicos:
- Parar el gestor de sesiones: "/etc/init.d/gdm3 stop".
- Generar un xorg.conf: "Xorg -configure", que crea un fichero /root/xorg.conf.new con el resultado de la autodetección.
- Copiar el xorg.conf a su sitio: "cp /root/xorg.conf.new /etc/X11/xorg.conf".
- Editar a mano /etc/X11/xorg.conf para limpiarlo de los drivers indeseados (por defecto se meten drivers de vesa, framebuffer, modesetting... además del driver correcto de la tarjeta, en mi caso "nouveau" en ambos PC), poner la resolución de 1360x768 en la lista de resoluciones y dejarla como resolución preferida.
- Arrancar el gestor de sesiones: "/etc/init.d/gdm3 start"
Esto normalmente es suficiente, pero en mi caso había algo que hacía que al reiniciar el equipo sin que el monitor estuviese accesible por el KVM se seleccionase de nuevo una resolución incómoda, como 1024x768 u 800x600.
En este punto opté por generar la resolución exacta para mi monitor/tarjeta gráfica, definiendo el modo 1360x768 perfectamente y asociándolo de forma irrevocable a la salida VGA. Los pasos son los siguientes:
1) Para empezar, no viene mal preguntar al monitor que resoluciones soporta. Eso lo hacemos con la orden:
# ddcprobe
Este comando no siempre funciona con los drivers del núcleo/Xorg que tengamos, pero puede aportar luz sobre las resoluciones soportadas por el monitor asi cómo, en algunas ocasiones, las tasas de refresco horizontal y vertical del mismo. Digamos que su resultado no es fiable 100% y pueden faltar resoluciones en la lista, pero no está mal ejecutarlo a ver que nos dice.
2) Una vez decidimos la resolución que queremos (1360x768 píxeles a 60hz), generamos los modelines con:
# cvt 1360 768 60
que en mi caso produce esta salida:
# 1360x768 59.80 Hz (CVT) hsync: 47.72 kHz; pclk: 84.75 MHz
Modeline "1360x768_60.00" 84.75 1360 1432 1568 1776 768 771 781 798 -hsync +vsync
3) Ahora, usando xrandr probaremos a aplicar el modo a mano y ver si funciona. Lo primero es:
# xrandr
Screen 0: minimum 320 x 200, current 1360 x 768, maximum 4096 x 4096
VGA-1 connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1024x768 60.0*+
800x600 60.3 56.2
848x480 60.0
640x480 59.9
DVI-D-1 disconnected (normal left inverted right x axis y axis)
que nos dice las resoluciones que hay configuradas y, muy importante, como se etiquetan las salidas de vídeo de la tarjeta gráfica. En nuestro caso VGA-1 (suele ser VGA-X, DVI-X o LVDS-X, a veces sin guión). Procedemos a añadir el modeline y seleccionamos la resolución:
# xrandr --newmode "1360x768" 84.75 1360 1432 1568 1776 768 771 781 798 -hsync +vsync
# xrandr --addmode VGA-1 1360x768
# xrandr --output VGA-1 --mode 1360x768
# xrandr
Screen 0: minimum 320 x 200, current 1360 x 768, maximum 4096 x 4096
VGA-1 connected 1360x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1360x768 59.8*+
1024x768 60.0
800x600 60.3 56.2
848x480 60.0
640x480 59.9
DVI-D-1 disconnected (normal left inverted right x axis y axis)
Si el monitor no explota como si hubiéramos sido objetivo de Digibomber (*)(**) y se ve bien, hemos dado con la tecla. Si no funciona, puede ser debido a alguna incompatiblidad de xrandr con el driver de video. En mi caso con el driver "nvidia" no funcionaba y con "nouveau" si.
4) En este punto, hay dos opciones: ejecutar el xrandr en un script de inicio (por ejemplo en /etc/X11/Xsession.d) o meterlo en el xorg.conf. En mi opinión es mas conveniente la segunda . El xorg.conf (generado como vimos al comienzo del artículo y luego retocado) me ha quedado:
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
EndSection
Section "Files"
EndSection
Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
# generated from default
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Samgung"
ModelName "SyncMaster 933HD"
Option "DPMS"
HorizSync 30-61
VertRefresh 56-75
Modeline "1360x768" 84.75 1360 1432 1568 1776 768 771 781 798 -hsync +vsync
Option "PreferredMode" "1360x768"
EndSection
Section "Device"
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz",
### <percent>: "<f>%"
### [arg]: arg optional
#Option "NoAccel" # [<bool>]
# ....mas parametros.....
#Option "ZaphodHeads" # <str>
Identifier "Card0"
Driver "radeon"
BusID "PCI:1:0:0"
Option "Monitor-VGA-1" "Monitor0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Modes "1360x768" "1024x768" "800x600" "640x480"
Depth 24
EndSubSection
EndSection
Como se puede ver he limpiado bastante el xorg.conf de todos los MonitorX, DeviceX y ScreenX que genera el Xorg -configure para los distintos drivers posibles, asi como las referencias a estos en la sección ServerLayout. Yo solo quiero usar un driver y una configuración, todo lo demás es innecesario si funciona bien.
Destacar que no viene mal poner las tasas de refresco del monitor, si podemos averiguarlas:
HorizSync 30-61
VertRefresh 56-75
Hay varias maneras: puede que nos las de el comando dccprobe, o que estén impresas en la parte trasera en la etiqueta de marca/modelo/nº de serie. A las malas, podemos consultar las especificaciones del monitor en Internet o en el manual técnico.
Otra parte interesante es:
Modeline "1360x768" 84.75 1360 1432 1568 1776 768 771 781 798 -hsync +vsync
Option "PreferredMode" "1360x768"
además de definir el modeline, indicamos que es el preferido para dicho monitor.
La línea:
Option "Monitor-VGA-1" "Monitor0"
es muy importante: asocia el monitor con el conector VGA-1 (recordemos que esa el identificador del conector sacado con xrandr). Esto lo averigüé al fallarme la resolución y mirar el Xorg.0.log. En las líneas "Output" no se vinculaba bien la tarjeta gráfica con el monitor y el mode 1360x768, con esta línea se forzó esa vinculación.
En el otro PC, al usar también driver "nouveau" la configuración xorg.conf ha quedado igual. En caso de tener que usar otros driver (intel, ati, ...) habría que generar un xorg.conf similar.
Y ya está, con esto ya tenemos una resolución fija que se pondrá siempre incluso si está apagado o no está conectado el monitor.
(*) Los monitores planos no explotan. Eso podía pasar en los monitores de tubo, pero es una leyenda urbana. Todo lo más es que se quemaban por forzar las frecuencias. Eso si, hace 20 años al configurar siempre a mano las xorg sin apenas documentación cruzabas los dedos cada vez que levantabas las X. El monitor a veces hacía un ruido agudo y chirriante hasta que se estabilizaba en la frecuencia y resolución.
(**) Saludos a los fans de Cryptonomicón.
Alfonso ¿has probado si a esa resolución pandectas da el siguiente problema, que me daba a mi: el lienzo o fondo sobre el que se puede trabajar no ocupa toda la pantalla?
ResponderEliminar