txw*_*ger 24 kde command-line reboot shutdown
我不是在谈论shutdown和reboot命令。我想从命令行启动相同的例程,如果我按下 KDE 桌面内的注销/重新启动/关机按钮,将执行该例程。
Gil*_*il' 25
对于 KDE 5+:
qdbus org.kde.Shutdown /Shutdown logout
qdbus org.kde.Shutdown /Shutdown logoutAndReboot
qdbus org.kde.Shutdown /Shutdown logoutAndShutdown
Run Code Online (Sandbox Code Playgroud)
最后一个选项指定调用哪个方法。似乎部分支持下面提到的 KDE4 选项(重新启动不起作用,所以我最终使用了这些较新的方法)。
参考:Reddit
对于 KDE 4:
请注意,此答案是在 2010 年为 KDE 4 编写的。它可能不适用于现代系统。
qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout -1 -1 -1
Run Code Online (Sandbox Code Playgroud)
三个整数参数是confirm,sdtype和KWorkSpace::requestShutDown 的sdmode参数。它们的值在页面顶部进行了解释。由于页面已经消失,这里是值(仍然存在于缓存中)。
enum ShutdownConfirm {
ShutdownConfirmDefault = -1,
ShutdownConfirmNo = 0,
ShutdownConfirmYes = 1
}
Run Code Online (Sandbox Code Playgroud)
ShutdownConfirmDefault:服从用户的确认设置。ShutdownConfirmNo: 不确认,不问就关机。ShutdownConfirmYes:始终确认,即使用户将其关闭也要询问。
enum ShutdownMode {
ShutdownModeDefault = -1,
ShutdownModeSchedule = 0,
ShutdownModeTryNow = 1,
ShutdownModeForceNow = 2,
ShutdownModeInteractive = 3
}
Run Code Online (Sandbox Code Playgroud)
ShutdownModeDefault: 如果是第一次,选择以前的模式或默认模式。ShutdownModeSchedule:在所有活动会话退出时安排关闭(暂停或重新启动)。ShutdownModeTryNow: 关闭,如果没有活动会话。否则什么都不做。ShutdownModeForceNow: 强制关机。杀死任何可能处于活动状态的会话。ShutdownModeInteractive:弹出一个对话框,询问用户如果会话仍然处于活动状态该怎么办。
enum ShutdownType {
ShutdownTypeDefault = -1,
ShutdownTypeNone = 0,
ShutdownTypeReboot = 1,
ShutdownTypeHalt = 2,
ShutdownTypeLogout = 3
}
Run Code Online (Sandbox Code Playgroud)
ShutdownTypeDefault:如果是第一次,请选择上一个操作或默认操作。ShutdownTypeNone: 只登出。ShutdownTypeReboot: 注销并重新启动机器。ShutdownTypeHalt: 注销并停止机器。ShutdownTypeLogout: 暂时性脑损伤。不要用。与 ShutdownTypeNone 相同
所以我尝试了 Gilles 提出的答案,但这仅适用于 KDE4。
在对我的图形进行系统更新后,我无法再注销、重新启动或关闭。最终发现这个命令有效:
qdbus org.kde.ksmserver /KSMServer logout 0 0 0
Run Code Online (Sandbox Code Playgroud)
我的消息来源来自这里,他们在那里进行了更多讨论。我不确定他是否有其他选择。论坛主题讨论 KDE5 关闭选项。上面的命令似乎优雅地关闭了我的系统。我所有的程序都按预期返回,布局顺序正确,我似乎没有遗漏任何东西。如果这不起作用,请发表评论,我会调整我的答案,但到目前为止,这就是我被锁定时正常关闭 KDE5 的全部工作。(我显然可以使用关闭命令或调用 init,但这些并不优雅。)