Fijar framerate bajo Linux, Steam y Proton

Steam

Todos buscan tener tantos cuadros por segundo como pueden al jugar un juego en la PC, así que a muchos les parecerá extraño que alguien quiera limitarlos. Pero hay buenas razones para hacerlo: tal vez tu tarjeta gráfica es poco potente, y prefieres una velocidad de cuadros estable a otra que cambia constantemente, o quizá tienes una laptop sencilla, que no tiene el mejor sistema de refrigeración, y no deseas que muera fundida.

Cualquiera que sean tus razones, aquí te presento un mecanismo para limitar ese framerate que tantos problemas te causa.

La herramienta indispensable

Sea que quieras capar la frecuencia de actualización para un programa 3D genérico, o uno que se lance desde Steam, necesitarás un pequeño ejecutable que hará el trabajo, llamado libstrangle. (El caso de Proton es aparte, y lo veremos más adelante).

Para descargar e instalar libstrangle necesitas:

  • git. Para clonar el repositorio del programa. Lo necesitaremos para descargar el código fuente de la utilidad. Puedes instalarlo desde los repositorios de tu distribución si aún no lo tienes.
  • El compilador gcc. Las bibliotecas adicionales necesarias para la compilación están especificadas en la página del proyecto: https://gitlab.com/torkel104/libstrangle. Consúltalas para que tengas todo lo necesario.

Obteniendo y compilando la utilidad

Es muy simple, para obtenerla, colócate en el directorio donde quieras descargar el código fuente y teclea en una consola:

git clone https://gitlab.com/torkel104/libstrangle.git

Esto descargara el código fuente de la utilidad desde su repositorio. Puedes consultar otros mecanismos para obtenerlo desde su página (https://gitlab.com/torkel104/libstrangle)

Para compilar, colocate en el directorio que se creó al clonar el repositorio, y simplemente ejecuta:

make
sudo make install

Si recibes un error, seguramente te hace falta instalar las bibliotecas necesarias para la compilación. Las puedes instalar desde los repositorios de tu distribución. Consulta en la página del proyecto cuales son necesarias.

¡Es todo!

Fijar el framerate para una aplicación cualquiera

La manera más simple es ejecutar el siguiente comando:

strangle <n> <programa>

Donde <n> es el número de cuadros por segundo que deseas establecer, y <programa> es el ejecutable del juego o aplicación 3D.

Por ejemplo:

strangle 30 /usr/local/bin/mijuego

En este caso, se limita a 30 Fps la aplicación. Puedes colocar el número que desees.

Si tu programa está basado en Vulkan, y tienes problemas para capar el framerate, quizá sea necesario establecer una variable adicional utilizando la siguiente sintaxis:

VSYNC=2 strangle <n> <programa>

Programas de Steam nativos

En tu lista de juegos y aplicaciones, haz clic secundario y da en Propiedades.

Da clic en el botón Definir parámetros de lanzamiento.

Cuadro de diálogo

Escribe el comando como se dice en la sección anterior. Sustituye la ruta a tu programa con %command%, esa cadena será reemplazada por Steam automáticamente con la ruta al ejecutable que corresponda. La figura muestra un ejemplo:

Cuadro de diálogo

Programas que utilicen Steam Proton (compatibilidad con Windows)

El mecanismo es completamente diferente. No necesitamos libstrangle (de hecho, no funciona en estos casos). Para «capar» la frecuencia de actualización necesitamos recurrir a una opción propia de dxvk, que es el mecanismo que usa Proton para traducir las llamadas de DirectX a Vulkan.

Debemos crear un archivo de configuración llamado dxvk.conf, en el directorio donde se encuentre el ejecutable del juego que deseamos limitar.

Usualmente, ese directorio se refiere al siguiente:

/home/[tu usuario]/.local/share/Steam/steamapps/common/[juego]

Donde [juego] será el nombre del directorio en que se encuentre instalado el juego en cuestión.

En dicho archivo debemos colocar la siguiente línea:

dxgi.syncInterval = <n>

Donde <n> es un número entero positivo que indica cada cuantos cuadros de refresco de nuestro monitor se dibujará un nuevo cuadro del juego.

Por ejemplo, si nuestro monitor es de 60hz, para obtener una frecuencia de 30 cuadros por segundo en el juego debemos colocar:

dxgi.syncInterval = 2

Esto significa que cada 2 cuadros se debe colocar uno nuevo.

Debe advertirse que al utilizar cualquier programa que reporte los cuadros por segundo, se seguirá mostrando una frecuencia igual a la frecuencia de actualización del monitor.

Esto se debe a que dxvk sigue presentando tantas imágenes por segundo como frecuencia de actualización posea el monitor, pero algunas de éstas imágenes serán repetidas. La tarjeta gráfica sólo creará las imágenes nuevas, lo que conlleva a una reducción de su carga de trabajo.

Recomendaciones

Deshabilita el compositor de escritorio manualmente antes de ejecutar cualquier juego, esto mejora el rendimiento, y usualmente los programas no lo hacen automáticamente de forma adecuada.

En cada escritorio puede conseguir de manera diferente. Por ejemplo, en KDE se puede activar y desactivar con Alt+Shift+F12.

¡Diviértete!

Javier

Maestro en Ciencias de la Computación (UNAM). Durante mucho tiempo interesado en la difusión del pensamiento crítico, la ciencia y el escepticismo. Estudioso de la inteligencia artificial, ciencias cognitivas y temas afines.

También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *