如何在 13.04 中从命令行自动关机

如何在 13.04 中从命令行自动关机

我知道已经有了关于此主题的类似问题。但那个问题只是关于如何获取一般的关机对话框。我需要恢复旧关机对话框(Ubuntu <= 12.10)的倒计时,该对话框在 60 秒后关闭系统。

geobuntu 在他的回答

dbus-send --print-reply --dest="org.gnome.Shell" /org/gnome/SessionManager/EndSessionDialog org.gnome.SessionManager.EndSessionDialog.Open uint32:2 uint32:0 uint32:60 array:objpath:/org/gnome/SessionManager/EndSessionDialog

qdbus表明第三个参数max_wait应该(在我看来)设置并开始倒计时:

~$ qdbus org.gnome.Shell /org/gnome/SessionManager/EndSessionDialog
[...]
method void org.gnome.SessionManager.EndSessionDialog.Open(uint type, uint arg_1, uint max_wait, QList<QDBusObjectPath> inhibitors)

但事实并非如此。我已经尝试了各种值,typearg_1没有成功。


编辑:实际上,倒计时更“好用”。我真正需要的是系统无需任何额外的用户操作即可关闭。它应该可以在没有sudo(包括任何无密码 sudoers)的情况下工作。

我更喜欢 dbus 调用,因为我已经有了一个不错的dbus 调用列表这将关闭除 Unity >= 13.04 之外的所有 DE


EDIT2:我查看了一下Unity 源。我不知道C++,但对我来说,它看起来像是arg1timeout_length源代码中没有处理(有C++知识的人可以确认一下吗?)。也许这会在以后的版本中添加。


EDIT3:我报告了此事错误 #1256703在 Launchpad 上。

答案1

有一个很好的答案米拉索尔关于这一点。他建议使用

/usr/bin/dbus-send --system --print-reply \
--dest="org.freedesktop.ConsoleKit" \
/org/freedesktop/ConsoleKit/Manager \
org.freedesktop.ConsoleKit.Manager.Stop

这对我来说非常完美。

如果您喜欢这个解决方案,请向 Majal 的答案而不是这个答案表示赞赏。

答案2

在终端中运行sudo visudo并添加以下行:

%user_name ALL=(ALL) NOPASSWD: /sbin/poweroff, /sbin/reboot, /sbin/shutdown

这样你就可以运行上述三个命令,使用 sudo,但没有密码。

所以,sudo poweroff现在就会导致无密码关机。

然后通过将以下内容放在末尾来创建别名,~/.bashrc_aliases方法是将其打开为 -

gedit ~/.bash_aliases

并在最后添加以下内容 -

alias shutdown='sudo shutdown -h now'

现在让我们将更改加载到.bash_aliases 文件中。

source ~/.bash_aliases

尝试一下shutdown。希望它会起作用。

相关内容