Come posso disconnettermi dalla GUI usando la CLI?


43

Ho scelto un DE Openbox al momento del login e il sistema ha impiegato anni per caricare il DE. Quindi sono passato alla CLI ( Ctrl+ Alt+ F1) e ho riavviato il mio sistema (ma volevo disconnettermi dalla GUI e non riavviare l'intero sistema).

La mia domanda è: posso inviare alcuni comandi alla CLI per disconnettermi dalla GUI in modo da poter selezionare DE diversi. (Non voglio riavviare il mio sistema ogni volta che DE si blocca.)


$ DISPLAY=:0 gnome-session-quit --force

** (gnome-session-quit:3144): WARNING **: Failed to call logout: The name org.gnome.SessionManager was not provided by any .service files

Risposte:


45

Per terminare tutti i processi utente ed essere rispedito alla schermata di accesso, è possibile utilizzare:

kill -9 -1

Non eseguirlo come root, per motivi discussi qui .


3
Funziona alla grande, ma perché? In particolare, perché LightDM si riavvia dopo aver ucciso tutto tranne init?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

1
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 Perché uccide forzatamente (9) TUTTO ciò che è permesso. Ciò significa che ogni processo è di tua proprietà. L'uso di SIGKILL per terminare le app non è assolutamente consigliabile! Usa SIGTERM (15). Le applicazioni possono reagire su questo segnale ed eseguire la pulizia.
ManuelSchneid3r

22

Questo può essere fatto usando il gnome-session-quitcomando. Ha bisogno --forcedell'opzione per sopprimere la finestra di dialogo di conferma che apparirebbe senza di essa.

A differenza delle applicazioni eseguite da un emulatore di terminale X, la conclusione di una sessione da un TTY richiede di aggiungere la DISPLAYvariabile per indicare quale display X sta eseguendo la sessione. Quindi:

DISPLAY=:0 gnome-session-quit --force

supponendo che stai eseguendo GNOME su: 0, che è il caso in situazioni normali.

  • In Ubuntu 12.04LTS che esegue GNOME, il comando

    "DISPLAY=:0 gnome-session-quit --logout --no-prompt" 
    

    lavori. L'argomento "--force" non esiste nell'attuale livello di aggiornamento]


grazie, ho eseguito il comando ma ho riscontrato qualche errore. Ho modificato il mio post per includere l'errore. Per favore condividi se ho fatto qualcosa di sbagliato.
Ankit,

Mio male, non ho notato che hai detto che stai usando openbox. Sfortunatamente, questo comando funziona solo con un'installazione standard di Ubuntu (Unity / GNOME). In alternativa, è possibile chiudere completamente la GUI e quindi la sessione eseguendo sudo service lightdm stop. modifica: quale ambiente desktop stai usando? Openbox è solo un gestore di finestre.
Cumulus007,

sto cercando di usare kde / openbox o gnome / openbox.
Ankit

Non funziona se il tuo terminale non fa parte della stessa sessione dbus della sessione gnome. Come si entra in un'altra sessione dbus?
Zan Lynx,

È questo il comando che viene eseguito quando si fa clic su "Disconnetti ..." tramite la GUI?
Dor

7

Si prega di seguire il suggerimento di takkat . Lo standard è Ctrl+ Alt+ Backspace.

Puoi anche eseguire:

$ sudo service lightdm restart

1
gdm è stato sostituito da lightdm. Inoltre, ctrl + alt + backspace è disabilitato per impostazione predefinita.
Cumulus007,

@ Cumulus007 Grazie, risposta aggiornata. So che ctrl + alt + backspace è disabilitato di default, non ho mai capito il perché, ma ne sono consapevole. Sto solo informando l'OP qual è la combinazione di tasti standard più comunemente usata. Trovo che sia meglio attenersi agli standard poiché semplifica la risoluzione dei problemi.
terdon

1
L'arresto di lightdm comporterà in seguito la richiesta di accesso, quindi non avrà la possibilità di accedere a un ambiente diverso.
poolie,

1
Abbastanza giusto @poolie, risposta aggiornata.
terdon

4

Un altro modo,

sudo pkill -u NameOftheUser

o

sudo pkill x

che uccide tutti gli utenti.


È un po 'duro, non credi?
accolito

Harsh? È estremamente sciocco.
HörmannHH,

2

Il vero problema è che le variabili di sessione DBUS devono essere impostate e devono corrispondere alla sessione che si sta tentando di controllare.

Ho creato questo script che imposta le variabili di sessione DBUS dall'ambiente gnome-session nel caso in cui si desideri disconnettere altri utenti / sessioni:

Come riavviare Gnome-Shell dalla riga di comando?

function logout() {
    local USERNAME
    export USERNAMES=( ) 
    while [ -n "$1" ]; do case "$1" in
        -* ) break ;;
        *) USERNAMES+=( "$1" ); shift ;;
    esac; done

    for USERNAME in "${USERNAMES[@]}"; do
        local SESSION_PID=$(pgrep -fu "$USERNAME" gnome-session|head -1)
        if [ -n "$SESSION_PID" ]; then
            (
                sudo -u "$USERNAME" cat "/proc/$SESSION_PID/environ" | xargs -0 -n 1 echo export
                echo "gnome-session-quit --logout $@"
            ) | sudo -u "$USERNAME" sh -;
        fi
    done
}

Usare --logout --no-prompto --forceinvece solo --logoutè un'idea migliore, altrimenti verrà mostrato un prompt di logout.
gioele,

1

Se ti trovi in ​​una sessione di xubuntu o simile, devi usare xfce4-session-logout installato con i comandi di sessione di gnome, ecco perché vedi gli avvisi


1

Questo è ciò che funziona meglio per me (con xfce, lightdm e ssh):

$ DISPLAY=:0.0 xfce4-session-logout --logout

O

$ sudo service lightdm restart

0

In alternativa, è possibile terminare le sessioni utente usando quanto segue, funziona bene per disconnettere gli utenti tranne l'utente root, ad esempio quando si esegue la manutenzione.

loginctl | egrep -v "root|SESSION|listed" | awk '{print $1}' | xargs loginctl terminate-session

-2

È possibile utilizzare il comando killall gnome-sessionper disconnettersi. Funzionerà con tutte le sessioni GNOME e se ricordo correttamente tutte quelle relative a GNOME. Ti riporta a LightDM in modo da poter selezionare un nuovo DE o un nuovo utente. :)


2
Non è il modo migliore per disconnettersi. Controlla askubuntu.com/questions/69114/…
jokerdino

Non ho mai visto questa opzione prima d'ora. Probabilmente dovrei iniziare a usarlo. Suppongo che killall gnome-sessionsia un modo efficace per chiuderlo.
Ryan McClure,
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.