So beenden Sie eine KDE-Sitzung ordnungsgemäß über eine Shell ohne Root-Rechte

17

Ich greife über NX auf die Maschine (OpenSuse 11 mit KDE) zu.

Ich kann die Tastenkombinationen Alt-Strg-Entf nicht verwenden, da sie von meinem System erfasst werden. Die reguläre Abmeldeschaltfläche beendet nur die NX-Sitzung, ohne die KDE-Sitzung zu beenden. Ich kann nicht anrufen, kdm restartda ich keine Root-Rechte habe.

Andere wilde Vermutungen mögen logoutund exitfunktionieren auch nicht. Die erste beschwert sich darüber, dass sie sich nicht in einer Login-Shell befindet, und die zweite schließt nur die Konsole.

Mein Shell-Fu ist schwach, daher wird jede Hilfe geschätzt.

kostja
quelle
@ MartinSchröder - ah, guter Fang - es ist im Wesentlichen die gleiche Frage. Aber Pauls Antwort auf diese Frage ist erschöpfender als Gilles 'Antwort auf die andere.
Kostja

Antworten:

30

Sie können einen Abmeldebefehl über dbus an KDE senden, der (falls möglich) die Sitzung beenden soll.

qdbus org.kde.ksmserver /KSMServer logout 0 0 0

dbus ist ein Nachrichtensystem, mit dem Anwendungen miteinander kommunizieren können, und der qdbusBefehl ist ein Dienstprogramm zum Senden von dbus-Nachrichten an Anwendungen.

Anwendungen registrieren sich bei dbus, und der ksmserverTeil von KDE ist der Sitzungsmanager - er kümmert sich darum, wer angemeldet ist.

Wir senden also eine Nachricht an ksmserverdie /KSMServerBenutzeroberfläche und weisen sie an, sich abzumelden. Die Nachricht, die wir senden, ist genau dieselbe Nachricht, die an KSM gesendet wird, wenn Sie auf das Abmeldesymbol auf Ihrem Desktop klicken.

Die drei Nullen sind Parameter und können die Art der Abmeldung ändern, die wir durchführen:

Erster Parameter:

  • 0 = Warten Sie nicht auf die Bestätigung
  • 1 = Warten Sie auf Bestätigung (mit einer Zeitüberschreitung von 30 Sekunden)

Zweiter Parameter:

  • -1 = Aufforderung zum Handeln, standardmäßig heruntergefahren (Nur sinnvoll, wenn auf eine Bestätigung gewartet wird.)
  • 0 = Abmelden
  • 1 = Neustart
  • 2 = Herunterfahren

Der dritte Parameter ist der "Wann" -Parameter, aber es ist nicht klar, welche Auswirkungen er hat.

Paul
quelle
Stellen Sie sicher, dass Sie die DISPLAYUmgebungsvariable festlegen (am wahrscheinlichsten :0), bevor Sie diesen Befehl ausführen, da er sich sonst beschwert.
Palswim
3

Die akzeptierte Antwort ist eine für KDE5 spezifische Lösung, ein allgemeinerer Ansatz wäre

loginctl list-sessions
loginctl terminate-session <id>

oder

loginctl terminate-user <username>

Quelle

Es gibt weitere mögliche Befehle:

Session Commands:
  list-sessions            List sessions
  session-status [ID...]   Show session status
  show-session [ID...]     Show properties of sessions or the manager
  activate [ID]            Activate a session
  lock-session [ID...]     Screen lock one or more sessions
  unlock-session [ID...]   Screen unlock one or more sessions
  lock-sessions            Screen lock all current sessions
  unlock-sessions          Screen unlock all current sessions
  terminate-session ID...  Terminate one or more sessions
  kill-session ID...       Send signal to processes of a session

User Commands:
  list-users               List users
  user-status [USER...]    Show user status
  show-user [USER...]      Show properties of users or the manager
  enable-linger [USER...]  Enable linger state of one or more users
  disable-linger [USER...] Disable linger state of one or more users
  terminate-user USER...   Terminate all sessions of one or more users
  kill-user USER...        Send signal to processes of a user

Seat Commands:
  list-seats               List seats
  seat-status [NAME...]    Show seat status
  show-seat [NAME...]      Show properties of seats or the manager
  attach NAME DEVICE...    Attach one or more devices to a seat
  flush-devices            Flush all device associations
  terminate-seat NAME...   Terminate all sessions on one or more seats
noraj
quelle