DE 如何调用 ACPI 函数?

dar*_*nir 6 linux shutdown not-root-user privileges consolekit

好的,首先,这不是我面临的问题,但我想更好地理解这一点。

如果我想从命令行关闭/重启我的机器,我需要调用:

$ sudo poweroff
$ sudo reboot
Run Code Online (Sandbox Code Playgroud)

也就是说,我需要 root 权限才能进行这些 ACPI 调用。

但是,我启动了我的 DE,(我使用 XFCE)而不授予它 root 权限:$ startxfce4 --with-ck-launch

现在,我知道该--with-ck-launch参数有助于 XFCE 关闭/重新启动我的系统,但我不明白如何。

什么允许 ConsoleKit 在没有 root 权限的情况下关闭?它如何在没有超级用户权限的情况下更改运行级别?既然有可能,我如何在没有 root 权限的情况下从控制台关闭我的机器?

Ale*_* L. 3

您可以通过 dbus 与 ConsoleKit 进行通信。例如,使用该dbus-send工具时,一些值得注意的命令是:

关闭:

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
Run Code Online (Sandbox Code Playgroud)

重启:

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
Run Code Online (Sandbox Code Playgroud)

还有休眠和暂停的命令,但我不知道它们是什么。


编辑:找到暂停命令

dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Suspend int32:0
Run Code Online (Sandbox Code Playgroud)

在较新的系统上

dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
Run Code Online (Sandbox Code Playgroud)

  • @darnir 有一个通过策略工具包构建的权限框架。如果您想了解更多信息,请阅读“pklocalauthority”手册页并查看“/etc/polkit-1”及其子目录中的文件。 (2认同)