Vorrei eseguire qualcosa come "sleep 3600; logout", ma il comando bash logout chiude solo il terminale corrente. Come posso chiudere l'intera sessione di Mac OS X?
Vorrei eseguire qualcosa come "sleep 3600; logout", ma il comando bash logout chiude solo il terminale corrente. Come posso chiudere l'intera sessione di Mac OS X?
Risposte:
Il seguente Applescript disconnetterà l'utente corrente:
tell application "System Events" to log out
Puoi racchiuderlo in un alias bash usando il osascript
comando:
alias maclogout="osascript -e 'tell application \"System Events\" to log out'"
È lo stesso che fare clic su "> Disconnetti [nome utente] ..." e si disconnetterà dopo 2 minuti di attesa
Questo è facilmente combinato con il sleep
comando:
alias delayedlogout="sleep 3600; maclogout"
..o potrebbe essere combinato in un singolo alias:
alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
alias maclogout="..."
Non esiste un modo "carino" per disconnettere l'utente corrente dal Terminale in OS X. Il modo "disordinato" per farlo è quello di uccidere il loginwindow
processo dell'utente . Ucciderà bruscamente tutti i processi (programmi) in esecuzione con il tuo nome utente.
Fare questo è un processo in due fasi.
Nel terminale, esegui questo:
ps -Ajc | grep loginwindow
Quindi, corri
sudo kill <pid>
Dov'è <pid>
il primo numero (seconda colonna) dall'output del comando precedente.
Usa sudo kill -9 per forzare l'uccisione del processo che ho dovuto fare per farlo funzionare.
Quindi, ad esempio, quando l'output del primo comando è:
joshhunt 41 1 41 5e15c08 0 Ss ?? 3:13.09 loginwindow
Quindi corro sudo kill 41
, inserisco la mia password e poi mi disconnetto.
Questo può essere combinato in un alias bash:
alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"
sudo killall loginwindow
? Almeno su 10.7 il loginwindow
processo sembra essere riaperto immediatamente però.
So che questa è una vecchia domanda ma mi ha aiutato, il comando di cui avevo bisogno su OS X 10.8 è:
ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9
L' awk
istruzione è diversa e kill -9
garantisce che venga visualizzato il prompt di accesso.
Penso di aver trovato la risposta a come disconnettersi con grazia da Mac OS X senza l'attesa di 2 minuti.
Ho capito che tenendo premuto Maiusc, Opzione e Comando e premendo "q" si disconnetterà con grazia e non verrà chiesto "se si desidera disconnettersi".
Quindi ho codificato un AppleScript tramite Automator per:
tell application "System Events"
keystroke "q" using {command down, shift down, option down}
end tell
Se hai effettuato l'accesso a una shell come lo stesso utente che ha effettuato l'accesso alla GUI del Mac, potresti emettere un comando sudo-less: launchctl reboot logout
che disconnette l'utente in modo abbastanza efficace; ha l'avvertenza di non consentire alle app a cui si sta per interrompere la richiesta di interazione durante la chiusura, tuttavia non sembra implicare che ciò equivale a ucciderle completamente come potrebbe fare un kill
(SIG TERM) o kill -9
(SIG KILL).
Direi che potrebbe essere il modo "più bello" dopo OS X 10.9 launchctl gui/$(id -u <username>) bootout
La documentazione post OS X 10.9 per launchctl viene trovata eseguendo launchctl help
, ma essenzialmente il comando sopra farà smontare la sessione temporanea di un utente. L'alternativa launchctl user/$(id -u <username>) bootout
abbatte la sessione permanente che esegue i demoni dell'utente mentre l'utente non ha effettuato l'accesso.
Questo può essere testato eseguendo launchctl gui/$(id -u) bootout
, questo ti disconnetterà immediatamente e causerà al sistema di visualizzare la finestra di accesso (con qualche ritardo).
sudo launchctl bootout gui/XXX
dove si XXX
trova l'ID utente numerico (UID). Si noti che i) il bootout
sottocomando viene prima di tutto e ii) $(id)
restituisce molto più dell'UID.
Una bella utility da aggiungere al tuo Terminale è il comando di logout , da usare come:
logout UserName
Ecco come:
Modifica il tuo .bash_profile
nano ~/.bash_profile
Aggiungi questa riga:
logout() {sudo launchctl bootout user/$(id -u "$1")}
Salvare il file premendo ctrl+x
Riavvia il terminale
Sei pronto per andare ;)