From c736ea8b01934d255b7a2e64c5691280beb2a907 Mon Sep 17 00:00:00 2001 From: alejandrogs73 Date: Sat, 26 Sep 2026 19:39:02 +0200 Subject: [PATCH] =?UTF-8?q?sistema:=20bloquear=20con=20slock=20antes=20de?= =?UTF-8?q?=20suspender=20y=20evitar=20la=20doble=20suspensi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit elogind ignora la tapa y los botones para que solo actúe acpid (zzz), y un hook de zzz lanza slock antes de suspender. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01MymT1wzMgXhfC3ZwHqNAVF --- .../etc/elogind/logind.conf.d/10-acpid.conf | 11 ++++++++++ sistema/etc/zzz.d/suspend/10-slock | 22 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 sistema/etc/elogind/logind.conf.d/10-acpid.conf create mode 100755 sistema/etc/zzz.d/suspend/10-slock 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