Я уже давно бьюсь головой об этом. Это связано с этим вопросом . Я хотел бы выяснить, что именно происходит, когда я решаю закрыть окно Linux из графического интерфейса. Это, кажется, плохо (если вообще) задокументировано.
В идеале я надеюсь на независимый от DE и OS ответ. За исключением этого, меня интересует конкретный случай Mandriva 2010.1 и Debian 6.x (Squeeze) и 7.0 (Wheezy), на которых работает Gnome. (Если вы уделяете пристальное внимание, да, это Гном 2 и Гном 3)
В основном, я хотел бы знать, какая команда / скрипт / последовательность скриптов запускается, когда я нажимаю «Завершение работы» или «Перезапуск», чтобы я мог изменить их поведение. Некоторые сообщения на форуме, на которые я смотрел, предлагают взломать, /etc/polkit-1/*
но эта структура каталогов, к примеру, является всего лишь каркасом в моем окне Debian (Squeeze).
Кто-нибудь может помочь?
РЕДАКТИРОВАТЬ
Что я пробовал до сих пор
- Заменил
shutdown
исполняемый файл на мой собственный скрипт. Это не работает: когда я нажимаюshutdown
Gnome выходит из системы без выполнения моего сценария. - Пробовал редактировать меню Gnome 2. Радости нет: параметры «Завершение работы», «Выход из системы» и «Блокировка экрана» не отображаются в редакторе меню.
- Посмотрел
/usr/share/menu
, ничего полезного там нет.
Возможные пути решения
strace
использование параметров графического интерфейса (это вообще возможно?)- Глядя на
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.*
соглашения об именах), что это какой-то сигнал, посылаемый DM через D-BUS. Кроме того, это сообщение появляется при попытке графически завершить работу, когда другие пользователи вошли в систему, поэтому механизм, который его запускает, должен быть тем же механизмом, который запускается при выборе «Выключить» или «Выключить» в графическом интерфейсе.
Кто-нибудь может подтвердить / опровергнуть? Есть ли возможность как-то перехватить этот сигнал или изменить его?
/etc/init.d/rc.local
для вызова скрипта при остановке .