Нет, так как ядро не предоставляет какой-либо сигнал "засыпания" до замораживания всех процессов, нет никакого независимого от распределения способа его обнаружения.
Тем не менее, почти все запросы приостановки - включая закрытие крышки - имеют тенденцию проходить через несколько пользовательских интерфейсов API: в конечном итоге они либо вызывают функцию Suspend() systemd-logind через D-Bus, либо порождают команду pm-suspend . Оба имеют различные виды "крючков", которые можно использовать для этого.
(Обратите внимание, что независимо от того, что вы делаете, прямое echo mem > /sys/power/state остается практически невидимым для пространства пользователя, если не считать внезапных скачков часов ...)
Итак, если вы используете systemd в качестве init:
- Установите - xss-lockи сделайте так, чтобы среда рабочего стола запускала его при входе в систему (через- ~/.xinitrc, через- ~/.config/autostart/или через что угодно):
 - xss-lock xlock & - Это будет обрабатывать предварительные уведомления systemd, а также ручные - loginctl lock-sessionsесли они вам понадобятся.
 
- Создайте скрипт подключения pm-utils в - /etc/pm/sleep.d/50lock:
 - #!/bin/sh loginctl lock-сессии - (Не забудьте - chmod +x.) Это не нужно для обычного приостановления systemd, но оно будет отправлять уведомление в xss-lock всякий раз, когда вы вручную запускаете- pm-suspend.
 
Если вы используете другую систему инициализации:
Если вы используете pm-suspend , я полагаю, вы можете запустить xlock непосредственно из скрипта ловушки pm/sleep.d. Это потребовало бы, чтобы вы также непосредственно устанавливали переменные окружения DISPLAY и XAUTHORITY , что довольно ужасно, так как они могут варьироваться от загрузки к загрузке (хотя некоторые люди используют жесткий код :0 там ...)
В целом, в этой ситуации методы, специфичные для среды рабочего стола, могут работать лучше.