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

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

在旧版本(例如Ubuntu 10.04)上,我可以使用D-Bus调用HAL的org.freedesktop.Hal.Device.SystemPowerManagement.ShutdownReboot方法。 见: http :

然而,HAL看起来已经过时了,并且在Ubuntu 12.10中不存在。 现在最好的做法是什么?

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

 dbus-send \
     - 系统\
     --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。

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

现在关机:

 shutdown -h now 

现在重启:

 shutdown -r now 

man shutdown更多的信息。