akorop |
|
Темы:
111
Сообщения:
1756
Участник с: 29 февраля 2012
|
Хочется, чтобы по кнопке питания сначала вызывался скрипт, который аккуратно позавершает всё иксовое (с запросами сохранения, если надо), и только потом чтобы делалось собственно завершение системы. Оптимизм внушает такой текст из man systemd-halt.service Immediately before executing the actual system halt/poweroff/reboot/kexec systemd-shutdown will run all executables in /usr/lib/systemd/system-shutdown/ and pass one arguments to them: either "halt", "poweroff", "reboot" or "kexec", depending on the chosen action. All executables in this directory are executed in parallel, and execution of the action is not continued before all executables finished. Делаю так. 1.
Upd. -rwxr-xr-x 1 root root 75 Авг 30 17:32 pre-shutdown |
vasek |
|
Темы:
47
Сообщения:
11742
Участник с: 17 февраля 2013
|
akoropЯ делаю лог shutdown (/usr/lib/systemd/system-shutdown/debug.sh,) в случае проблем так (уже писал не однократно) UPD .... и дополнительно увеличиваю информативность, в меню/консоль grub прописываю - systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1M
Ошибки не исчезают с опытом - они просто умнеют
|
nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
не на том уровне хочешь выполнение скрипта по завершению граф программ. это нужно делать как минимум в пользовательском пространстве. поищи в возможностях WM. у меня кеды реагирует на кнопку выключения и сохраняют сессию.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
с помощью systemd в пространстве пользователя это делается с помощью сервиса вот только что на ваял, работает. ~/.config/systemd/user/sht.service systemctl --user enable shtно, возможно тебе это не подойдет, повторю "поищи в возможностях WM." не забываем о параллельных выполнениях, WM может быть убита и до выполнения этого сервиса, соответственно команды выполнятся но смысла от них будет ноль. а там где ты это изначально хотел делать это полностью не правильное место.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
vasek |
|
Темы:
47
Сообщения:
11742
Участник с: 17 февраля 2013
|
А я попробовал такой способ (когда то попался на глаза такой способ) - создал пустой сервис, который ничего не делает, но останов его (Exec_Stop) при завершении сессии будет обращаться к скрипту выключения. /lib/systemd/system/my_shutdown.service Для проверки сделал простой скрипт shutdown_script.sh Все работает, лог появился.Но есть одно но — нужно смотреть какой юнит делать — системный или пользовательский. А также, как сказал nafanja, проверить очередность выполнения закрытия приложений. А вот для этого я рекомендую использовать лог shutdown, приведенный мной выше (только нужно увеличить информативность вывода) EDIT1 - проверить очередность выполнения закрытия приложений - не точно выразился, имел ввиду, что раньше сработает - скрипт или закроется WM. Но, думаю, с большой долей вероятности, что WM закроется раньше - вообщем нужно смотреть. Но вот для таких операций, как, например, backup, думаю подойдет хорошо.
Ошибки не исчезают с опытом - они просто умнеют
|
nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
vasekты тут написал что скрипт выполняется во время выключения компа. но это не так! на самом деле твой юнит выполнится во время остановки этого юнита а не при выключении компа. он сработает и при systemctl stop my_shutdown. а то что он срабатывает и при выключении компа это просто последствие. поэтому твой вариант это просто костыль. правильно юнит должен инсталироваться в shutdown.target, тогда он будет выполняться именно при выключении компа. vasekэто правильно, но у тя там мешанина. сам скрипт живет в папке пользователя как и сохраненный лог, но юнит то системный. поэтому скрипт должен лежать в /usr/local/bin/, а лог в /var/log/, vasekда и свои системные юниты должны лежать в /etc/systemd/system/ или /usr/local/lib/systemd/system/ свои пользовательские юниты (общие для всех пользователей) тут /etc/systemd/user/ или /usr/local/lib/systemd/user/ а частные пользовательские юниты тут ~/.config/systemd/user/
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |
vasek |
|
Темы:
47
Сообщения:
11742
Участник с: 17 февраля 2013
|
nafanja, со всем согласен, привел просто как альтернативу. И, конечно, нужно писать академический юнит, как ты - тут я даже и спорить не собираюсь. Приведенный юнит не мой, просто мне понравилась идея сервиса пустышки, который ничего не делает, а активируется только в определенный момент. А понравился это способ своей нестандартностью - я вообще предпочитаю использовать все нестандартное. А почему юнит системный, а не пользовательский - я написал, нужно решать, какой удобнее .... а для проверки я выбрал системный. И да, всегда должна быть альтернатива общепринятым методам.
Ошибки не исчезают с опытом - они просто умнеют
|