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.