Я пытаюсь настроить свой ноутбук с LUbuntu 18.04, чтобы сначала перейти на экран входа в систему, а затем , а затем после отображения экрана входа в систему, приостановить работу. Причина этого заключается в том, что по умолчанию простой приостановки и последующего отображения экрана входа в систему при возобновлении приводит к задержке около 5 секунд, прежде чем экран входа в систему отображается после возобновления, тогда как, если экран входа в систему уже активирован, когда машина приостановлена, оно доступно почти сразу после возобновления.
В любом случае, я изучал, как это сделать, и мне кажется, что мой лучший вариант - просто запустить скрипт при закрытой крышке, который сначала вызывает dm-tool lock
с последующей задержкой, если необходимо дождаться появится экран входа в систему, а затем systemctl suspend
.
Однако, как связать действие закрывающейся крышки с запуском этого скрипта? Из моего исследования стало ясно , что acpid
- это путь. Из прочтения справочной страницы выясняется, что в /etc/acpi/events
должен быть исполняемый скрипт с именем lidbtn
. Каталог существует в моей системе, но такого сценария не существует, и страница руководства неясно, что именно он должен содержать. Глядя на другие скрипты в этом каталоге, выясняется, что мне нужно знать, что поместить в строку «event =», но я нигде не нашел этого.
Также упоминается о том, что оконный менеджер обрабатывает это событие, и неясно, что мне нужно сделать, чтобы мой сценарий не конфликтовал с этим. В Xfce Power Manager (Меню -> Настройки -> Power Manager) на вкладке Общие я вижу «Когда крышка ноутбука закрыта» ... Приостановить, но единственными другими вариантами являются «Отключить дисплей» и «Экран блокировки». Нет выбора для "ничего не делать". Что мне нужно сделать здесь? Происходит ли запрошенное действие до или после выполнения сценария acpid, который я могу создать, или это полностью отменяет это?
Сначала я создал новый файл /etc/acpi/events/laptop-lid
, содержащий следующее:
event=button/lid.*
action=/etc/acpi/laptop-lid.sh
Затем я создал /etc/acpi/laptop-lid.sh
, содержащий этот код:
#!/bin/bash
source /home/michael/.Xdbus
grep -q closed /proc/acpi/button/lid/LID/state
if [ $? = 0 ]
then
# close action
dm-tool switch-to-greeter
sleep 5
systemctl suspend
else
# open action
fi
В /home/michael/.Xdbus
I поставить следующее:
export XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
И я сделал /etc/acpi/laptop-lid.sh
исполняемым (chmod a+x
).
Затем я запустил /etc/init.d/acpid restart
Наконец, я вошел в XFCE Power Manager и установил его на «Выключить дисплей», когда крышка ноутбука закрыта, чтобы избежать конфликта с моей новой улучшенной функциональностью. .
Однако я обнаружил, что проблема все еще остается - после выхода из режима ожидания отображается экран входа в систему, а затем машина снова приостанавливается. После небольшого поиска я думаю, что это связано с ошибкой в Ubuntu, которая, по-видимому, все еще существует в 18.04. Я обошел его, проверив, прошло ли более 6 секунд с тех пор, как я пытался заснуть 5 секунд, и если это так, я не приостанавливаю. Кажется, что мой ноутбук на самом деле зависает менее чем за 2 секунды, так что это всегда работает для меня. Я попытался настроить Xfce для блокировки экрана, но, похоже, это тоже не учитывалось - в обоих случаях моя машина была приостановлена менее чем за 2 секунды, в то время как мой сценарий заставлял ее ждать как минимум 5.
Обновление:
После всего этого я все еще был полностью неудовлетворен. Поскольку мои настройки XFCE Power Manager в основном игнорируются, приводя машину в всегда в сон, когда я закрываю крышку, это создает состояние гонки между процессом сна и тем, как далеко дм-инструмент идет к созданию приветствия, что всегда приводит к некоторой задержке при возобновлении, пока этот процесс завершает вызов приветствия. Поэтому я полностью отменил все вышеперечисленные работы и вместо этого сделал следующее:
Редактировать ~/.config/openbox/lubuntu-rc.xml
. Найдите привязку клавиш, чтобы заблокировать экран, и измените ее, чтобы переключиться на приветствующего. Основным эффектом этого, по-видимому, является , а не отключение дисплея, что, по-видимому, важно для того, чтобы приветствующий мгновенно появлялся при возобновлении:
<keybind key='W-L'>
<action name='Execute'>
<command>dm-tool switch-to-greeter</command>
</action>
</keybind>
Теперь вместо того, чтобы закрывать крышку, Я нажимаю Win + L, и как только появляется приветствующий, я затем закрываю крышку.
Примечание: я хотел, чтобы имел отдельный скрипт, который сначала переключается на приветствующего, затем приостанавливается, но, похоже, неважно, как я пытаюсь приостановить (systemctl, dbus и т. Д.) Их ] все отказываются отстраняться от экрана блокировки без ручного вмешательства - ввода пароля из диалогового окна - это невозможно удовлетворить, потому что мы находимся на экране блокировки!