Как коварно и изощренно я подчас сам себя наказываю.
Опубликовано: 2024-02-20
Категория: OpenBSD
Теги: xidle хауту openbsd x11 i3 i3lock
Собственно, штука, которую я хотел сделать, проста и незатейлива: нужно мне, чтобы по прошествии некоего настраиваемого промежутка времени экран моего ноутбука блокировался, а еще спустя пару минут и вовсе гасился экономии электричества для (я за экологию, зелёная повесточка и вот это вот всё). Кроме того, нужно мне иметь возможность заблокировать экран вручную: можно хоткеем, но лучше привычным мне издревле способом - поместив указатель мыши в правый верхний угол экрана и оставив его там на несколько секунд (во избежание случайных срабатываний), в иных операционных системах и рабочих окружениях это носит название "hot corners". Ну и хотелось бы мне также видеть экран заблокированным при выходе ноутбука из суспенда/гибернейта, ибо мы же за безопасность и всё такое.
В качестве вишенки на тортике (пресно мне без вишенки) при блокировке экрана хотелось бы видеть симпатичную картинку, а при вводе пароля - внятно иллюстрированный индикатор с результатом этого ввода, если вдруг опечатался (отсюда еще одно важное требование: при блокировке экрана раскладку клавиатуры переключать на дефолтную). Вот и все простые незамысловатые требования, реализуемые в большинстве своем популярными DE прямо-таки из коробки с минимальными и простыми настройками (ну, кроме, разве, переключения раскладки на дефолт, для чего в том же GNOME энтузиасты написали специальное расширение).
Штука лишь в том, что я не использую DE, предпочитая собирать окружение из простых атомарных компонентов, удобных и привычных мне. И компонентов этих есть у меня: xidle
обеспечивает возможность запуска программы или скрипта и по бездействию, и по помещению курсора в нужный угол на нужное количество секунд, а xlock
... позволит насладиться месяцами настроек в попытках получить что-то не вырвиглазное, а потом плюнуть и поставить что-нибудь более вменяемое, например, i3lock
- он умеет и картинку показать, и ввод пароля красиво анимировать.
Настроить xidle
можно через ~.Xresources
как-нибудь так:
! ===== xidle ! drag pointer to lower left corner to lock screen XIdle*position : ne ! and leave it there for 5 second. XIdle*delay : 5 ! lock screen after 10 minutes idle XIdle*timeout : 600 ! then start the locker XIdle*program : /usr/X11R6/bin/xlock
Но есть тут жирный и печальный нюанс: я почему-то категорически не смог в качестве XIdle*program
заставить запускаться скрипт (а мне нужен был именно скрипт!). Пробовал и кавычками экранировать всяко, и /bin/sh -c ...
, и сам скрипт сделать исполняемым - ну вот не работает! А вот если куда-нибудь в ~/.xsession
добавить запуск с параметрами - то работает:
xidle -delay 5 -ne -program '/home/alexd/scripts/screenlock.sh' -timeout 600 &
Собственно, о самом скрипте (на тему переключения раскладки напишу отдельную статью, тут лишь отмечу, что нужно поставить пакет xvkbd), там всё достаточно очевидно - поменять раскладку, блокировать экран с установкой красивой картинки и через 120 секунд гасить монитор:
#!/bin/ksh # переключим раскладку на латиницу xvkbd -text '\[ISO_First_Group]' # Взято из man i3lock revert() { xset dpms 0 0 0 } trap revert HUP INT TERM xset +dpms dpms 120 120 120 /usr/local/bin/i3lock -n -i /home/alexd/Pictures/Wallpaper1.png -e revert
Ну и чтобы это счастье работало при suspend\hibernate, добавим в /etc/apm/suspend
и /etc/apm/hibernate
соответственно:
/usr/bin/pkill -USR1 xidle
Вуаля. Отдельно отмечу приятную мелочь: при просмотре видео с youtube.com в firefox, тот каким-то образом обманывает xidle и экран не фризится до остановки видео. Слышал, что еще mplayer умеет делать подобный heatrbeat, но не проверял.
Собственно, проделав вышеописанные манипуляции я столкнулся с тем, что блокировка экрана по таймауту работает только сразу же после запуска xidle и категорически перестает работать при невыясненных до конца обстоятельствах: то ли после возвращения из суспенда, то ли нет... Долго, долго я бился над разгадкой, половину интернетов перекопал, и...
Оказывается, я в ~/.xsession
добавил когда-то еще при первоначальной установке ну чисто автоматически строчку xset s off
, для отключения, значит, иксового хранителя экрана. Вот эта мелочи и мешала нормальной работе блокировки по неактивности. А как закомментил - стало мне счастье.
text/gemini;
This content has been proxied by September (ba2dc).