当我从 GUI 中按“关机”时会发生什么?

当我从 GUI 中按“关机”时会发生什么?

很长一段时间以来,我一直在努力反对这一点。这与这个问题。我想知道当我选择从 GUI 关闭我的 Linux 机器时到底会发生什么。这似乎没有很好的记录(如果有的话)。

理想情况下,我希望得到一个与 DE 和操作系统无关的答案。除此之外,我对 Mandriva 2010.1 和 Debian 6.x (Squeeze) 和 7.0 (Wheezy) 都运行 Gnome 的具体情况感兴趣。 (如果您仔细观察,是的,那就是 Gnome 2 和 Gnome 3)

基本上,我想知道当我按“关闭”或“重新启动”时启动哪个命令/脚本/脚本序列,以便我可以修改它们的行为。我看过的一些论坛帖子建议进行黑客攻击/etc/polkit-1/*,但这个目录结构只是我的 Debian (Squeeze) 盒子上的一个骨架。

有人可以帮忙吗?


编辑

到目前为止我已经尝试过的

  • shutdown用我自己的脚本替换了可执行文件。这不起作用:当我按shutdownGnome 时,会注销而不执行我的脚本。
  • 尝试编辑 Gnome 2 菜单。不高兴:“关机”、“注销”和“锁定屏幕”选项不会出现在菜单编辑器中。
  • 看了一下/usr/share/menu,没有什么帮助。

解决问题的可能途径

  • straceGUI 选项(这可能吗?)
  • 查看 的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 中选择“关机”或“关闭电源”时触发的机制相同。

有人能证实/反驳吗?是否有可能以某种方式拦截或修改该信号?

答案1

这取决于您的显示管理器! (即KDM、GDM)

请记住您的 DM 以 root 身份运行! (它需要 root 权限才能以您登录的用户身份运行会话进程)

当您在 KDE 或 GNOME 中单击关机时,DE 会在会话终止后向 DM 发送信号以关闭或重新启动。然后,DE 会通知每个程序结束,一旦所有其他进程都终止(或超时),DE 的最后一个进程(即会话进程)就会终止。

会话进程是 X11 会话中启动的第一个进程。当它被终止或终止时,会话就会终止。你在没有 DE 的情况下运行 X 时见过 xterm 吗?这就是一个会话过程。这个过程kdeinit在 KDE 和GNOME 中被调用gnome-session

一旦会话终止,控制权就会返回给您的 DM(它一直在等待 X 进程结束),并检查 DE 告诉他做什么。如果它告诉它关闭电源或重新启动,它就会这样做。在其他情况下,它只会在 X 中启动一个新的登录屏幕。

这也与您过去可能遇到的问题有关,有些DE与其他一些DM结合使用时无法关闭或重新启动,只能注销。

无论如何,这并没有那么糟糕的记录。 GDM 有一个命令的手册页“gdm-control(1)”,它允许您告诉它关闭,就像我之前告诉的那样(gdm-control )。 KDM 有优秀的文档也有一个类似(稍微复杂一点)的实用程序,名为kdmctl.


没有PolicyKit也可以关闭和重新启动,但PolicyKit可以满足当今系统所需的许多用途,例如无需root、挂起或休眠计算机即可安装磁盘。而且这也没有不好的记录!

如果您想了解更多有关什么是 PolicyKit 及其工作原理的信息,请查看此内容:http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html

相关内容