martes, 26 de octubre de 2021

Recuperar resolución previa a la ejecución de juegos que la cambian al salir

Algunos juegos cambian la resolución de tu ordenador y al salir la dejan distinta a la que tenías configurada según tus necesidades.

En mi caso tengo dos pantallas conectadas a mi PC, un monitor Full HD y un viejo televisor LCD que solo admite HD Ready con un refresco adecuado para trabajar.

Configuración de trabajo por defecto
Mi configuración deseada: resoluciones correctas y modo extendido

Como se puede ver en la imagen para trabajar normalmente los tengo configurados de manera que el monitor sea la pantalla principal (la que tiene los botones) y el televisor la extienda hacia la derecha.

Pero después de ejecutar algunos juegos a pantalla completa que no gestionan bien las resoluciones terminan ambos con una resolución pobre y mostrando la misma imagen (en espejo).

Después de salir de DosBox a pantalla completa: resolución pobre y modo espejo

 

La solución más sencilla es reiniciar el ordenador o al menos el entorno gráfico, pero es poco práctico, lo ideal es que un script devolviera la resolución correcta.

Para conseguir este objetivo, lo primero es ver cual es la resolución de tu monitor para lo que usaremos el comando xrandr (si no lo tienes instalado ya estás tardando):

xrandr -q

En mi caso me ha devuelto una salida como ésta:

Screen 0: minimum 320 x 200, current 3200 x 1080, maximum 16384 x 16384
DVI-I-1 connected 1280x720+1920+0 (normal left inverted right x axis y axis) 160mm x 90mm
   1280x720      60.00*+  59.86    50.00    59.94    59.74  
   1920x1080i    60.00    50.00    59.94  
   .......

HDMI-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 510mm x 290mm
   1920x1080     60.00*+  50.00    59.94    59.93  
   1920x1200     59.95  
   1920x1080i    60.00    50.00    59.94
   ........

Vamos a analizar con más detalle la salida de datos obtenida.

  1. La primera línea empieza con la etiqueta Screen 0 y no hay una etiqueta Screen 1, lo que significa que ambos monitores en realidad se comportan como uno solo (modo extendido).
  2. La siguiente línea y otra que aparece más abajo con la misma sangría nos dice a que puerto está conectado cada monitor, la resolución nativa, si está girado, etc...
  3. Debajo de esas líneas aparecen muchas líneas correspondientes a cada resolución soportada, he omitido algunas irrelevantes sustituyéndolas por puntos suspensivos para que no nos perdiéramos en la longitud de la salida.
  4. Nos fijamos en las líneas que tiene un *, ya que es la resolución utilizada en cada pantalla:
    • DVI-I-1: el televisor LCD funciona con una resolución 1280x720.
    • HDMI-1: el monitor funciona con una resolución 1920x1080 y es la pantalla primaria (la que tiene los botones).

Con esta información ya podemos crear nuestro comando para recuperar la resolución:

xrandr --output DVI-I-1 --mode 1280x720 --scale 1x1 --output HDMI-1 --primary --mode 1920x1080 --scale 1x1 --left-of DVI-I-1

Como veis es muy fácil adaptar a cualquier necesidad, definimos dos output para cada conector, con el parámetro --mode le indicamos la resolución y en principio dejamos una escala 1x1.

En el caso del segundo monitor indicamos también que es primary y que extiende al televisor por la izquierda (--left-of DVI-I-1).

Como es lógico, lo ideal es poner ese comando enorme en un script que podemos guardar en /usr/local/bin con permisos de escritura, hacer un acceso directo a él o invocarlo al final de los scripts que ejecutan los juegos problemáticos.

 

No hay comentarios:

Publicar un comentario