Подробный гайд по программному блокированию экрана в Astra Linux
Важно: Astra Linux поставляется в двух основных редакциях:
- Общего назначения («Орёл») – обычно использует KDE, XFCE или GNOME.
- Специального назначения («Смоленск») – использует собственное окружение Fly и жёсткие механизмы мандатного контроля доступа (Parsec/MLS).
В сертифицированных конфигурациях («Смоленск») рекомендуется использовать только штатные средства, так как замена механизмов блокировки может нарушить требования аттестации.
1. Универсальные методы (рекомендуемые)
Эти способы работают независимо от окружения рабочего стола и соответствуют стандартам Freedesktop.
1.1. Через loginctl (systemd)
# Заблокировать текущую сессию
loginctl lock-session "$XDG_SESSION_ID"
# Заблокировать все графические сессии
loginctl lock-sessions
Работает из любого терминала в пределах пользовательской сессии. Не требует root-прав, но требует, чтобы процесс запускался в контексте активной графической сессии.
1.2. Через D-Bus (ScreenSaver API)
dbus-send --session \
--dest=org.freedesktop.ScreenSaver \
--type=method_call \
/org/freedesktop/ScreenSaver \
org.freedesktop.ScreenSaver.Lock
Стандартный интерфейс, поддерживается Fly, KDE, XFCE, GNOME.
Проверить регистрацию интерфейса:
dbus-send --session --dest=org.freedesktop.DBus --type=method_call /org/freedesktop/DBus org.freedesktop.DBus.ListNames | grep -i screen
1.3. Через xdg-screensaver
xdg-screensaver lock
Требуется пакет xdg-utils (обычно установлен). Вызывает зарегистрированный хранитель экрана.
2. Специфичные команды для окружений Astra Linux
Окружение Fly (Astra Linux SE)
# Штатная утилита блокировки
fly-lock
# Или через dpms/sleep
fly-dpms force
В некоторых версиях fly-lock может отсутствовать в PATH. Полное расположение: /usr/bin/fly-lock.
KDE / XFCE / GNOME (Astra Linux CE)
| Окружение | Команда |
|---|---|
| KDE Plasma | qdbus org.kde.screensaver /ScreenSaver Lock или loginctl lock-session |
| XFCE | xflock4 или light-locker-command -l |
| GNOME/Cinnamon | gnome-screensaver-command -l или cinnamon-screensaver-command -l |
3. Автоматическая блокировка по простою
3.1. Подготовка
Установите утилиту отслеживания активности:
sudo apt update && sudo apt install xprintidle
3.2. Bash-скрипт автоблокировки
Создайте ~/.local/bin/auto-lock.sh:
#!/bin/bash
# Блокировка после 5 минут (300000 мс) простоя
IDLE_THRESHOLD=300000
while true; do
IDLE=$(xprintidle)
if [ "$IDLE" -ge "$IDLE_THRESHOLD" ]; then
# Используем универсальный D-Bus вызов
dbus-send --session \
--dest=org.freedesktop.ScreenSaver \
--type=method_call \
/org/freedesktop/ScreenSaver \
org.freedesktop.ScreenSaver.Lock &>/dev/null
exit 0
fi
sleep 30
done
Сделайте исполняемым: chmod +x ~/.local/bin/auto-lock.sh
3.3. Запуск через systemd user timer (рекомендуется)
# ~/.config/systemd/user/auto-lock.service
[Unit]
Description=Auto screen locker
[Service]
Type=simple
Environment=DISPLAY=:0
Environment=XAUTHORITY=%h/.Xauthority
ExecStart=%h/.local/bin/auto-lock.sh
[Install]
WantedBy=default.target
# ~/.config/systemd/user/auto-lock.timer
[Unit]
Description=Run auto-lock after graphical session starts
[Timer]
OnUnitActiveSec=3min
Unit=auto-lock.service
[Install]
WantedBy=timers.target
Активация:
systemctl --user daemon-reload
systemctl --user enable --now auto-lock.timer
4. Сторонние локеры (i3lock, slock, vlock)
В редакции «Смоленск» использование сторонних GUI-локеров может требовать настройки политик Parsec. В «Орёл» работают без ограничений.
sudo apt install i3lock
Пример запуска:
i3lock -c 000000 --nofork
Для интеграции с системными событиями можно обернуть в скрипт, вызываемый через loginctl или cron.
5. Особенности безопасности Astra Linux
| Аспект | Рекомендация |
|---|---|
| Мандатный контроль (Parsec) | Запуск блокировщика должен происходить в контексте сессии пользователя с корректным DISPLAY и XAUTHORITY. В «Смоленск» процессы с высоким уровнем целостности не могут напрямую управлять GUI-сессией низкого уровня. |
| Cron | Не рекомендуется для GUI-действий. Используйте systemd --user или at. Если cron необходим, добавьте: export DISPLAY=:0 XAUTHORITY=/home/$USER/.Xauthority |
| Аттестация | В сертифицированных конфигурациях модификация pam, lightdm, fly-dm или замена fly-lock нарушает контроль целостности. Используйте только loginctl или fly-lock. |
| Проверка блокировки | loginctl show-session "$XDG_SESSION_ID" -p LockedHint → должен вернуть LockedHint=yes |
6. Отладка и проверка
| Задача | Команда |
|---|---|
| Список сессий | loginctl list-sessions |
| Статус блокировки | loginctl show-session <ID> -p LockedHint |
| Логи D-Bus | journalctl --user -u dbus | grep -i screen |
| Проверка X-сессии | echo $DISPLAY $XAUTHORITY |
| Тест блокировки | sleep 5 && loginctl lock-session "$XDG_SESSION_ID" |
Если блокировка не срабатывает:
- Убедитесь, что скрипт/команда выполняется от имени пользователя, а не
root. - Проверьте, что
XDG_SESSION_TYPE=waylandилиx11установлен. Для X11:export DISPLAY=:0. - В «Смоленск» проверьте журналы Parsec:
dmesg | grep parsecилиjournalctl -k | grep -i mac.
Итоговые рекомендации
| Сценарий | Оптимальный метод |
|---|---|
| Быстрая блокировка из терминала | loginctl lock-session "$XDG_SESSION_ID" |
| Интеграция в скрипт/приложение | D-Bus org.freedesktop.ScreenSaver.Lock |
| Автоблокировка по простою | xprintidle + systemd --user таймер |
| Сертификация «Смоленск» | Только fly-lock или loginctl |
| Кастомный интерфейс блокировки | i3lock + обёртка через systemd --user |