Что происходит, когда я нажимаю «Завершить работу» из графического интерфейса?

Я уже давно ступаю головой об этом. Это связано с этим вопросом . Я хотел бы узнать, что именно происходит, когда я решил закрыть свой Linux-ящик из графического интерфейса. Это, кажется, плохо (если вообще) документировано.

В идеале я надеюсь на ответ DE-и OS-агностик. Если учесть это, меня интересует конкретный случай Mandriva 2010.1 и Debian 6.x (Squeeze) и 7.0 (Wheezy) всех запущенных Gnome. (Если вы уделяете пристальное внимание, да, это Gnome 2 и Gnome 3)

В принципе, я хотел бы знать, какая команда / сценарий / последовательность скриптов запускается, когда я нажимаю «Shut down» или «Restart», поэтому я могу изменить их поведение. Некоторые сообщения на форуме, на которые я смотрел, предполагают взлом /etc/polkit-1/* но эта структура каталогов – это только скелет в моем Debian (Squeeze), например.

Может ли кто-нибудь помочь?


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

То, что я пробовал до сих пор

  • Заменил исполняемый файл shutdown собственным скриптом. Это не работает: когда я нажимаю shutdown Gnome выходит из системы, не выполняя мой скрипт.
  • Пробовал редактировать меню Gnome 2. Нет радости: опции «Выключение», «Выход из системы» и «Блокировка экрана» не отображаются в редакторе меню.
  • Посмотрел /usr/share/menu , ничего полезного там.

Возможные пути решения

  • используя опции GUI (возможно ли это?)
  • Глядя на исходный код shutdown
  • Глядя на исходный код gnome-session

Обновить

Согласно моим комментариям к нижеприведенному ответу, я просмотрел действия polkit в /usr/share/polkit-1/actions/ и нашел (в файле org.freedesktop.consolekit.policy ) действие с именем org.freedesktop.consolekit.system.stop-multiple-users который выдает сообщение

 System policy prevents stopping the system when other users are logged in 

Я думаю (из-за org.freedesktop.* об именах org.freedesktop.* ), Что это какой-то сигнал, отправленный в DM через D-BUS. Более того, это сообщение появляется при попытке завершить работу графически, когда другие пользователи вошли в систему, поэтому механизм, который запускает его, должен быть тем же самым механизмом, который запускается, когда из «GUI» выбрано «Shut Down» или «Power Off».

Может ли кто-нибудь подтвердить / опровергнуть? Есть ли возможность каким-то образом перехватить этот сигнал или изменить его?

  • Запуск простого скрипта с systemd при завершении работы или перезагрузке
  • systemd: запуск сценария при завершении работы после того, как файловые системы установлены только для чтения
  • Как остановить скрипт в определенное время, пока он не начнется снова cron?
  • Как диагностировать висит на выключении
  • Почему я могу войти в систему через SSH (PAM Auth), в то время как `shutdown -k` активен?
  • Debian wheezy - зависание при выключении
  • Почему этот сценарий останова не работает при выполнении ACPID?
  • Запуск расписания с использованием ConsoleKit и Dbus
  • One Solution collect form web for “Что происходит, когда я нажимаю «Завершить работу» из графического интерфейса?”

    Это зависит от вашего Диспетчера дисплея! (то есть KDM, GDM)

    Пожалуйста, имейте в виду, что ваш DM работает как root! (для запуска сеансового процесса в качестве пользователя, которому вы входите в систему, необходимы привилегии root)

    Когда вы нажимаете выключение в KDE или GNOME, ваш DE посылает сигнал вашему DM для выключения или перезапуска после завершения сеанса. Затем ваш DE сообщает, что каждая программа заканчивается, и как только весь другой процесс завершается (или истекает время ожидания), завершается последний процесс вашего DE – сеансового процесса.

    Процесс сеанса – это первый процесс, запущенный в сеансе X11. Когда он убит или завершается, сеанс завершается. Вы когда-нибудь видели этот xterm при запуске X без DE? Это сеанс. Этот процесс называется kdeinit в KDE и gnome-session в GNOME.

    Как только сеанс завершится, управление возвращается в ваш DM (который ожидает завершения процесса X), и он проверяет, что DE сказал ему сделать. Если он сказал, что он выключится или перезапустится, он сделает это. В другом случае он просто запустит новый экран входа в X.

    Это также связано с проблемами, которые, возможно, были у вас в прошлом: некоторые DE не могут отключиться или перезагружаться, просто чтобы выйти из системы, когда они используются в сочетании с некоторыми другими DM.

    В любом случае, это не так плохо документировано. У GDM есть страница руководства с командой, которая позволяет вам отключить ее, как я уже говорил ( gdm-control ). KDM имеет отличную документацию и имеет аналогичную (немного более сложную) утилиту с именем kdmctl .


    Завершение работы и перезапуск возможно без PolicyKit, но PolicyKit служит для многих целей, необходимых для современных систем, таких как установка дисков без использования root, приостановки или спящего режима на компьютере. И это плохо документировано!

    Проверьте это, если вы хотите узнать больше о том, что такое PolicyKit и как оно работает: http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html

    Interesting Posts

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

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

    ALSA – Traktor Audio 2 – Как разделить передние и задние стереоканалы / Как отладить dmix

    Добавить и выполнить пакет для дефрагментации фрагментированного объема Ext3 под BusyBox в Synology CS407? Как?

    Стандартный unix используется для разделения «foo.bar.baz» на «foo.bar» + «.baz»?

    Извлечь строки из текстового файла с одним столбцом, равным максимальному

    Как регистрировать нагрузку GPU?

    Фон панели инструментов KDE перепутался

    Найдите точное совпадение идентификатора, который всегда находится на одной строке ниже шаблона через grep

    = sign в конце .sock-файлов в выводе ls

    Unix bash скрипт проверяет пустые файлы gz

    Почтовая папка без указания пути к папке и требует только один аргумент

    Проблема SSI с http в centos

    настроить fetchmail / exim4 для загрузки с учетной записи gmail и переслать на другой адрес электронной почты

    Новый пользователь Запуск скрипта с qsub

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