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.