Вопрос или проблема
Я хочу выполнить скрипт, который аккуратно завершает работу некоторых из моих приложений. Скрипт должен быть запущен до начала завершения работы графического рабочего стола. Plasma/KDE/X11 не должны быть остановлены до завершения работы скрипта.
Как и где я могу зарегистрировать такой скрипт? Я прочитал много процедур для systemd, но не знаю, как настроить такой сервис systemd, чтобы он задерживал завершение работы Plasma/KDE/X11.
Я использую
– openSUSE 15.6
– X11 21.1.11
– KDE 5.115.0
– Plasma 5.27.11
Ответ или решение
Управление корректной остановкой приложений перед завершением работы графической среды Plasma/KDE/X11 — это важная задача для обеспечения безопасного и бесперебойного завершения сеансов работы. При остановке рабочей среды на платформе Linux с использованием OpenSUSE и системы инициализации systemd, нужно создать соответствующую службу, которая будет выполнять ваш скрипт для завершения приложений до начала остановки Plasma/KDE. Ниже предоставлено подробное описание процесса создания такой службы и ее интеграции в сценарий завершения работы.
Теория
Когда осуществляется завершение работы системы под управлением KDE/Plasma, он отправляет сигнал для завершения всех сеансов. Как правило, это включает отключение X-сервера и выполнение операций отключения, записанных в systemd. Ваша задача состоит в том, чтобы встроить выполнение вашего пользовательского скрипта перед тем, как завершатся сеансы KDE/Plasma и остановка X-сервера начнет выполняться.
Systemd — это современная система инициализации, которая предлагает гибкие средства управления службами и зависимостями между ними. Она предоставляет возможность задавать скрипты, которые будут выполняться в качестве службы перед определенными событиями, такими как завершение работы графической сессии. Systemd работает, определяя файлы «юнитов», которые можно настроить для обеспечения выполнения пользовательских команд в определенное время.
Пример
Допустим, что ваш скрипт называется shutdown-script.sh
и находится в директории /usr/local/bin/
. Этот скрипт отвечает за выполнение задач завершения определенных приложений. Для того чтобы этот скрипт выполнялся перед завершением сеанса Plasma и X11, нужно создать специальный systemd юнит.
-
Сначала необходимо создать скрипт, если он еще не существовал, либо убедиться, что текущий скрипт имеет правильные разрешения на выполнение. Допустите выполнение скрипта командой:
chmod +x /usr/local/bin/shutdown-script.sh
-
Затем создайте новый файл юнита в директории
/etc/systemd/system/
, например, назовите егоmy-shutdown.service
:[Unit] Description=Custom Shutdown Script Before=display-manager.service [Service] Type=oneshot ExecStart=/usr/local/bin/shutdown-script.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target
В этом примере:
Before=display-manager.service
указывает на необходимость выполнения скрипта перед завершением службы менеджера дисплея, управляющего X11 и Plasma.Type=oneshot
указывает, что скрипт будет выполняться один раз и завершается, что отлично подходит для скриптов завершения.RemainAfterExit=yes
гарантирует, что служба будет считаться активированной даже после завершения скрипта, что полезно для корректного управления зависимостями.
-
Активируйте новый юнит, чтобы он стал выполнять команды во время завершения работы:
sudo systemctl enable my-shutdown.service
-
Проверьте работоспособность и корректность синтаксиса конфигурации systemd с помощью команды:
sudo systemd-analyze verify my-shutdown.service
-
Перезагрузите машину или перезапустите systemd для применения изменений.
Применение
После настройки вышеописанного systemd юнита ваш скрипт будет выполняться каждый раз перед тем, как сеанс Plasma/KDE начнет завершать работу. Это обеспечит корректное завершение ваших приложений и минимизирует возможность потери данных. Такой подход к выполнению персонализированных скриптов при завершении сессий является мощным инструментом в арсенале системного администратора, обеспечивая его гибкостью и контролем над процессами. Кроме того, это подходит для различных сценариев автоматизации при работе в различных средах Linux.
Важно помнить, что вы можете адаптировать, улучшать ваш скрипт или добавить условия для более сложных сценариев управления завершением работы, таких как проверка состояний приложений или выполнение дополнительных команд. Применение такого подхода в большинстве случаев требует небольших технических знаний о Linux и функциях systemd, но эффективно используется для получения нужных результатов при автоматизированной обработке задач завершения работы.