我想要一个可以映射到按钮或在我的网络内执行的命令。
到目前为止我知道该命令sudo pm-suspend
,但我无法pmi action suspend
在 12.04 和 14.04 上执行该命令:
Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Hal was not provided by any .service files
我还使用了这种据称更清洁的方法:
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
但所有这些方法都具有相同的明显结果。当我唤醒计算机时,无论是 12.04 还是 14.04,一些未完成的任务都会使 Unity 启动器出现故障,我必须与它交互才能“修复它”。
如果我从 Unity GUI 中暂停,则不会发生这种情况。从有专用睡眠键的笔记本电脑中也不会发生这种情况。此外,GUI 方法与上述方法还有另一个明显的区别,在干净的 GUI 方法(包括我的笔记本电脑)中,我有一个通知,而使用“脏”方法时永远不会出现。
那么,Unity 在正确暂停时会调用什么函数/程序/脚本?我如何将其映射到按键/事件/手势?
答案1
可以使用以下命令复制屏幕右上角的会话指示器的暂停操作dbus
。
qdbus com.canonical.Unity /com/canonical/Unity/Session com.canonical.Unity.Session.Suspend
我之前在其他脚本和 askubuntu 上的其他答案中使用过此 dbus 服务。例如,在这篇文章中,它被用来确定用户在登录时运行自定义脚本的具体选择:如何在退出 Unity 会话时(之前)运行本地命令(运行脚本)?
答案2
在 14.04 中单击图形菜单即可挂起系统的确切命令是:
dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 "org.freedesktop.login1.Manager.Suspend" boolean:true