1 votos

¿Cómo puedo secuencia de comandos de la obligó a salir de la sesión de otro usuario de escritorio de OS X?

Estamos ejecutando las pruebas que requieren de múltiples escritorios en un Mac Mini.

Estamos con éxito el uso de ssh, TCP túnel a localhost, 5900 al 6900, para hacer uso Compartido de Pantalla nos deja iniciar sesión en otros usuarios en esta misma máquina con vnc://user:password@localhost:6900 y algunos de Applescript para presionar el diálogo resultante botones. Puedo detectar el inicio de sesión con éxito a través de ssh que se ejecuta un programa en Java 1.7 con export AWT_TOOLKIT=CToolkit que intenta abrir un AWT ventana que el usuario secundario, que no se si el escritorio no está iniciado.

Esto es bastante fiable, aunque me gustaría feliz de oír de los métodos más confiables!

Cuando las cosas van mal:

Estamos teniendo problemas en el registro de los robot de los usuarios, a salir de la máquina fresca de otras pruebas de que el objeto de toda la memoria desperdiciada por perdido los procesos de los usuarios dejar de correr.

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 al parecer no se está ejecutando y se niega a iniciar:

33:40: execution error: System Events got an error: Application isn't running. (-600)

Recientemente he añadido -e 'if it is not running then launch' -e 'delay 5' inmediatamente antes de la -e 'log out' pero eso no parece hacer mucho para ayudar.

Pensé que la sustitución de todos los que Applescript cosas con alguna variante de ssh kill -KILL -1 iba a funcionar - al menos como un back-up para la sujeción de los usuarios cuyas System Events están rotos - pero deja un buen par de docenas de core services, PrivateFrameworks, y los Marcos de GUI-busca las cosas que ejecutan la mayoría de los que se niegan a morir incluso con kill -9 manual dirigido a sus PIDs. He intentado muy duro con dos etapas de secuencia de comandos, la captura de la salida de killall -s a un archivo y chorros en una segunda sesión de ssh.

Es allí una manera más confiable para el registro de estos usuarios y matar a todos los procesos? Tengo derechos de administrador en el cuadro, pero preferiría algo en la línea de comandos Unix para evitar escribir más doloroso de AppleScript para manipular la interfaz gráfica de usuario.

Gracias!

0voto

android.weasel Puntos 116

He encontrado lo que parece ser una ruta viable, pero es poco delicado:

Matar a los 'loginwindow proceso para un usuario (como root - el usuario no puede matar a su propio proceso(!)) (nota, la [n] impide la expresión de coincidencia de sí mismo), a continuación, utilizar kill -9 -1 para coger el resto de lío:

 $ for i in $usuarios; hacer
 echo $pword |
 ssh $i@localhost '
 sudo -S kill -9 $(
 ps -axf | awk "/^ *$(id-u '$i') .*logi[n]de la ventana/{ print \$2 }"
);
 kill -9 -1
';
hecho

Deja dos procesos en torno a

  • /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.compartido
  • /usr/sbin/cfprefsd agente

...que varios mac páginas reclamo normal de OS X de forma extraña.

No me gusta esta solución, porque es tan abrupto y estoy preocupado por dejar las cosas como iOS teléfono simuladores u otros archivos en estados incoherentes, pero la ausencia de otra respuesta, me parece haber otra opción.

Por lo menos puedo usar esto como un respaldo de emergencia para cuando el Applescript ruta falla, y el kill -9 -1 contenedoras lo de Apple normal, pero la mala calidad de desconexión proceso deja colgando alrededor de todos modos.

Yo también tenga en cuenta que hacer nada con múltiples usuarios de escritorio se mete a la conectividad de la red para mí, al parecer debido a que Apple no se molesta en pensar cómo autenticado redes deben comportarse.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X