Sou novo no assunto dbus
e vi diferentes maneiras de sair do terminal, dependendo do ambiente da área de trabalho. Mas estou curioso para saber se existe alguma maneira de sair de qualquer ambiente de área de trabalho usando dbus
mensagens?
No GNOME:
dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.Logout uint32:1
No KDE:
dbus-send --print-reply --dest=org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout int32:0 int32:0 int32:0
Existe algum comando que funcione em todos os ambientes de desktop (como usar system dbus
)?
Responder1
Nas systemd
configurações, você poderá encerrar uma sessão à força vialogind
dbus
interface:
busctl call org.freedesktop.login1 /org/freedesktop/login1 \
org.freedesktop.login1.Manager TerminateSession s \
$(loginctl show-user $UID --property=Sessions --value)
Observe que busctl
foi introduzido em systemd
v. 221
- alternativamente, em todas as configurações que você pode executar:
dbus-send --system --print-reply --dest=org.freedesktop.login1 \
/org/freedesktop/login1 'org.freedesktop.login1.Manager.TerminateSession' \
string:c2
onde c2
está o ID da sessão, você pode obtê-lo via
dbus-send --system --print-reply --dest=org.freedesktop.login1 \
/org/freedesktop/login1 'org.freedesktop.login1.Manager.ListSessions'
que retorna algo assim:
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"
}
]