Soy nuevo en dbus
y vi diferentes formas de cerrar sesión en la terminal según el entorno del escritorio. Pero tengo curiosidad por saber si hay alguna forma de cerrar sesión en cualquier entorno de escritorio mediante dbus
mensajes.
En GNOME:
dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.Logout uint32:1
En KDE:
dbus-send --print-reply --dest=org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout int32:0 int32:0 int32:0
¿Existe algún comando que funcione en todos los entornos de escritorio (como usar system dbus
)?
Respuesta1
En systemd
las configuraciones, debería poder finalizar una sesión a la fuerza a través delogind
dbus
interfaz:
busctl call org.freedesktop.login1 /org/freedesktop/login1 \
org.freedesktop.login1.Manager TerminateSession s \
$(loginctl show-user $UID --property=Sessions --value)
Tenga en cuenta que busctl
se introdujo en la systemd
versión v. 221
Alternativamente, en todas las configuraciones puede ejecutar:
dbus-send --system --print-reply --dest=org.freedesktop.login1 \
/org/freedesktop/login1 'org.freedesktop.login1.Manager.TerminateSession' \
string:c2
¿Dónde c2
está el ID de sesión? Puede obtenerlo a través de
dbus-send --system --print-reply --dest=org.freedesktop.login1 \
/org/freedesktop/login1 'org.freedesktop.login1.Manager.ListSessions'
que devuelve algo como esto:
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"
}
]