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

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

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

  • Какие инструменты позволяют мне отображать man-страницы в формате HTML на веб-сервере?
  • Как отправить нелокальную почту с помощью SMTP GMail (GApps)?
  • apt-get не находит phpldapadmin в Debian 9 (Stretch)
  • Debian 9: невозможно использовать sudo
  • Как я могу вставить что-то в VIM из буфера обмена
  • Как добавить другой домен (SOA) в мою установку bind9, когда домен еще не делегирован. Каковы шаги делегации?
  • В принципе, я хотел бы знать, какая команда / сценарий / последовательность скриптов запускается, когда я нажимаю «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».

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

  • Как установить последний NodeJS на Debian Jessie?
  • Установка с использованием синаптических игнорирующих зависимостей
  • Каковы последствия для безопасности, связанные с отсутствием источников «security.debian.org» из sources.list в Debian Jessie?
  • Как установить LC_ALL = en_GB.UTF-8 в Raspbian?
  • фильтровать электронные письма cron через procmail?
  • Изменение Debian и системных часов?
  • 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 - лучшая ОС в мире.