Salvapantallas y envío de eventos al sistema "X Window"

Por razones que no vienen al caso necesitaba dejar mi portátil funcionando, pero que no saltase el salvapantallas. Yo utilizo KDE y este permite realizar acciones diferentes cuando llevas el ratón a las esquinas del monitor. En mi Kubuntu 20.04, cada esquina puede hacer una de quince acciones diferentes, incluyendo "no hacer nada" y "activar el salvapantallas". Pero no hay ninguna acción que sea "inhibir la activación del salvapantallas".

Obviamente, si no quería que saltase el salvapantallas ese día, una opción evidente era desactivarlo por completo, pero me incomodaba que no hubiese una accción simple de inhibición temporal.

Tirando de Internet veo que aparentemente existen varios comandos para interactuar con el entorno gráfico y concretamente con el salvapantallas. Algunas de ellas eran loginctl o xdg-screensaver, pero ninguna funcionaba correctamente en mi sistema. Por ejemplo, xdg-screensaver reset no impedía que saltase el salvapantallas, pero sí impedía que se apagase el monitor.

Incluso intenté ver cómo programas como mplayer interactúan con el entorno gráfico para evitar que la pantalla se bloquee mientras estás viendo una película. Asomarse a ese abismo me dio repelús. "No quieres ir por ahí", me dije.

Nada de esto me servía.

¿Qué hace que salte el salvapantallas? La inactividad en el teclado y el ratón, claro. ¿Y si pudiésemos generar actividad "falsa"? ¿Y si pudiésemos introducir eventos sintéticos en el entorno gráfico X-Window?

Pues resulta que enviar eventos falsos a X-Window es rutina. Se pueden usar comandos como xte o xdotool.

Por ejemplo, para mover el ratón a la posición 100,100, podemos escribir xte "mousemove 100 100" (ojo a las comillas) o bien xdotool mousemove 100 100 (aquí no lleva comillas).

Por tanto, una forma simple de que no se active el salvapantallas es ejecutar el siguiente script shell:

jcea@jcea:~$ while [ true ]; do xdotool mousemove 1000 500; sleep 5; xdotool mousemove 1200 600; sleep 5; done

Este código mueve el ratón entre dos posiciones de la pantalla cada cinco segundos. Esta actividad inhibe el salvapantallas, que es lo que necesitaba hacer.

¿Por qué mover el ratón y no hacer alguna acción aparentemente transparente como simular la pulsación de la tela SHIFT o CONTROL? Pues porque cuando vuelves al ordenador puedes no darte cuenta de que el programa está funcionando y como pulses una tecla aparentemente inocua como el cursor o el espacio, podrías estar ejecutando acciones irreversibles si se interpreta conjuntamente con la pulsación de CONTROL.

En cambio, mover el ratón por la pantalla es evidente. Intentas mover el ratón a donde quieres y de repente salta a una esquina... te resulta evidente que este programa está funcionando. Cortas su ejecución con control+c y retomas el control normal de la máquina.

La capacidad para enviar eventos a X-Window es muy interesante y muy práctica (y bastante peligrosa también). Curiosea y verás que se abren puertas bastante útiles. Por ejemplo, echa un vistazo al manual del comando xautomation.