好吧,首先,这不是我面临的问题,但我想更好地理解这一点。
如果我想从命令行关闭/重新启动我的机器,我需要调用:
$ sudo poweroff
$ sudo reboot
也就是说,我需要 root 权限才能进行这些 ACPI 调用。
但是,我启动我的 DE(我使用 XFCE)而不授予它 root 权限: $ startxfce4 --with-ck-launch
现在,我知道该--with-ck-launch
参数有助于允许 XFCE 关闭/重新启动我的系统,但我不明白如何操作。
是什么让 ConsoleKit 在没有 root 权限的情况下关闭?在没有超级用户权限的情况下如何更改运行级别?既然有可能,那么如何在没有root权限的情况下从控制台关闭我的机器呢?
答案1
您可以通过 dbus 与 ConsoleKit 进行通信。例如,使用该dbus-send
工具时,一些值得注意的命令是:
关闭:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
重启:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
还有休眠和暂停的命令,但我不知道它们是什么。
编辑:找到暂停命令
dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Suspend int32:0
在较新的系统上
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend