Ich bin neu bei dbus
und 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 systemd
Setups sollten Sie in der Lage sein, eine Sitzung zwangsweise zu beenden überlogind
dbus
Schnittstelle:
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. busctl
eingeführt wurde . Alternativ können Sie auf allen Setups Folgendes ausführen:systemd
221
dbus-send --system --print-reply --dest=org.freedesktop.login1 \
/org/freedesktop/login1 'org.freedesktop.login1.Manager.TerminateSession' \
string:c2
wo c2
ist 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"
}
]