Modo per disconnettere un utente dalla riga di comando in OS X 10.9


31

Voglio disconnettermi da Mac OS X dalla riga di comando. La mia versione di OS X è 10.9. Ho provato il comando pkill -KILL -u uid, ma questo comando non ha funzionato. Esiste un comando che può essere utilizzato per disconnettere un utente dal sistema utilizzando solo la riga di comando, non AppleScript ?


cosa non ha funzionato esattamente?
— Nohillside

nell'esecuzione del comando pkill -KILL -u uid il sistema mi mostra una schermata grigia e in attesa a lungo il sistema mostra la finestra di chiusura forzata senza l'applicazione in esecuzione
— prateeak ojha

Risposte:


32

sudo launchctl bootout gui/$(id -u <username>)
o
sudo launchctl bootout user/$(id -u <username>)

Sostituisci il nome utente con il nome utente dell'utente di destinazione o sostituisci l'intera subshell con l'utente uid. Questo dice a launchctl di smontare la sessione di login degli utenti (la gui si riferisce specificamente alla sessione di login temporanea dell'utente, l'utente specifica i processi in background degli utenti).

È possibile disconnettersi senza sudoper testarlo.

Nota che funzionerà SOLO su macOS 10.11.xo versioni successive (vedi launchctl helpdi più)


1
Ho appena riletto la tua domanda e mi dispiace che questo non ti aiuti, ma verrà visualizzato nei risultati di ricerca di Google.
— Iain Henderson,

29

Per disconnettersi esclusivamente dal terminale (o da una sessione ssh remota), è sufficiente terminare il processo di loginwindow:

sudo pkill loginwindow

Potresti essere sofisticato e specificare l'utente se più utenti hanno un processo di loginwindow, ma questo è un semplice colpo, nessun modo rapido per terminare la sessione grafica di un utente.


16

Questo ha funzionato per me in passato:

Esci (con conferma)

osascript -e 'tell app "System Events" to log out'

Esci direttamente (nessuna conferma)

osascript -e 'tell app "System Events" to  «event aevtrlgo»'

o

osascript -e 'tell application "loginwindow" to  «event aevtrlgo»'

In questo modo qualsiasi applicazione in esecuzione verrà notata e può terminare in modo sicuro.


osascript -e 'dice all'app "Eventi di sistema" di «event aevtrlgo»' che mostra l'errore: un "<" non può passare a questo.
— prateeak ojha,

Hmm, funziona bene per me. Puoi provare da uno script di shell anziché dalla riga di comando, forse la shell fa alcune cose strane qui.
— Nohillside

Immagino che l'OP abbia qualche altro problema e che i normali comandi vengano bloccati dai commenti qui e dalla descrizione della domanda.
— bmike

5
Si noti che «≠ <<
— mlainz,

2

Se hai più utenti ....

Trova l'ID processo con:

ps aux|grep login

Quindi uccidi quel processo e hai disconnesso quella sessione. Ma ci sono molte proccesi rimaste.

Verificare in pstreemodo da sapere quale processo terminare.


2

Questo fa il trucco per me.

sudo -s

Per ottenere alcuni privilegi di root e il prompt #, quindi terminare i processi.

killall -vu username -HUP

E se non è tutto finito. Nuke em! Avviso obbligatorio: l'uccisione di cose come root non ha alcun annullamento e nessun "sei sicuro di voler interrompere questo processo senza salvare i tuoi file, compresi i database critici di sistema che potrebbero rendere la macchina non avviabile in rare occasioni." digitare avvertenze.

killall -vu username -9

1
Non c'è bisogno di entrare nella shell di root - basta attaccare sudo davanti ai comandi killall
— user151019

1

Una bella utility da aggiungere al tuo Terminale è il comando "logout", da usare come:

logout UserName

Ecco come:

  1. Modifica il tuo .bash_profile

    nano ~/.bash_profile

  2. Aggiungi questa riga:

    logout() {sudo launchctl bootout user/$(id -u "$1")}

  3. Salvare il file premendo ctrl+x

  4. Riavvia il terminale

Sei pronto per andare ;)


Ho dovuto spezzare il corpo su una nuova linea e successivamente mettere anche la parentesi graffa di chiusura.
— bmauter,

@bmauter non per me, nella forma suggerita funziona perfettamente.
— Kappe,

-3

se sei loggato con ssh su un computer remoto puoi disconnetterti semplicemente digitando 'exit':

[host:~user]$ exit
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.