Debian

當我從 GUI 按“關機”時會發生什麼?

  • March 18, 2020

很長一段時間以來,我一直在努力解決這個問題。它與這個問題有關。我想知道當我選擇從 GUI 關閉我的 Linux 機器時會發生什麼。這似乎記錄得很差(如果有的話)。

理想情況下,我希望得到一個與 DE 和 OS 無關的答案。除此之外,我對執行 Gnome 的 Mandriva 2010.1 和 Debian 6.x (Squeeze) 和 7.0 (Wheezy) 的具體情況感興趣。(如果你密切關注,是的,那就是 Gnome 2 和 Gnome 3)

基本上,我想知道當我按下“關閉”或“重新啟動”時啟動了哪個命令/腳本/腳本序列,以便我可以修改它們的行為。我看過的一些論壇文章建議黑客攻擊/etc/polkit-1/*,但這個目錄結構只是我的 Debian (Squeeze) 盒子上的一個骨架,例如。

任何人都可以幫忙嗎?


編輯

到目前為止我嘗試過的

  • shutdown用我自己的腳本替換了執行檔。這不起作用:當我按shutdownGnome 時註銷而不執行我的腳本。
  • 嘗試編輯 Gnome 2 菜單。不高興:菜單編輯器中不會出現“關機”、“註銷”和“鎖定螢幕”選項。
  • 看了看/usr/share/menu,沒有什麼幫助。

解決方案的可能途徑

  • strace配置 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.*命名約定)這是通過 D-BUS 發送到 DM 的某種信號。此外,當其他使用者登錄時嘗試以圖形方式關閉時會出現此消息,因此觸發它的機制必須與從 GUI 中選擇“關閉”或“關閉電源”時觸發的機制相同。

任何人都可以確認/反駁嗎?是否有可能以某種方式攔截或修改此信號?

這取決於您的顯示管理器!(即KDM、GDM)

請記住您的 DM 以 root 身份執行!(它需要 root 權限才能以您登錄的使用者身份執行會話程序)

當您在 KDE 或 GNOME 中點擊關閉時,您的 DE 會在會話終止後向您的 DM 發送一個信號以關閉或重新啟動。然後,你的 DE 告訴每個程序結束,一旦所有其他程序終止(或超時),你的 DE 的最後一個程序——會話程序——終止。

會話程序是在 X11 會話中啟動的第一個程序。當它被殺死或終止時,會話終止。在沒有 DE 的情況下執行 X 時,您見過 xterm 嗎?那是一個會話過程。這個過程kdeinit在 KDE 和gnome-sessionGNOME 中被呼叫。

一旦會話終止,控制權就會返回給你的 DM(它一直在等待 X 程序結束),它會檢查 DE 告訴他做什麼。如果它告訴它關閉電源或重新啟動,它會這樣做。在其他情況下,它只會在 X 中啟動一個新的登錄螢幕。

這也與您過去可能遇到的問題有關,當與其他一些 DM 結合使用時,某些 DE 無法關閉或重新啟動,只是為了註銷。

無論如何,這並不是那麼糟糕的記錄。GDM 有一個命令的手冊頁“gdm-control(1)”,它允許您告訴它關閉,就像我之前所說的(gdm-control)。KDM 也有出色的文件,並且有一個類似(稍微複雜一點)的實用程序,名為kdmctl.


沒有 PolicyKit 也可以關閉和重新啟動,但 PolicyKit 可以滿足當今系統所需的許多目的,例如無需 root 使用者即可掛載磁碟、掛起或休眠電腦。而且它也沒有不良記錄!

如果您想了解更多關於什麼是 PolicyKit 以及它是如何工作的,請查看此內容:http ://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html

引用自:https://unix.stackexchange.com/questions/76706