如何通过 Python 中的 QDbus 在 KDE Plasma 中触发关闭或注销?

问题描述 投票:0回答:1

可以在终端窗口中使用以下命令向 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 没有注销?

非常感谢任何帮助。

python qt pyside dbus kde-plasma
1个回答
0
投票

您的 qdbus 命令不是发送信号,而是发送方法调用。它们是 D-Bus 中不同的消息类型(并且通常以相反的方式使用 – 典型的信号将“从”发送发送者已发布的对象和接口。)

© www.soinside.com 2019 - 2024. All rights reserved.