Ubuntu GUI 关机选项背后的机制是什么?

Ubuntu GUI 关机选项背后的机制是什么?

如果我错了,请纠正我。当我们尝试使用以下命令从终端关闭或重启时 sudo init 0sudo init 6(或用于相同目的的任何其他命令)命令我们需要以 root 身份执行这些任务,但是当我们从 Ubuntu(我猜大多数桌面都做同样的事情)UI 执行相同操作时,它只是不为这两项任务询问任何 root 权限。

这里正在发生什么样的对话/机制?

答案1

诸如此类的事情由 Polkit(其官方名称,但仍经常使用它以前的名称 PolicyKit)控制。

此工具可帮助非 root 用户对系统执行某些操作,否则这些操作需要 root 权限,而关机是通常配置为授予普通用户的操作之一。它的工作原理是用户软件调用特定的 Polkit API 请求关机,Polkit 将检查该用户是否有权执行该操作,如果有,则协助执行。如果用户没有有权力采取该行动。

有关 Polkit 架构的更多信息,请参见此处:

http://manpages.ubuntu.com/manpages/precise/man8/polkit.8.html

答案2

关机命令使用dbus。实际上,关机命令是:

dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.PowerOff" boolean:true

确实systemd-logind服务方对用户的损失不承担责任。

除了 @thomasrutter 所说的,systemd-logind为用户提供基于PolicyKit的关机、休眠等操作的访问权限。

man systemd-logind

systemd-logind is a system service that manages user logins. It is
       responsible for:


       ·   Providing PolicyKit-based access for users to operations such as
           system shutdown or sleep

请看一下我的回答https://askubuntu.com/a/632165/150504

相关内容