如何在Linux中以编程方式触发系统关闭或重启?最好不要求提升特权。
在旧版本(例如Ubuntu 10.04)上,我可以使用D-Bus调用HAL的org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
或Reboot
方法。请参阅:http://people.freedesktop.org/~dkukawka/hal-spec-git/hal-spec.html#interface-device-systempower。
然而,HAL似乎已过时,并且在Ubuntu 12.10中不存在。这样做的当前最佳做法是什么?
答案 0 :(得分:3)
答案 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。