Forma de cerrar la sesión de un usuario desde la línea de comandos en OS X 10.9


31

Quiero cerrar sesión en mi Mac OS X desde la línea de comandos. Mi versión de OS X es 10.9. Intenté el comando pkill -KILL -u uid, pero este comando no funcionó. ¿Hay un comando que se pueda usar para desconectar a un usuario del sistema usando solo la línea de comando, no AppleScript ?


¿Qué no funcionó exactamente?
nohillside

al ejecutar el comando pkill -KILL -u uid, el sistema me muestra una pantalla gris y al esperar mucho tiempo, el sistema muestra la ventana de forzar la salida sin ninguna aplicación en ejecución
prateeak ojha

Respuestas:


32

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

Reemplace el nombre de usuario con el nombre de usuario del usuario objetivo o reemplace toda la subshell con el uid del usuario. Esto le dice a launchctl que desarme la sesión de inicio de sesión de los usuarios (la interfaz gráfica de usuario se refiere específicamente a la sesión de inicio de sesión temporal del usuario, el usuario especifica los procesos de fondo de los usuarios).

Puede cerrar sesión sin sudoprobar esto.

Tenga en cuenta que esto SOLO funcionará en macOS 10.11.xo posterior (consulte launchctl helpmás información)


1
Acabo de releer su pregunta y lamento que esto no lo ayude, pero aparecerá en los resultados de búsqueda de Google.
Iain Henderson

29

Para cerrar sesión únicamente desde la terminal (o una sesión ssh remota), simplemente elimine el proceso de la ventana de inicio de sesión:

sudo pkill loginwindow

Podrías ponerte elegante y especificar el usuario si varios usuarios tienen un proceso de ventana de inicio de sesión, pero esta es una toma fácil, no hay forma rápida de finalizar la sesión gráfica de un usuario.


16

Esto me ha funcionado en el pasado:

Cerrar sesión (con confirmación)

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

Cerrar sesión directamente (sin confirmación)

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

o

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

De esta forma, cualquier aplicación en ejecución se notará y podrá finalizar de manera segura.


osascript -e 'le dice a la aplicación "Eventos del sistema" que «evento aevtrlgo»' muestra un error: un "<" no puede ir más allá de esto.
prateeak ojha

Hmm, funciona bien para mi. ¿Puedes probar desde un script de shell en lugar de la línea de comando, tal vez el shell hace algunas cosas extrañas aquí.
nohillside

Supongo que el OP tiene algún otro problema y los comandos normales se cuelgan de los comentarios aquí y la descripción de la pregunta.
bmike

55
Tenga en cuenta que «≠ <<
mlainz

2

Si tienes múltiples usuarios ...

Encuentre la ID del proceso con:

ps aux|grep login

Luego elimine ese proceso y cerró la sesión. Pero quedan muchos procesos.

Verifique pstreepara saber qué proceso finalizar.


2

Esto hace el truco para mí.

sudo -s

Para obtener algunos privilegios de root y la solicitud #, elimine los procesos.

killall -vu username -HUP

Y si no todo se ha ido. Nuke em! Advertencia obligatoria: matar cosas como root no tiene que deshacer ni "¿Está seguro de que desea interrumpir este proceso sin guardar sus archivos, incluidas las bases de datos críticas del sistema que pueden hacer que la máquina no pueda arrancarse en raras ocasiones". advertencias tipo

killall -vu username -9

1
No es necesario entrar en el shell de raíz: solo pegue sudo frente a los comandos de killall
user151019

1

Una buena utilidad para agregar a su Terminal es el comando "cerrar sesión", que se utilizará como:

logout UserName

Aquí el cómo:

  1. Edite su .bash_profile

    nano ~/.bash_profile

  2. Agrega esta línea:

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

  3. Guarde el archivo presionando ctrl+x

  4. Reiniciar el terminal

Estás listo para ir;)


Tuve que romper el cuerpo en una nueva línea y poner el corsé de cierre después también.
bmauter

@bmauter no es para mí, en la forma sugerida funciona perfectamente.
Kappe

-3

si ha iniciado sesión con ssh en una computadora remota, puede cerrar sesión simplemente escribiendo 'salir':

[host:~user]$ exit
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.