2

如何在 Linux 中以编程方式触发系统关闭或重启?最好不需要提升特权。

在旧版本(例如 Ubuntu 10.04)上,我可以使用 D-Bus 调用 HALorg.freedesktop.Hal.Device.SystemPowerManagement.ShutdownReboot方法。请参阅: http: //people.freedesktop.org/~dkukawka/hal-spec-git/hal-spec.html#interface-device-systempower

但是 HAL 似乎已经过时,并且在 Ubuntu 12.10 中不存在。当前执行此操作的最佳实践是什么?

4

2 回答 2

3

shutdown命令。但是,这需要在大多数系统上具有 root 权限。

立即关闭:

shutdown -h now

现在重启:

shutdown -r now

man shutdown了解更多信息。

于 2012-12-08T03:59:20.923 回答
3

您可以使用ConsoleKit。向发送org.freedesktop.ConsoleKit.Manager.StopDBus 消息org.freedesktop.ConsoleKit。从命令行,这将是这样的:

dbus-发送\
    - 系统 \
    --dest=org.freedesktop.ConsoleKit \
    --type=method_call \
    --打印回复\
    --回复超时=2000 \
    /org/freedesktop/ConsoleKit/管理器\
    org.freedesktop.ConsoleKit.Manager.Stop

如果当前用户被授权执行关机,则不需要 root 权限。

您还可以查看KShutdown实用程序。它包含不同关闭方法的源代码,从 ConsoleKit 到 Gnome 和 KDE API。

于 2012-12-08T04:01:48.253 回答