Estamos ejecutando pruebas que requieren varios escritorios en una Mac Mini.
Estamos utilizando con éxito un túnel ssh TCP para localhost, 5900 a 6900, para que Screen Sharing nos permita iniciar sesión en otros usuarios en esta misma máquina con vnc: // usuario: password @ localhost: 6900 y algunos Applescript para presionar Los botones de diálogo resultantes. Puedo detectar el inicio de sesión exitoso a través de ssh ejecutando un programa bajo Java 1.7 con export AWT_TOOLKIT=CToolkit
que intenta abrir una ventana AWT como usuario secundario, que falla si no se inicia el escritorio.
¡Esto es bastante confiable, aunque con mucho gusto escucharía sobre métodos más confiables!
Cuando las cosas van mal:
Estamos teniendo problemas para cerrar la sesión de los usuarios de robots, para dejar la máquina actualizada para otras pruebas que objeten a toda la memoria desperdiciada por procesos parásitos que los usuarios dejan en ejecución.
Actualmente estoy usando
for i in $users ; do
ssh ${i}@localhost "osascript -e 'tell application \"System Events\"'
-e 'log out'
-e 'delay 3'
-e 'keystroke return'
-e end" &
done; wait
pero a veces System Events
aparentemente no se está ejecutando y se niega a iniciar:
33:40: execution error: System Events got an error: Application isn’t running. (-600)
Recientemente agregué -e 'if it is not running then launch' -e 'delay 5'
inmediatamente antes del -e 'log out'
pero eso no parece hacer mucho para ayudar.
Pensé que reemplazar todo ese material de Apple con una variante de ssh kill -KILL -1
funcionaría, al menos como respaldo para los usuarios de retención cuyo System Events
está roto, pero deja un buen par de docenas de servicios CoreServices , PrivateFrameworks y Frameworks. Las cosas con apariencia de GUI que se ejecutan en la mayoría de los cuales se niegan a morir, incluso con kill -9
apuntado manualmente a sus PID. Me esforcé bastante con un script de dos etapas, capturando la salida de killall -s en un archivo y colocándola en una segunda sesión ssh.
¿Hay una manera más confiable de cerrar la sesión de estos usuarios y eliminar todos sus procesos? Tengo derechos de administrador en la caja, pero preferiría algo en la línea de comandos de Unix para evitar escribir AppleScript más doloroso para manipular la GUI.
¡Gracias!