Gestionar pantallas externas en Linux

Hace ya algún tiempo que utilizo una pantalla externa junto con la integrada del portátil. Bueno, para serte totalmente sincero, utilizo dos pantallas externas, tal y como te explico en el artículo de usb a hdmi en Linux con DisplayLink. La cuestión es que, hasta la fecha, estaba totalmente satisfecho con el sistema que tiene tanto GNOME, como otras aplicaciones como RedShift, para ajustar la temperatura de la pantalla en función de hora del día para conciliar el sueño. Hasta que me he dado cuenta, o mejor he caído en la cuenta, de que esto no funciona con los monitores externos. Lo cierto, es que yo estaba la mar de tranquilo, hasta que observé que el monitor integrado tenía un color anaranjado, mientas que los externos estaban tan fríos como siempre. Así me decidí a buscar una solución para esto. La solución vino de la mano de ddcutil. Una herramienta que te permite gestionar pantallas externas en Linux. De esta manera puedes ajustar el brillo o los niveles de color gracias a esta herramienta.

Gestionar pantallas externas en Linux

Gestionar pantallas externas en Linux

Como te adelantaba en la introducción, ddcutil es una herramienta que te permite gestionar pantallas externas en Linux. Así puedes ajustar parámetros como el brillo o los niveles de color. Vamos, en pocas palabras, cualquier cosa que puedas hacer desde la configuración de la propia pantalla o monitor, también la vas a poder hacer desde Linux.

Ventajas de gestionar pantallas externas en Linux

Es muy probable que estés pensando, que ventajas te puede aportar gestionar las pantallas externas en Linux. La pantalla que quieres configurar está al alcance de la mano, normalmente a través de un botón. Desde allí, mediante un nada intuitivo podrías configurar la pantalla. Pero, en general, el problema, no reside solo en que no sea intuitivo el menú, sino que además hace bastante tediosa la configuración. Cuando realizas un cambio, tienes o que pulsar el botón de otra forma, o sales al menú principal, o tienes dificultades para volver. Si, no son grandes problemas, pero lo cierto es que no es nada cómodo, o al menos lo que yo me he encontrado hasta el momento.

Pero este es el menor de los inconvenientes. Suponte que ya consiste llegar a tu configuración perfecta en cuanto al color. Pero quieres aplicar eso de la temperatura cálida para la noche. ¿Tienes que cambiarlo todas las noches a mano?. Y luego por la manñana ¿recuperar los colores? Creo que me no me equivoco, si te digo que esto no lo has hecho nunca. A lo mejor, una vez, pero creo que ni esas.

La cuestión es que a través de la herramienta ddcutil puedes cambiar la configuración tantas veces como necesites de forma sencilla. Ya sea mediante un script, o bien, mediante algún otro tipo de herramienta… aunque no quiero adelantarme con esto…

ddcutil

De esta manera, ddcutil para gestionar las pantallas externas en Linux utiliza DDC/DI (Display Data Channel Command Interface), para poder comunicarse con los monitores implementando para ello MCCS (Monitor Control Command Set) sobre I2C.

Normalmente lo controladores para los monitores los exponen al canal I2C como dispositivos /dev/i2c-n. Aunque también hay coporte para otros monitores que implementan MCCS utilizando la conexión USB.

Algunas restricciones interesantes,

  • ddcutil no soporta las pantallas de los portátiles que son controladas mediante una API especial.
  • En general ddcutil puede ser reconstruido en una máquina virtual, pero no funcionará. Sin embargo, si la máquina virtual se conecta a una tarjeta de vídeo y se ejecuta en un controlador no virtualizado, en ese caso si que funcionará.
  • Algunos controladores propietarios, como puede ser NVIDIA, puede requerir alguna configuración especial. En el caso de AMD, requieren una versión especial de ddcutil.
  • Hay algunas características que están implementadas pero que no han sido probadas como puede ser la lectura y escritura de la tabla de tipos de cara características.

Instalación de este gestor de pantallas externas para Linux

Aunque existe un repositorio desde el que instalarte la última versión, en genereral no es necesario. Así si quieres instalar esta herramienta, tan solo tienes que ejecutar la siguiente instrucción,

sudo apt install ddcutil

En el caso de que quisieras recurrir al repositorio externo, las instrucciones a ejecutar son las siguientes,

sudo add-apt-repository ppa:rockowitz/ddcutil
sudo apt update
sudo apt install ddcutil

Uso y funcionamiento

Respecto al uso y funcionamiento de ddcutil indicarte que o bien lo utilizas con derechos de administrador (sudo), o bien, añades a tu usuario al grupo i2c. Para esta segunda opción, que es la mas recomendable por otra parte, tienes que ejecutar la siguiente instrucción,

sudo usermod -aG i2c $USER

Una vez hecho esto, para que los cambios sean efectivos y puedas utilizar ddcutil sin ganar derechos de administrador, tienes que salir y volver a entrar en la sesión. O bien también puedes ejecutar la instrucción,

newgrp i2c

¿Que puedes hacer con ddcutil?

ddcutil implementa los siguientes comandos. No están todos los que son, pero si todos los que están. No los he querido citar todos, porque puedes recurrir a la documentación de esta herramienta que encontrarás en la información adicional de este artículo.

  • detect lista los monitores detectados. Es importante que te quedes con el número del bus /dev/i2c-N, para utilizarlo en las siguientes consultas. Así, puedes obtener información conreta para cada uno de los monitores.
  • vcpinfo muestra los códigos de las características VPC que ddcutil sabe como interpretar. Aquí obtendrás una información muy detallada. Sin embargo, a mi me resulta abrumador la cantidad de información mostrada. En lugar de esto, estoy utilizando vcpinfo profile --terse. Al utilizar la opción -terse, el resultado se muestra de forma que lo puedes utilizar para realizar scripts. Así por ejemplo, ddcutil --bus 5 vcpinfo profile --terse, me devuelve algo como lo que puedes ver a continuación,
VCP code: 10: Brightness
VCP code: 12: Contrast
VCP code: 13: Backlight control
VCP code: 14: Select color preset
VCP code: 16: Video gain: Red
VCP code: 18: Video gain: Green
VCP code: 1A: Video gain: Blue
VCP code: 6B: Backlight Level: White
VCP code: 6C: Video black level: Red
VCP code: 6D: Backlight Level: Red
VCP code: 6E: Video black level: Green
VCP code: 6F: Backlight Level: Green
VCP code: 70: Video black level: Blue
VCP code: 71: Backlight Level: Blue
VCP code: 9B: 6 axis hue control: Red
VCP code: 9C: 6 axis hue control: Yellow
VCP code: 9D: 6 axis hue control: Green
VCP code: 9E: 6 axis hue control: Cyan
VCP code: 9F: 6 axis hue control: Blue
VCP code: A0: 6 axis hue control: Magenta

Llegados a este punto, para obtener el valor del brillo de la pantalla que se encuentra en el bus 5, tan solo tienes que ejecutar la instrucción,

ddcutil --bus 5 getvcp 10

Y por otro lado, si lo que quieres es establecer el brillo al 80%, en lugar de leerlo, la instrucción a ejecutar por otro lado sería,

ddcutil --bus 5 setvcp 10 80

Sencillo, ¿no te parece?

Conclusión

De esta manera puedes crear tus scripts para establecer el brillo de la pantalla a un valor determinado, o jugar con los colores, para conseguir el efecto mas cálido por las tardes y mas frío por las mañanas, etc.

Vamos que tienes todo un mundo de posibilidades al alcance de tus scripts. Tan sencillo como establecer el brillo o modificar la temperatura de una pantalla, sin la incomodidad de hacerlo desde el menú de la propia pantalla.

La cuestión, que es en lo que estoy trabajando, es enlazarlo con una aplicación gráfica que se encargue de ajustar la temperatura de la pantalla en función de la hora del día, al igual que lo hacen otras aplicaciones para la pantalla integrade tu portatil.


Más información,

Deja un comentario

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