Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Cómo evitar que xss-lock bloquee la pantalla cuando una aplicación está a pantalla completa

Imago voragine.net

xss-lock es un programa que gestiona el bloqueo de pantalla cuando el equipo está inactivo. xss-lock cumple esta tarea llamando a un bloqueador de pantalla externo, y comunicándose con el login manager que define el tiempo de inactividad antes de bloquear la pantalla y conecta con la sesión para salir del bloqueo.

Yo uso xss-lock para gestionar el bloqueo de pantalla en i3wm. xss-lock funciona estupendamente sin mucha configuración excepto cuando hay una aplicación a pantalla completa. En este caso bloquea la pantalla considerando que hay inactividad. Esto es especialmente molesto cuando estoy viendo una película: cada 5 minutos tengo que mover el ratón o se activa el bloqueo.

Para evitarlo he añadido un pequeño script de bash que monitoriza con wmctrl si hay alguna aplicación corriendo a pantalla completa. Si es así, pausa xss-lock con pkill. Cuando se sale del modo pantalla completa, el script reactiva xss-lock.

El script está pensado para un sistema con varias pantallas, como es mi caso:

#!/bin/bash

# Intervalo en segundos para comprobar si hay alguna aplicación a pantalla completa
INTERVAL=60

# Devuelve la resolución de cada pantalla
get_monitor_resolutions() {
    xrandr | grep ' connected' | awk '{print $3}' | sed 's/[^0-9x+]*//g'
}

while true; do
    # obtiene todas las ventanas que estén funcionando a pantalla completa
    fullscreen_windows=$(wmctrl -lG | awk '{print $1, $3, $4, $5, $6}' | while read -r win_id x y width height; do
        for res in $(get_monitor_resolutions); do
            screen_width=$(echo "$res" | cut -d'x' -f1)
            screen_height=$(echo "$res" | cut -d'x' -f2 | cut -d'+' -f1)
            
            if [[ "$width" -eq "$screen_width" && "$height" -eq "$screen_height" ]]; then
                echo "$win_id"
            fi
        done
    done)

    if [[ -n "$fullscreen_windows" ]]; then
        # Pausa xss-lock si hay alguna ventana a pantalla completa
        pkill -STOP xss-lock
    else
        # Vuelve a activar xss-lock si no hay ventanas a pantalla completa
        pkill -CONT xss-lock
    fi

    sleep $INTERVAL
done

Ejecutar el script al inicio en i3wm

Para ejecutar el script cuando se inicia sesión, he añadido la siguiente línea al archivo de configuración de i3, ~/.config/i3/config:

exec --no-startup-id ~/.config/i3/unlock.if.fullscreen.sh

Dependencias

Para que el script funcione wmctrl y xrand tienen que estar instalados en el sistema. En Debian y derivados:

sudo apt install wmctrl xrand

Dejar un comentario

No hay comentarios en esta entrada.
*
*

 

No hay trackbacks