Universelle Möglichkeit zum Abmelden vom Terminal über dbus

Universelle Möglichkeit zum Abmelden vom Terminal über dbus

Ich bin neu bei dbusund habe je nach Desktopumgebung unterschiedliche Möglichkeiten gesehen, sich vom Terminal abzumelden. Aber ich bin neugierig: Gibt es eine Möglichkeit, sich mithilfe von Nachrichten von jeder Desktopumgebung abzumelden dbus?

Unter GNOME:

dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.Logout uint32:1

Unter KDE:

dbus-send --print-reply --dest=org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout int32:0 int32:0 int32:0

Gibt es einen Befehl, der in jeder Desktopumgebung funktioniert (z. B. mit „system“ dbus)?

Antwort1

Bei systemdSetups sollten Sie in der Lage sein, eine Sitzung zwangsweise zu beenden überlogind dbusSchnittstelle:

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

Beachten Sie, dass dies in V. busctleingeführt wurde . Alternativ können Sie auf allen Setups Folgendes ausführen:systemd221

dbus-send --system --print-reply --dest=org.freedesktop.login1 \
/org/freedesktop/login1 'org.freedesktop.login1.Manager.TerminateSession' \
string:c2

wo c2ist die Session-ID, diese erfährst du über

dbus-send --system --print-reply --dest=org.freedesktop.login1 \
/org/freedesktop/login1 'org.freedesktop.login1.Manager.ListSessions'

das gibt ungefähr Folgendes zurück:

   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"
      }
   ]

verwandte Informationen