我是新手dbus
,并且根据桌面环境看到了从终端注销的不同方法。但我很好奇是否有任何方法可以使用消息从任何桌面环境注销dbus
?
在 GNOME 上:
dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.Logout uint32:1
在 KDE 上:
dbus-send --print-reply --dest=org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout int32:0 int32:0 int32:0
是否有任何命令适用于每个桌面环境(例如使用 system dbus
)?
答案1
在systemd
设置中,您应该能够通过强制终止会话logind
dbus
界面:
busctl call org.freedesktop.login1 /org/freedesktop/login1 \
org.freedesktop.login1.Manager TerminateSession s \
$(loginctl show-user $UID --property=Sessions --value)
请注意,这是在v.busctl
中引入的- 或者,在您可以运行的所有设置上:systemd
221
dbus-send --system --print-reply --dest=org.freedesktop.login1 \
/org/freedesktop/login1 'org.freedesktop.login1.Manager.TerminateSession' \
string:c2
会话ID在哪里c2
,您可以通过以下方式获取
dbus-send --system --print-reply --dest=org.freedesktop.login1 \
/org/freedesktop/login1 'org.freedesktop.login1.Manager.ListSessions'
它返回类似这样的内容:
array [
struct {
string "c1"
uint32 120
string "gdm"
string "seat0"
object path "/org/freedesktop/login1/session/c1"
}
struct {
string "c2"
uint32 1000
string "don"
string "seat0"
object path "/org/freedesktop/login1/session/c2"
}
]