可以在终端窗口中使用以下命令向 KDE Plasma 会话发出注销信号:
qdbus6 org.kde.Shutdown /Shutdown org.kde.Shutdown.logout
或者简单地
qdbus6 org.kde.Shutdown /Shutdown logout
当我运行它时,这会立即将我注销。相同路径上存在类似的关闭和重新启动方法。
我想从 Python 脚本触发同样的事情。
Qt 中的 QtDBus 模块可以通过 DBus 系统发送消息。它在 PySide6 中可用,我正在尝试从 Python 发送完全相同的信号:
from PySide6.QtDBus import QDBusConnection, QDBusMessage
connection = QDBusConnection.sessionBus()
message = QDBusMessage.createTargetedSignal("org.kde.Shutdown", "/Shutdown", "org.kde.Shutdown", "logout")
print(connection.send(message))
如果此代码作为脚本运行,或输入到 Python 解释器中,它将返回
True
,但如果使用 False
以 root 身份运行脚本,则返回 sudo
,这对我来说意味着 org.kde.Shutdown
可通过 sessionBus()
建立的连接获得,即连接到用户会话总线。
那么当我运行脚本时,为什么 Plasma 没有注销?
非常感谢任何帮助。
您的 qdbus 命令不是发送信号,而是发送方法调用。它们是 D-Bus 中不同的消息类型(并且通常以相反的方式使用 – 典型的信号将“从”发送发送者已发布的对象和接口。)