Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Session lock. Дата последней синхронизации: 30 января 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Существует множество утилит для блокировки экрана в текущем сеансе. Но важно отметить, что выбор утилиты сильно зависит от среды, в которой вы находитесь: виртуальная консоль или графический сервер (Xorg или Wayland).

Смотрите List of applications#Screen lockers.

## Среды

### Виртуальная консоль

Для блокировки виртуальной консоли можно использовать `vlock` или physlock.

### Xorg

В Xorg есть много разных блокировки сеанса, поэтому этот раздел, скорее всего, будет неполным. Тем не менее, вот некоторые методы:

- `xlock` из пакета xlockmore
- `xsecurelock` из пакета xsecurelock
- `xscreensaver-command -lock` из пакета xscreensaver
- xss-lock
- `slock` из пакета slock
- kscreenlocker
- i3lock
- i3lock-colorAUR

В большинстве сред рабочего стола предусмотрены способы блокировки сеанса.

### Wayland

Можно использовать swaylock или waylock.

## Блокировка сеанса

Заблокировать сеанс можно различными способами:

- через терминал
- с помощью графического интерфейса:
  - значком рабочего стола
  - с помощью горячих углов
  - из меню (управляемого мышью или клавиатурой)
- с помощью горячих клавиш
- по событию:
  - бездействие (с помощью systemd, xss-lock или xautolock)
  - события systemd (приостановка, гибернация и т.д.).

Последний пункт (срабатывание блокировки от события) является самым сложным, потому что вы можете сделать это одним из двух способов:

- получить триггер действия для выполнения блокировки, а затем выполнить изначальное действие.
- из триггера события добавить блокировку в цепочку событий. Пока это можно сделать только с помощью systemd.

### Триггеры командных оболочек

#### Zsh

Чтобы выполнить команду после бездействия терминала, можно использовать переменную окружения TMOUT.

Для выполнения блокировки её можно объединить с ловушкой по сигналу ALARM. Без ловушки оболочка просто завершится.

Возможно, вы захотите определить, находитесь ли вы в графической среде, иначе ваши графические терминалы могут начать исчезать без понимания причин.

### Триггеры Xorg

#### xss-lock

xss-lock срабатывает при одном из двух событий:

- события systemd
- DPMS

Преимуществом является то, что вы можете управлять ручной блокировкой, блокировкой по бездействию и блокировкой при уходе в ждущий режим в одном и том же месте.

Чтобы выполнить действие по одному из этих событий:

    $ xss-lock <утилита-блокировки>

##### События systemd

По умолчанию xss-lock подписывается на `suspend`, `hibernate`, `lock-session` и `unlock-session` с соответствующими действиями (запустить блокировщик и ждать, пока пользователь разблокирует или убьёт блокировщик).

Вы можете предотвратить срабатывание xss-lock при при событиях `suspend` и `hibernate` (ждущий и спящий режимы) с помощью опции `--ignore-sleep`.

Заблокировать сеанс вручную можно командой `loginctl lock-session`.

##### DPMS

Настройка таймаута DPMS:

      # Переход в энергоэффективный режим после 10 минут бездействия
      xset s on
      xset s 600

Сигналы DPMS также можно настроить в `/etc/X11/xorg.conf.d/` в секции `Monitor`.

Используя сигнал DPMS, можно установить второй таймер, например, для уведомления пользователя или затемнения экрана. Например (из xss-lock(1)):

    # Погасить экран спустя три минуты неактивности, заблокировать экран спустя ещё две минуты, используя i3lock:

    xset s 180 120
    xss-lock -n dim-screen.sh -- i3lock -n

Примечание: При использовании xss-lock с DPMS вам придётся самостоятельно гасить экран. Он не будет срабатывать при просмотре видео.

#### xautolock

    $ xautolock -time 12 -locker "systemctl suspend" -detectsleep

Примечание: xautolock имеет ограничения у выставляемых таймеров:

- от 1 минуты до 1 часа для `time`
- от 10 минут до 2 часов для `killtime`

Может понадобиться добавить `-detectsleep`, чтобы xautolock не блокировал сеанс после возвращения из ждущего режима. Одной из приятных особенностей xautolock являются `corners`.

### Триггеры Wayland

#### swayidle

swayidle получает от Wayland-композитора информацию о неактивности, а также следит за событиями systemd, и выполняет соответствующие команды. Смотрите Sway#Idle.

#### Уведомления D-Bus

Используя `loginctl lock-session` или действие `lock` в logind.conf(5), вы можете уведомить систему через DBUS о том, что хотите заблокировать сеанс. Это уведомление может быть обработано, например, с помощью xss-lock.

#### Бездействие

В logind.conf(5) вы можете настроить `IdleAction` на `lock`. Это отправит уведомление DBUS, которое должно быть кем-то обработано (например, xss-lock) для блокировки сеанса.

Обратите внимание, что это относится ко всей системе целиком (так что это не идеально для многопользовательской среды).

Обратите также внимание, что "это требует, чтобы пользовательские сеансы правильно сообщали системе о бездействии".

#### Юниты

##### Перед ждущим или спящим режимом

Можно использовать Sleep hook.

    [Unit]
    Description=Lock the screen
    Before=sleep.target

    [Service]
    User=%I
    Type=forking
    Environment=DISPLAY=:0
    ExecStart=/usr/bin/i3lock -c 000000

    [Install]
    WantedBy=sleep.target

Чтобы включить его для определённого пользователя, включите `sleep@имяпользователя.service`.

##### Закрытие крышки ноутбука

Можно использовать действие `lock` для соответствующего события ACPI.

## Смотрите также

- Geoff Greer's site: Linux Laptop Locking

Category:

- Security (Русский)