Me gustaría ejecutar algo como "sleep 3600; logout", pero el comando logout bash solo cierra el terminal actual. ¿Cómo cierro la sesión completa de Mac OS X?
Me gustaría ejecutar algo como "sleep 3600; logout", pero el comando logout bash solo cierra el terminal actual. ¿Cómo cierro la sesión completa de Mac OS X?
Respuestas:
El siguiente Applescript cerrará la sesión del usuario actual:
tell application "System Events" to log out
Puede concluir esto en un alias bash usando el osascript
comando:
alias maclogout="osascript -e 'tell application \"System Events\" to log out'"
Es lo mismo que hacer clic en "> Cerrar sesión [nombre de usuario] ...", y cerrará sesión después de 2 minutos de espera.
Esto se combina fácilmente con el sleep
comando:
alias delayedlogout="sleep 3600; maclogout"
..o podría combinarse en un solo alias:
alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
alias maclogout="..."
No hay una forma "agradable" de desconectar al usuario actual de la Terminal en OS X. La forma "desordenada" de hacerlo es matar el loginwindow
proceso de ese usuario . Eliminará groseramente todos los procesos (programas) que se ejecutan con su nombre de usuario.
Hacer esto es un proceso de dos pasos.
En la terminal, ejecuta esto:
ps -Ajc | grep loginwindow
Entonces corre
sudo kill <pid>
Donde <pid>
es el primer número (segunda columna) de la salida del comando anterior.
Use sudo kill -9 para forzar a matar el proceso que tuve que hacer para que esto funcione.
Entonces, por ejemplo, cuando si la salida al primer comando es:
joshhunt 41 1 41 5e15c08 0 Ss ?? 3:13.09 loginwindow
Luego corría sudo kill 41
, ingresaba mi contraseña y luego me desconectaba.
Esto se puede combinar en un alias bash:
alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"
sudo killall loginwindow
? Al menos en 10.7, el loginwindow
proceso parece abrirse de nuevo inmediatamente.
Sé que esta es una vieja pregunta, pero me ayudó, el comando que necesitaba en OS X 10.8 es:
ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9
La awk
declaración es diferente y kill -9
garantiza que se muestre la solicitud de inicio de sesión.
Creo que he encontrado la respuesta a cómo cerrar con gracia Mac OS X sin la espera de 2 minutos.
Me di cuenta de que mantener presionadas las teclas Mayús, Opción y Comando y presionar "q" cerrará la sesión con gracia y no preguntará "si desea cerrar sesión".
Así que codifiqué un AppleScript a través de Automator para:
tell application "System Events"
keystroke "q" using {command down, shift down, option down}
end tell
Si ha iniciado sesión en un shell como el mismo usuario que ha iniciado sesión en la interfaz gráfica de usuario de la Mac, puede emitir un comando sin sudo: launchctl reboot logout
que cierra la sesión del usuario de manera bastante efectiva; tiene la advertencia de no permitir que las aplicaciones que se están cerrando provoquen interacción mientras se cierra, sin embargo, no parece implicar que esto sea lo mismo que matarlas directamente como un kill
(SIG TERM) o kill -9
(SIG KILL).
Yo diría que la forma "más agradable" de publicar OS X 10.9 podría ser launchctl gui/$(id -u <username>) bootout
La documentación posterior a OS X 10.9 para launchctl se encuentra ejecutando launchctl help
, pero esencialmente el comando anterior derribará la sesión temporal de un usuario. La alternativa launchctl user/$(id -u <username>) bootout
elimina la sesión permanente que ejecuta demonios de usuario mientras el usuario no está conectado.
Esto se puede probar ejecutando launchctl gui/$(id -u) bootout
, esto inmediatamente cerrará la sesión y hará que el sistema muestre la ventana de inicio de sesión (con algún retraso).
sudo launchctl bootout gui/XXX
dónde XXX
está la ID de usuario numérica (UID). Tenga en cuenta que i) el bootout
subcomando es lo primero, y ii) $(id)
devuelve mucho más que el UID.
Una buena utilidad para agregar a su Terminal es el comando de cierre de sesión , que se utilizará como:
logout UserName
Aquí el cómo:
Edite su .bash_profile
nano ~/.bash_profile
Agrega esta línea:
logout() {sudo launchctl bootout user/$(id -u "$1")}
Guarde el archivo presionando ctrl+x
Reiniciar el terminal
Estás listo para ir;)