Linux:以编程方式关闭或从用户级进程重新启动计算机

时间:2012-12-08 03:55:06

标签: c linux shutdown

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

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

然而,HAL似乎已过时,并且在Ubuntu 12.10中不存在。这样做的当前最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

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

立即关机:

shutdown -h now

立即重启:

shutdown -r now

man shutdown了解更多信息。

答案 1 :(得分:3)

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

dbus-send \
    --system \
    --dest=org.freedesktop.ConsoleKit \
    --type=method_call \
    --print-reply \
    --reply-timeout=2000 \
    /org/freedesktop/ConsoleKit/Manager \
    org.freedesktop.ConsoleKit.Manager.Stop

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

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