Maneira universal de sair do terminal via dbus

Maneira universal de sair do terminal via dbus

Sou novo no assunto dbuse 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 dbusmensagens?

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 systemdconfigurações, você poderá encerrar uma sessão à força vialogind dbusinterface:

busctl call org.freedesktop.login1 /org/freedesktop/login1 \
org.freedesktop.login1.Manager TerminateSession s \
$(loginctl show-user $UID --property=Sessions --value)

Observe que busctlfoi introduzido em systemdv. 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 c2está 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"
      }
   ]

informação relacionada