призупинити І заблокувати екран при закриванні кришки в арці / systemd


22

який найпростіший спосіб заблокувати екран І зупинити його при закриванні кришки? Я використовую гачки для подій /etc/systemd/logind.confі успішно призупиняю їх після закриття кришки. Однак я втрачаюсь, коли мова заходить про блокувальну частину - чи потрібно ввімкнути якусь заставку і як я можу викликати дві події одночасно logind.conf?


Поза межами сфери, тому я коментую: в i3 дуже легко призначати клавіші для команд. Оскільки mod+Lмені вже призначено blurlock, це було легко mod+Sбути blurlock && systemctl suspend -iзамість цього. Отже, не при закриванні кришки, але дуже добре вибираю, чи хочу я просто заблокувати, або заблокувати та призупинити.
pzkpfw

Відповіді:


17

У Arch Wiki є кілька прикладів .

В основному, це включає в себе створення файлу сервіс для вашого шафки екрану і забезпечення його зачіпається до або suspend, hibernateабо sleepцілі.

Якщо ви користуєтеся простим шафкою для екрана, наприклад, шаром , /etc/systemd/system/lock.serviceце виглядатиме так:

[Unit]
Description=Lock the screen on resume from suspend

[Service]
User=jason
Environment=DISPLAY=:0
ExecStart=/usr/bin/slock

[Install]
WantedBy=suspend.target

Інші приклади у вікі мають більш складні варіанти, включаючи вимкнення та відкриття інших служб тощо.


Дякую, я бачив цей приклад, але не зрозумів, що ExecStart=/usr/bin/slockбіт стосується блокування з першого погляду.
pldimitrov

Якщо я призупиняю та повертаюсь, мій менеджер дисплеїв X має блокування екрана, це чудово. Але що з моїм ttys? Що робити, якщо я ввійшов у систему, і я призупинив, і я забув вийти зі свого TTys, люди могли перейти туди і продовжувати свою діяльність.
CMCDragonkai

@CMCDragonkai ви хочете, щоб фізик тоді ...
jasonwryan

1
Це працює, але тільки якщо ви єдиний користувач системи. Більш чистим рішенням є використання xss-lock(доступне в Debian, Arch Linux; також Fedora на наступному тижні) та запускати це як користувач разом з i3lockабо slock.
Мартін Удінг

1
@MartinUeding та @jasonwryan, Userє жорстким кодом. Припущення, що цією машиною користуватиметься лише jason(або хтось, хто знає його пароль, як, наприклад, його подруга). В ідеалі ми хотіли б Userстати тим, хто ініціював призупинення, але я не знайшов рішення для цього (поки що).
Рольф

1

Якщо ви використовуєте openrcз elogindє альтернативне рішення (яке не залежить Systemd):

#!/bin/sh
#
# /lib/elogind/system-sleep/lock.sh
# Lock before suspend integration with elogind

username=lerax
userhome=/home/$username
export XAUTHORITY="$userhome/.Xauthority"
export DISPLAY=":0.0"

case "${1}" in
        pre)
            su $username -c "/usr/bin/slock" &
            sleep 1s;
            ;;
esac

посилання: https://gist.github.com/ryukinix/bd0c1ddcbbafdb4149ae70e41b7c822b

Я публікую це, тому що дуже важко було знайти правильний спосіб його роботи, і ця тема з’являється на перших результатах google про "замок після призупинення" чи що завгодно.


0

Незважаючи на те, що відповідь Язонвріяна правильна, вона неповна. Для того , щоб надійно зафіксувати після припинення, а НЕ раніше - коли процес некорневого може запобігти ядро від підвішування, необхідно додати перед = Наприклад , якими силами Systemd чекати ExecStart виклику гасити почати перед припиненням. Використання функції sleep.target охоплює режим призупинення, сну та гібридного сну.

[Unit]
 Description=Lock
+Before=sleep.target

 [Service]
 User=mustapha
 Environment=DISPLAY=:0
 ExecStart=/usr/local/bin/slock

 [Install]
-WantedBy=suspend.target
+WantedBy=sleep.target
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.