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

Я уже давно ступаю головой об этом. Это связано с этим вопросом . Я хотел бы узнать, что именно происходит, когда я решил закрыть свой 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».

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

  • Почему «shutdown now» (без каких-либо других аргументов) запускает скрипты init?
  • Можете ли вы заставить систему Linux остановить и загрузите мою малину в определенное время?
  • Выключение компьютера из Openbox
  • Виртуальная машина, висящая на shudown
  • Опция отключения Linux Mint 17.1 не работает
  • Как выключить или перезагрузить компьютер?
  • systemd: запуск сценария при завершении работы после того, как файловые системы установлены только для чтения
  • Выключение так быстро на iMac
  • 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

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