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