diff --git a/sistema/etc/elogind/logind.conf.d/10-acpid.conf b/sistema/etc/elogind/logind.conf.d/10-acpid.conf new file mode 100644 index 0000000..6ea7964 --- /dev/null +++ b/sistema/etc/elogind/logind.conf.d/10-acpid.conf @@ -0,0 +1,11 @@ +# acpid ya se encarga de la tapa y del botón de suspender (llama a zzz) y del +# botón de encendido. Si elogind también reacciona, el portátil se suspende +# dos veces: al abrir la tapa se enciende, se vuelve a suspender y luego +# arranca. Así solo lo gestiona acpid. +[Login] +HandlePowerKey=ignore +HandleSuspendKey=ignore +HandleHibernateKey=ignore +HandleLidSwitch=ignore +HandleLidSwitchExternalPower=ignore +HandleLidSwitchDocked=ignore diff --git a/sistema/etc/zzz.d/suspend/10-slock b/sistema/etc/zzz.d/suspend/10-slock new file mode 100755 index 0000000..e1cdc82 --- /dev/null +++ b/sistema/etc/zzz.d/suspend/10-slock @@ -0,0 +1,22 @@ +#!/bin/sh +# Bloquear con slock ANTES de suspender, para que al volver no se vea el +# escritorio. zzz ejecuta este hook como root; slock se lanza como el +# usuario de la sesión de dwm, con su DISPLAY y XAUTHORITY. + +pgrep -x slock >/dev/null && exit 0 + +pid=$(pgrep -xo dwm) || exit 0 +user=$(getent passwd "$(stat -c %u "/proc/$pid")" | cut -d: -f1) +env=$(tr '\0' '\n' <"/proc/$pid/environ" | grep -E '^(DISPLAY|XAUTHORITY)=') +[ -n "$user" ] && [ -n "$env" ] || exit 0 + +env $env setsid chpst -u "$user" /usr/local/bin/slock >/dev/null 2>&1 & + +# Esperar a que slock arranque y tape la pantalla (máximo 2 s) antes de +# dejar que zzz siga con la suspensión. +i=0 +while ! pgrep -x slock >/dev/null && [ "$i" -lt 20 ]; do + sleep 0.1 + i=$((i + 1)) +done +sleep 0.5