Що станеться, коли я натискаю кнопку «Завершити роботу» з графічного інтерфейсу?


15

Я вже досить довгий час бив головою проти цього. Це пов’язано з цим питанням . Я хотів би дізнатися, що саме відбувається, коли я вирішу вимкнути свій Linux-скриньку від GUI. Це здається погано (якщо взагалі) документально зафіксовано.

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

В основному, я хотів би знати, яка команда / сценарій / послідовність скриптів запускається, коли я натискаю "Завершити роботу" або "Перезапустити", щоб я міг змінити їх поведінку. Деякі дописи на форумах, на які я розглядав, пропонують зламати, /etc/polkit-1/*але ця структура каталогів є лише скелетом, наприклад, у вікні Debian (Squeeze).

Хтось може допомогти?


EDIT

Що я спробував поки що

  • Замінила shutdownвиконуваний сценарій власним сценарієм. Це не працює: коли я натискаю, shutdownGnome виходить з системи, не виконуючи сценарій.
  • Спробував редагувати меню 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.*умові іменування), що це якийсь сигнал, що надсилається до ДМ через D-BUS. Більше того, це повідомлення з’являється при спробі графічного відключення під час входу інших користувачів, тому механізм, який його запускає, повинен бути тим самим механізмом, який спрацьовує, коли з графічного інтерфейсу вибирається «Вимкнути» або «Вимкнути живлення».

Чи може хтось підтвердити / спростувати? Чи є можливість якось перехопити цей сигнал або змінити його?


Що ви намагаєтеся досягти? Ви можете додати редагування, /etc/init.d/rc.localщоб викликати сценарій при зупинці .
декад

@depquid Те, що я намагаюся досягти, - це в моєму старішому запитанні, до якого я пов'язував: Я намагаюся не допустити, щоб користувач, який увійшов у локальний обліковий запис, не передавав сеанс SSH іншого користувача.
Джозеф Р.

Відповіді:


9

Це залежить від вашого Менеджера дисплеїв! (тобто KDM, GDM)

Зверніть увагу, що ваш DM працює як корінь! (йому потрібні привілеї 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 служить багатьом цілям, необхідним у сучасних системах, таких як встановлення дисків, не викорінюючи, призупиняючи або перебуваючи в сплячому режимі. І це ні погано задокументовано!

Перевірте це, якщо ви хочете дізнатися більше про те, що таке PolicyKit і як він працює: http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html


Звучить багатообіцяюче. Дякуємо за посилання на документи. Я не сумніваюся, що ці посібники є вичерпними та зрозумілими, але вони, можливо, не існували. Ваша відповідь вперше я бачив диспетчер дисплеїв, згаданий разом із цим питанням, тому це не зовсім загальновідомі відомості. Я спробую це, і повідомляю вас ...
Джозеф Р.

ДОБРЕ. gdm-controlне допомогло. Документація, надана у PolicyKit, здається більш перспективною. Я переконуюся в цьому і побачу, чи зможу я застосувати власні правила. Продовження…
Джозеф Р.

1
Я прочитав декілька записів (скиммінг, більше подібне) і, будь ласка, виправте мене, якщо я помиляюся: DE, коли буде запропоновано відключити, надішле повідомлення до DM через polkit на D-BUS. До аутентифікації сеанс може бути припинений або запит відкликаний. Це визначено в polkitдії, викликаній org.freedesktop.consolekit.system.stop-multiple-usersв /usr/share/polkit-1/actionsньому. Встановлено, щоб відкликати запит неактивних користувачів та auth_admin_keepактивного користувача. Питання в тому, що визначає цю дію? Що саме воно виконує?
Джозеф Р.

@don_crissti Стільки я зараз розумію. Мене цікавить саме цей "сигнал". Що таке клієнт, який його надсилає?
Джозеф Р.

@don_crissti Небайдуже перенести цей коментар до мого іншого питання для подальшого контролю?
Джозеф Р.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.