Intereting Posts
Некоторые из моих приложений всегда запускаются при входе в Linux Mint Отслеживание файлов, которые используются программой Рекурсивно удалять SVN-файлы установить модуль python для конкретного экземпляра python Отключить автоматическую блокировку экрана в XFCE в Centos Создание блочного устройства из файлов Linux – невозможно смонтировать RDWR из-за неподдерживаемых дополнительных функций (400) Преобразование FLAC-файлов в OGG Vorbis «Греп ломается, заставляя процесс загрузки вешать вечно» Пароль по умолчанию для Kali Linux на Windows 10? Копия USB висит некоторое время, когда достигает 100% Где я должен разместить автономное веб-приложение, которое не требует внешнего веб-сервера? Несколько параметров DH / ECDH в конфигурационном файле Apache 2.4.7 Shell зависает при выполнении команды из ssh Как я могу сделать tcsh эхом время выполнения команды до ее выполнения?

Изящное завершение работы в ArchLinux

Я пытаюсь получить изящное завершение / перезагрузку в ArchLinux с помощью GNOME Shell. Теперь, когда я прошу об отключении, он немедленно отключается, не открывая время открытых программ, чтобы изящно закрыть / сохранить открытые файлы. В результате, когда я перезапускаю Chrome (например), он говорит мне, что сессия не была закрыта правильно и т. Д. Читая в Интернете, я узнал, что systemd при выключении процессов сначала отправляет SIGTERM за которым следует SIGKILL если процесс не приближаясь к заданному таймауту. Однако я замечаю, что в моей системе SIGKILL отправляется сразу после SIGTERM и я предполагаю, что это является причиной неграмотного завершения программ.

Я нашел документацию, которая (если я правильно ее прочитаю) утверждает, что тайм-аут перед отправкой SIGKILL может быть задан параметром TimeoutStopSec= . Также отправка SIGKILL также может быть отключена с SendSIGKILL= опции SendSIGKILL= . Но я не могу найти, где настроить эти параметры … есть ли файл конфигурации systemd shutdown / reboot, где я могу установить эти параметры?

РЕДАКТИРОВАТЬ:

Я сделал несколько тестов, и я обнаружил две интересные вещи:

  1. Если я вручную killall -SIGTERM chrome , как этот killall -SIGTERM chrome , он не будет жаловаться, что он не был закрыт правильно в следующий раз, когда я его снова запустил. Если я killall -SIGKILL chrome его вот так, вместо killall -SIGKILL chrome , он будет жаловаться. Это говорит мне, что хром обрабатывает SIGTERM правильно.
  2. Глядя на вывод моей процедуры выключения, systemd печатает Sending SIGTERM... сразу же после Sending SIGKILL...

Согласно приведенному ниже комментарию, systemd обрабатывает только свои процессы. Так что в моем случае GDM. Это говорит мне, что проблема может быть:

  1. либо GDM не закрывает дочерние процессы (например, Chrome) правильно (т.е. отправляет SIGTERM им)
  2. или systemd отправляет GDM сообщение SIGKILL, чтобы раньше не указывать время для правильного закрытия своих детей.

Есть ли способ проверить / настроить, как GDM закрывает свои дочерние элементы?

Чтобы изящно завершить работу вашего рабочего стола, вам может потребоваться поднять TimeoutStopSec= для GDM или любой другой менеджер дисплея, который вы используете.

Это работало на моем Arch Linux с Gnome 3.12. Оказалось, что это может быть связано с конфигурацией в /etc/gdm/PostSession/Default .

  1. Запустите sudo pacman -S wmctrl чтобы установить wmctrl для управления Windows.

  2. Создайте исполняемый файл для закрытия всех окон. Например, я поместил его в /home/[your_username]/bin/close-all-windows с этим содержимым:

     #!/bin/sh wmctrl -l | while read -r line do wmctrl -c `echo "$line" | sed 's/.* [0-9]* [your_hostname] //'` done 
  3. Измените /etc/gdm/PostSession/Default и добавьте это содержимое перед exit 0 :

     echo " Closing selected windows programs gracefully" export DISPLAY=:0 su [your_username] -c /home/[your_username]/bin/close-all-windows 

Надеюсь, что это сработает.

Сценарий wmctrl sorpass отлично работает для меня (на CentOS 7 мне просто нужно было запустить «yum install wmctrl»). Однако я обнаружил, что / etc / gdm / PostSession / Default, казалось, запускался только при выходе из системы, а не при выключении. Поэтому вместо использования / etc / gdm / PostSession / Default я теперь вызываю скрипт wmctrl sorpass из сценария питона Seamus Phelan, который можно найти на этих двух сайтах:

Эта комбинация скриптов отлично подходит для закрытия Firefox, Chrome и т. Д. Автоматически и чисто, когда я выхожу из системы или закрываю свой настольный компьютер CentOS 7. Обратите внимание, что с CentOS 7 вы должны запустить 'yum install gnome-python2-gnome', чтобы этот скрипт python работал.