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