Come terminare correttamente una sessione di KDE dalla shell senza i privilegi di root


17

Sto accedendo alla macchina (OpenSuse 11 con KDE) su NX.

Non riesco a usare le scorciatoie Alt-Ctrl-Canc in quanto viene catturato dal mio sistema. Il normale pulsante di disconnessione termina la sessione NX senza terminare la sessione di KDE. Non posso chiamare kdm restartperché non ho i privilegi di root.

Anche altre ipotesi selvagge piacciono logoute exitnon funzionano, la prima si lamenta di non essere in una shell di accesso e la seconda chiude semplicemente la console.

Il mio shell-fu è debole, quindi ogni aiuto è apprezzato.



@ MartinSchröder - ah, buona cattura - è essenzialmente la stessa domanda. Ma la risposta di Paul a questa domanda è più esaustiva della risposta di Gilles all'altra.
kostja,

Risposte:


30

Puoi inviare un comando di logout tramite dbus a KDE, che dovrebbe (se può) terminare la sessione.

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

dbus è un sistema di messaggistica che consente alle applicazioni di comunicare tra loro e il qdbuscomando è un'utilità per l'invio di messaggi dbus alle applicazioni.

Le applicazioni si registrano con dbus e la ksmserverparte di KDE è il gestore delle sessioni - si occupa di chi ha effettuato l'accesso.

Quindi stiamo inviando un messaggio a ksmserveralla /KSMServerdell'interfaccia e dicendogli di disconnettersi. Il messaggio che stiamo inviando è esattamente lo stesso messaggio inviato a KSM quando fai clic sull'icona di disconnessione sul desktop.

I tre zeri sono parametri e possono modificare il tipo di logout che stiamo eseguendo:

Primo parametro:

  • 0 = Non attendere la conferma
  • 1 = Attendi conferma (con un timeout di 30 secondi)

Secondo parametro:

  • -1 = Richiesta di intervento, impostazione predefinita per l'arresto (ha senso solo in attesa di conferma.)
  • 0 = Logout
  • 1 = Riavvia
  • 2 = spegnimento

Il terzo parametro è il parametro "quando", ma non è chiaro quale sia il suo impatto.


Assicurati di impostare la DISPLAYvariabile di ambiente (molto probabilmente su :0) prima di eseguire questo comando, altrimenti si lamenterà.
Palswim,

3

La risposta accettata è una soluzione specifica per KDE5, un approccio più generico sarebbe

loginctl list-sessions
loginctl terminate-session <id>

o

loginctl terminate-user <username>

fonte

Ci sono più comandi possibili:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.