Não, como o kernel não fornece nenhum tipo de sinal de "adormecer" antes de congelar todos os processos, não há uma maneira independente de distribuição para detectá-lo.
Dito isto, praticamente todas solicitações de suspensão - incluindo o lid-close - tendem a passar por algumas APIs de espaço de usuário: eventualmente, elas chamam a função Suspend() do systemd-logind via D-Bus, ou gerar o comando pm-suspend . Ambos têm vários tipos de "ganchos" que podem ser usados para isso.
(Note que não importa o que você faça, um echo mem > /sys/power/state direto permanece quase invisível para o userspace, a não ser para assistir a saltos repentinos do relógio ...)
Então, se você usar systemd como init:
-
Instale
xss-locke faça o seu ambiente de trabalho iniciá-lo no login (via~/.xinitrc, via~/.config/autostart/, ou via qualquer outro):xss-lock xlock &
Isso manipulará as notificações de pré-suspensão do systemd, bem como as chamadas manuais
loginctl lock-sessions, caso você precise delas. -
Crie um script de gancho do pm-utils em
/etc/pm/sleep.d/50lock:#!/bin/sh loginctl lock-sessions
(Não se esqueça de
chmod +x.) Você não precisa disso para regular systemd suspender, mas ele irá enviar uma notificação para xss-lock sempre que você executar manualmentepm-suspend.
Se você estiver usando outro sistema de inicialização:
Se você estiver usando pm-suspend , suponho que você possa executar xlock diretamente do script de gancho pm / sleep.d. Isso exigiria que você também configurasse diretamente as variáveis de ambiente DISPLAY e XAUTHORITY , o que é meio ruim, já que elas podem variar de inicialização para inicialização (embora algumas pessoas codifiquem :0 lá ...)
Em geral, nessa situação, os métodos específicos do ambiente de desktop podem funcionar melhor.