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

约瑟夫·R。

我已经为此奋斗了很长时间。这与这个问题有关当我选择从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中选择“关闭”或“关闭电源”时触发的机制相同。

任何人都可以确认/驳斥吗?是否有可能以某种方式截获此信号或对其进行修改?

艾丽西亚(Alicia)

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

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

当您单击KDE或GNOME中的关闭时,您的DE会向DM发送信号,以在会话终止后关闭电源或重新启动。然后,您的DE告诉每个程序结束,并且一旦所有其他进程终止(或超时),则DE的最后一个进程-会话进程-终止。

会话进程是X11会话中启动的第一个进程。当它被杀死或终止时,会话终止。在没有DE的情况下运行X时,您见过xterm吗?那是一个会话过程。此过程kdeinit在KDE和gnome-sessionGNOME中称为

会话终止后,控制权将返回给您的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我输入perl并在终端中按Enter键时会发生什么?

来自分类Dev

就system_read中断,汇编而言,当我按Enter键时会发生什么?

来自分类Dev

在这种情况下,当我增加边界权时会发生什么?

来自分类Dev

当我使用多个模拟时间时会发生什么?

来自分类Dev

当我绑定到AliasProperty时会发生什么?

来自分类Dev

当我调用“ BufferStrategy.show()”时会发生什么?

来自分类Dev

当我放弃对iOS 6的支持时会发生什么?

来自分类Dev

MySql-当我用“ and”更新时会发生什么

来自分类Dev

当我多次调用requestAnimationFrame时会发生什么

来自分类Dev

当我放弃对iOS 6的支持时会发生什么?

来自分类Dev

当我截断正在使用的文件时会发生什么?

来自分类Dev

当我将%esp移至%ebp时会发生什么?

来自分类Dev

当我不输入期望的命令时会发生什么?

来自分类Dev

当我忘记登录TTY时会发生什么?

来自分类Dev

当我使用多个模拟时间时会发生什么?

来自分类Dev

当我调用“ BufferStrategy.show()”时会发生什么?

来自分类Dev

当我取消订阅 Observable 链时会发生什么?

来自分类Dev

当用户按下主页按钮时会发生什么?

来自分类Dev

当我们在Android Studio中添加DEPENDENCY时会发生什么

来自分类Dev

当我在Bash脚本中对函数使用`&`时会发生什么?

来自分类Dev

当我在异步回调中设置对象时会发生什么?

来自分类Dev

当我释放Delphi中可能不存在的内存时会发生什么?

来自分类Dev

当我在C ++中对未初始化的指针调用“删除”时会发生什么?

来自分类Dev

当我在代码中留下一些断点时会发生什么?

来自分类Dev

当我们在Collections.synchronizedMap()中传递哈希表时会发生什么

来自分类Dev

当我在SQL Server中删除列时会发生什么

来自分类Dev

当我在函数中重新分配可变默认参数时会发生什么?

来自分类Dev

当我将鼠标悬停在Chrome中的链接上时会发生什么?

来自分类Dev

当我在Android中实例化文件时会发生什么?

Related 相关文章

  1. 1

    当我输入perl并在终端中按Enter键时会发生什么?

  2. 2

    就system_read中断,汇编而言,当我按Enter键时会发生什么?

  3. 3

    在这种情况下,当我增加边界权时会发生什么?

  4. 4

    当我使用多个模拟时间时会发生什么?

  5. 5

    当我绑定到AliasProperty时会发生什么?

  6. 6

    当我调用“ BufferStrategy.show()”时会发生什么?

  7. 7

    当我放弃对iOS 6的支持时会发生什么?

  8. 8

    MySql-当我用“ and”更新时会发生什么

  9. 9

    当我多次调用requestAnimationFrame时会发生什么

  10. 10

    当我放弃对iOS 6的支持时会发生什么?

  11. 11

    当我截断正在使用的文件时会发生什么?

  12. 12

    当我将%esp移至%ebp时会发生什么?

  13. 13

    当我不输入期望的命令时会发生什么?

  14. 14

    当我忘记登录TTY时会发生什么?

  15. 15

    当我使用多个模拟时间时会发生什么?

  16. 16

    当我调用“ BufferStrategy.show()”时会发生什么?

  17. 17

    当我取消订阅 Observable 链时会发生什么?

  18. 18

    当用户按下主页按钮时会发生什么?

  19. 19

    当我们在Android Studio中添加DEPENDENCY时会发生什么

  20. 20

    当我在Bash脚本中对函数使用`&`时会发生什么?

  21. 21

    当我在异步回调中设置对象时会发生什么?

  22. 22

    当我释放Delphi中可能不存在的内存时会发生什么?

  23. 23

    当我在C ++中对未初始化的指针调用“删除”时会发生什么?

  24. 24

    当我在代码中留下一些断点时会发生什么?

  25. 25

    当我们在Collections.synchronizedMap()中传递哈希表时会发生什么

  26. 26

    当我在SQL Server中删除列时会发生什么

  27. 27

    当我在函数中重新分配可变默认参数时会发生什么?

  28. 28

    当我将鼠标悬停在Chrome中的链接上时会发生什么?

  29. 29

    当我在Android中实例化文件时会发生什么?

热门标签

归档