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-lock
e 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.