我已经为此奋斗了很长时间。这与这个问题有关。当我选择从GUI关闭我的Linux机器时,我想确切地了解会发生什么。这似乎没有记录(如果有的话)。
理想情况下,我希望获得与DE和操作系统无关的答案。除此以外,我对Mandriva 2010.1和Debian 6.x(Squeeze)和7.0(Wheezy)都运行Gnome的特定情况感兴趣。(如果您密切关注,是的,那就是Gnome 2和Gnome 3)
基本上,我想知道当我按“关闭”或“重新启动”时启动了哪个命令/脚本/脚本序列,以便我可以修改它们的行为。我看过一些论坛帖子,建议黑客入侵,/etc/polkit-1/*
但是例如,此目录结构只是我的Debian(Squeeze)盒上的骨架。
有人可以帮忙吗?
编辑
到目前为止我尝试过的
shutdown
用我自己的脚本替换了可执行文件。这是行不通的:当我按shutdown
Gnome时,将不执行脚本而注销。/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-session
GNOME中称为。
会话终止后,控制权将返回给您的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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句