Manera universal de cerrar sesión en la terminal a través de dbus

Manera universal de cerrar sesión en la terminal a través de dbus

Soy nuevo en dbusy 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 dbusmensajes.

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 systemdlas configuraciones, debería poder finalizar una sesión a la fuerza a través delogind dbusinterfaz:

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 busctlse introdujo en la systemdversión v. 221Alternativamente, 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 c2está 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"
      }
   ]

información relacionada