lunes, 20 de mayo de 2013

Añadir resoluciones de pantalla

Si queremos tener disponible en Linux una resolución de pantalla que en principio no está disponible, y vemos que nuestro sistema de inicio dual con Windows/Linux, al iniciar desde Windows si que tenemos disponible esa resolución, o si por cualquier otra causa queremos añadir una resolución de pantalla que no tenemos disponible en el momento actual,  en este tema se explica como añadir una resolución de pantalla nueva, o varias,  a la lista de ellas que admite el sistema.

Ver la resolución activa, y las resoluciones detectadas por el sistema, disponibles para ser activadas: A) Desde Configuración del Sistema->Pantallas se puede ver y cambiar las resoluciones en las que podemos poner la pantalla del monitor.B) Instalando el paquete resappet y añadiendo el comando resapplet en aplicaciones al inicio hacemos que aparezca un icono en el panel de Cinnamon desde el que se puede ver y elegir las resoluciones disponibles C) Instalando el paquete lxrandr y ejecutando el programa del mismo nombre.

A) Configuración del Sistema->Pantalla



B) Resapplet

C) lxrandr

D) Mas información podemos obtenerla ejecutando en la terminal el comando: xrandr . En mi caso el comando xrandr me da la siguiente información:

nicasio@mint13 ~ $ xrandr
Screen 0: minimum 320 x 200, current 1280 x 800, maximum 8192 x 8192
LVDS1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 331mm x 207mm
1280x800       60.0*+
1024x768       60.0
800x600        60.3     56.2
VGA1 disconnected (normal left inverted right x axis y axis)
TV1 disconnected (normal left inverted right x axis y axis)

Lo que me informa de que la resolución que hay activa es la 1280x800 , y las que podría usar en este momento son: 1024x768 , y 800x600 ; y nos informa que la resolución mínima, la actual y la máxima que soporta nuestro monitor son: la mínima 320 x 200, la actual: 1280 x 800, y la máxima: 8192 x 8192.  También nos dice que la tasa de refresco ( lo he puesto en naranja para diferenciarlo bien ) que admite el monitor esta en torno a 60.00 - ya que es la que aparece en las dos primeras resoluciones, y en la tercera resolución es muy similar: 60.3 y 56.2 ; por ello usaremos 60.00 como tasa de refresco cuando queramos añadir otra resolución ( como se ve mas abajo el comando cvt nos dá una tasa de refresco para una resolución concreta que queramos añadir ) . La opción LVDS1 , es como llama al monitor de mi pc portátil el  comando xrand, pero en otros pcs puede aparecer VGA1 (o CRT1, o de alguna otra forma )  y habrá que sustituir LVDS1 por VGA1 ( o CRT1, o de alguna otra forma ) en todas las lineas de comandos en las que aparezca.

A lo largo de este tema vamos a explicar,  como ejemplo, el proceso para añadir la resolución 1000×600, con una tasa de refresco de 60.00. En todos los casos en YYYYxZZZ ,   YYYY hace referencia a la dimensión horizontal y ZZZ a la dimensión vertical del monitor.


Para que todo nos salga bien debemos tener la información sobre estos cuatro puntos:
- nombre del monitor,  LVDS1, o VGA1 , (o CRT1, o de alguna otra forma ) según el comando xrandr
- resolución máxima admitida, para no intentar añadir una superior a ella; de esto nos informa el comando xrandr --fb
- tasa de refresco del monitor, de lo que nos informa el comando xrandr, y el comando cvt para una resolución concreta
- modeline correspondiente a la resolución que queremos añadir, de lo que nos informa el comando cvt

Para ver como usar estos comandos para añadir resoluciones de pantalla, seguir leyendo:

Añadir otra resolución:

Para saber cual es la resolución mínima, la actual y la máxima que soporta nuestro monitor, debemos fijarnos en la información que nos dio el comando xrandr
En mi caso: Screen 0: minimum 320 x 200, current 1280 x 800, maximum 8192 x 8192

Pero si ejecuto el comando xrandr -- fb con una tasa inferior a la actual, por ejemplo: xrandr --fb 1111x777 , tras modificarse el tamaño del escritorio nos sale un mensaje en el que nos dice cual es la verdadera resolución máxima: xrandr: specified screen 1111x777 not large enough for output LVDS1 (1280x800+0+0) , en este caso: 1280x800 , por lo que no debemos intentar añadir una resolución mayor que ésta.

Las resoluciones mas habituales son: 1280x800, 1280×768, 1024x768 , 800x600 , y 640x480. A lo largo de este tema vamos a explicar como ejemplo, el proceso para añadir la resolución 1000×600 con una tasa de refresco de 60.00

A) Para añadir una nueva resolución tenemos que usar el comando cvt que nos mostrara que valores usar con el comando xrandr. Por ejemplo para una resolución 1000×600 el comando nos mostrara lo siguiente:
cvt 1000 600
# 1000x600 59.84 Hz (CVT) hsync: 37.34 kHz; pclk: 47.50 MHz
Modeline "1000x600_60.00"   47.50  1000 1040 1136 1272  600 603 613 624 -hsync +vsync

B) Ahora usamos el comando xrandr con las siguientes opciones:  xrandr -- newmode <Modeline> para crear un nuevo modo de resolución. En nuestro caso quedaría:
xrandr --newmode 1000x600_60.00   47.50  1000 1040 1136 1272  600 603 613 624 -hsync +vsync
Es decir ponemos los datos que el comando cvt nos dio.

C) Ahora tenemos que añadir ese nuevo modo a nuestras resoluciones actuales, para esto hacemos:
xrandr --addmode LVDS1 1000x600_60.00
 D) y ahora ya podemos cambiar la resolución a la nueva con el siguiente comando: xrandr --output LVDS1 --mode 1000x600_60.00  Con esto ya habremos cambiado temporalmente nuestra resolución a la que queríamos ( Si nos damos cuenta de que ese modo no es correcto o simplemente no funciona, podemos eliminarlo con: xrandr --rmmode LVDS1 1000x600_60.00 ) , pero cuando reiniciemos tendríamos que hacer nuevamente todo este procedimiento, por lo que podemos hacer una de estas dos cosas:

E) Un script que haga esto por nosotros dándole permisos de ejecución y que se ejecute al iniciar el sistema, ver para ello el tema: Hacer que se ejecute un script en el inicio del sistema  El texto de el script seria ( teniendo en cuenta los datos que me da mi pc, en cada caso habrá que cambiarlo a medida) :

#!/bin/sh
xrandr --newmode 1280x768_60.00  47.50  1000 1040 1136 1272  600 603 613 624 -hsync +vsync
xrandr --addmode LVDS1 1000x600_60.00
xrandr --output LVDS1 --mode 1000x600_60.00

En mi caso lo que he hecho es crear el script, guardarlo en mi carpeta personal, darle permisos de ejecución ( ver  Crear un script básico ) y añadirlo en "Aplicaciones al inicio" ( gnome-session-properties ).

F)  O como alternativa al paso anterior, podemos editar el siguiente archivo: sudo gedit /etc/gdm/Init/Default  ( si se usa gnome-shell ) ( o sudo gedit /etc/mdm/Init/Default si en vez de gdm la distro que usamos utiliza mdm como gestor de la pantalla de acceso a la sesión - pantalla de login - , como en Mint Cinnamon).

Buscamos las lineas:
PATH=/usr/bin:$PATH
OLD_IFS=$IFS

y añadimos después de estas linea:

xrandr --newmode 1280x768_60.00 47.50  1000 1040 1136 1272  600 603 613 624 -hsync +vsync
xrandr --addmode LVDS1 1000x600_60.00
xrandr --output LVDS1 --mode 1000x600_60.00


Guardamos los cambios realizados y con ello tendremos una nueva resolución de pantalla de forma permanente cuando reiniciemos el ordenador.

-------------------------------------------------

Podemos añadir mas de una resolución nueva, siguiendo los pasos anteriores,  añadiendo las tres líneas por cada una de las resoluciones que queramos añadir, dejando en último lugar la resolución que queramos que sea con la que se abra el sistema, estando las otras resoluciones disponibles desde los programas gráficos lxrandr, resapplet o configuración de sistema->pantalla.

Por ejemplo el script puede quedar:

#!/bin/sh
xrandr --newmode 1280x768_60.00  79.50  1280 1344 1472 1664  768 771 781 798 -hsync +vsync
xrandr --addmode LVDS1 1280x768_60.00
xrandr --output LVDS1 --mode 1280x768.00

xrandr --newmode 1000x600_60.00   47.50  1000 1040 1136 1272  600 603 613 624 -hsync +vsync
xrandr --addmode LVDS1 1000x600_60.00
xrandr --output LVDS1 --mode 1000x600_60.00

para añadir las resoluciones 1280x768 y 1000x600, dejando 1000x600 como resolución de inicio.

-------------------------------------------------
En el caso de obtengamos un mensaje de error "out of range"  ( fuera de rango ) , que suele venir porque la tasa de refresco del monitor es diferente a la configurada por defecto, para solucionarlo solo hay  que añadir la tasa soportada por el monitor. Para hacer esto hay que agregarla a la linea última línea,  con --rate, por ejemplo: xrandr -- output LVDS1 -- mode 1000x600  --rate 60,00

--------------------------------------------------

Borrar una resolución de la lista de modos disponibles: por ejemplo para borrar la resolución 1000x600_60.00: el comando que hay que ejecutar en la terminal es: xrandr --delmode LVDS1 1000x600_60.00 , o  xrandr --rmmode 1000x600_60.00

--------------------------------------------------

Desde hace varios años Ubuntu ya no usa el archivo /etc/X11/xorg.conf pues detecta todo al vuelo. Aunque he leído que si se puede crear el archivo, y editarlo para indicar las resoluciones que soporta el monitor y la tarjeta de vídeo,  y añadir la resolución que queramos,  yo no lo he conseguido siguiendo ni una ni otra de estas soluciones:

http://usemoslinux.blogspot.com/2013/04/no-te-aparecen-las-resoluciones-que.html

http://jsoto77.wordpress.com/2011/09/16/cambiar-resolucion-de-pantalla-en-ubuntu-11-04-o-linux-mint-11-2da-solucion/

-------------------------------------------------

7 comentarios:

  1. Hola hatteras

    Muy buen manual, si señor
    sigue así

    Saludos

    ResponderEliminar
  2. Me gustó mucho el articulo. Esta interesante y bueno para poder probar nuevos modos de pantalla que aprovechen mejor la resolución de la misma (especialmente si queremos aprovechar mejor el espacio)

    Pero mi tener la siguiente duda, ¿como calculas la resolución de pantalla? digo, tu usas numeros muy concreto y no es como que uno pueda ingresar valores al asar porque podriamos cometer el error de ingresar valores de una 16:9 en una pantalla de 4:3 y visceversa. Existe alguna página o formula para hacer el cálculo y no fastidiar la pantalla.

    Gracias por leerme y seguimos en contacto

    ResponderEliminar
  3. Itzcuauhtli :
    "Para saber cual es la resolución mínima, la actual y la máxima que soporta nuestro monitor, debemos fijarnos en la información que nos dio el comando xrandr" vuelve a leerte esa línea y las siguientes.

    ResponderEliminar
  4. Hola, tuve un problema con la tarjeta grafica al actualizarse Debian, pude solucionarlo pero de todas maneras la pantalla me quedo en una resolución menor a la de fabrica. Intento añadir otra resolución pero me sale con este problema luego de agregar el newmode:
    xrandr: Failed to get size of gamma for output default
    root@debian-ali:/home/ali81# xrandr --newmode "1368x768_60.00" 85.25 1368 1440 1576 1784 768 771 781 798 -hsync +vsync
    xrandr: Failed to get size of gamma for output default
    X Error of failed request: BadName (named color or font does not exist)
    Major opcode of failed request: 149 (RANDR)
    Minor opcode of failed request: 16 (RRCreateMode)
    Serial number of failed request: 19
    Current serial number in output stream: 19

    ¿Alguna solución? Gracias de todas maneras por compartir tu conocimiento.

    ResponderEliminar
    Respuestas
    1. En http://forums.debian.net/viewtopic.php?f=5&t=111521 al final del tema se dice que la solución es instalar: linux-firmware-nonfree
      No me hago responsable de lo que pueda pasar.

      Eliminar
  5. Muchas gracias, muy bien explicado (hasta yo lo he hecho..)
    Tengo un monitor que sí que funciona las resoluciones bien pero tiene partes de la pantalla estropeadas, que es el que uso para instalar, y otro que tiene la pantalla bien pero siempre me da problemas con las resoluciones al instalar cualquier SO de win y linux mint, que es el que dejo fijo una vez instalado y no sé porqué no reconoce las resoluciones, porque una vez configurada con el otro monitor funciona perfectamente.
    De verdad muchas gracias por ayudar.
    Muy bueno.

    ResponderEliminar
  6. Me costó un poco (nuevo en Linux Mint) pero finalmente puse la resolución deseada y la mantuvo despues de apagar y prender la pc.
    Muchas gracias por la data.

    ResponderEliminar

A la vez que haces un comentario, por favor da una puntuación al tema: malo, normal, bueno o muy bueno.
Gracias.