Изящное завершение работы в 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 закрывает свои дочерние элементы?

3 Solutions collect form web for “Изящное завершение работы в ArchLinux”

Чтобы изящно завершить работу вашего рабочего стола, вам может потребоваться поднять 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 работал.

  • Проблема с gdm на debian
  • Debian: как разрешить сбой Xserver
  • После включения SELinux (разрешающего режима) в Debian Wheezy gdm3 не завершит загрузку
  • Как запустить скрипт после входа в систему с помощью gdm?
  • Ubuntu Gnome логин
  • Экран экспорта не работает на Ubuntu Gnome (gmd3)
  • Отключить приостановление GDM на экране блокировки
  • Как выполнить сценарий оболочки при запуске Kali Linux?
  • Отобразить имя хоста в GDM3 на Fedora 19 на экране входа в систему
  • Как изменить сеанс по умолчанию?
  • Запуск NetworkManager перед gdm.service с помощью systemd
  • Interesting Posts

    Как выполнить действие только в первой строке?

    Как сделать cron отправлять электронную почту с журналом ошибок, когда скрипт вызывает ошибки?

    Чтение многострочного текста внутри сценария bash

    Какие методы я могу использовать для создания красочных сообщений MOTD при входе в систему?

    Создание и экспорт / импорт переменной с awk?

    rsync игнорировать владельца, группу, время и perms

    iptables и физическое совпадение

    Оптимизация сценария оболочки с длительным циклом работы

    Bash (одиночная строка): выполнить вторую команду, если сначала это произойдет, выполните 3-е, если это не так?

    Подключение к автономной сети на втором интерфейсе

    маршрутизация между пространствами имен linux

    linux mint висит – как найти причину?

    Проблемы с обновлением BIOS через Ubuntu

    Использование номеров в файле A для получения уникального идентификатора из файла B на основе порядка, указанного в файле A

    Как назначить соответствующие разрешения для общего ресурса Netatalk?

    Linux и Unix - лучшая ОС в мире.