Comutação de usuário rápido com script no OSX Lion

2

Eu gostaria de automatizar a troca rápida de usuários para um conjunto de máquinas. Minha solução atual e quebrada é este snippet de applescript, adaptado dos scripts do Leopard / SL encontrados on-line:

set thePassword to "foo"
set N to "1027"
do shell script "/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -switchToUserID " & N
delay 0.8
tell application "System Events"
  keystroke thePassword
  delay 1
  keystroke return
end tell

A senha parece ter sido digitada com sucesso, mas keystroke return falha ao registrar o usuário (a tela "vibra" para indicar uma tentativa com falha). O engraçado é que pressionar a tecla enter manualmente completa o login (daí minha afirmação de que a senha foi digitada com sucesso)

Alguma idéia?

Obrigado!

    
por Rom1 13.03.2012 / 14:19

2 respostas

1

Eu não posso dizer o que pode estar errado, mas aqui está uma solução alternativa de muitos anos atrás:

'informar aplicativo "Eventos do sistema" para retorno de pressionamento de tecla' em Intel iMacs

Essencialmente, o autor deste post diz que, em um cenário muito semelhante, a chave de retorno só acionaria com êxito um login no PowerPC iMacs; nas máquinas Intel, o script define o tempo limite de espera da tela como 1 minuto, aguarda 65 segundos e, de alguma forma, quando a tela está adormecida, o "retorno de pressionamento de tecla" funciona. (!)

Parece muito horrível, mas talvez você possa adaptar algo viável com isso.

    
por 18.03.2012 / 01:17
0

Parece haver duas versões principais do script por aí.

O primeiro é semelhante ao seu, exceto que "retorno de pressionamento de tecla" é duplicado duas vezes ( fonte ):

osascript <<EOF
tell application "System Events"
keystroke "USERNAME"
keystroke tab
delay 0.5
keystroke "PASSWORD"
delay 0.5
keystroke return
keystroke return
end tell
EOF 

Alguém até descobriu que duas vezes não é suficiente:

osascript <<EndOfMyScript
tell application "System Events"
keystroke "USERNAME"
keystroke tab
delay 0.5
keystroke "PASSWORD"
delay 0.5
keystroke return
keystroke tab
delay 0.5
keystroke "PASSWORD"
delay 0.5
keystroke return
keystroke return
keystroke return
keystroke return
keystroke return
end tell
EndOfMyScript

Enquanto outra pessoa prefere essa solução, que funcionará se você tiver uma lista de usuários com "Outros ..." exibidos na janela de login:

osascript <<EOT
set username_ to "username"
set password_ to "password"
tell application "System Events"
key code 125 -- Down Arrow
key code 125 -- Down Arrow
delay 1
key code 125 -- Down Arrow
key code 125 -- Down Arrow
key code 125 -- Down Arrow
key code 125 -- Down Arrow
key code 125 -- Down Arrow
key code 125 -- Down Arrow
delay 0.5
key code 36 -- Return
delay 1
tell process "SecurityAgent" to set value of text field 1 of group 1 of window 1 to username_
tell process "SecurityAgent" to set value of text field 2 of group 1 of window 1 to password_
click button "Log In" of window 1 of application process "SecurityAgent"
end tell
EOT

(respondido por um usuário que não é Mac)

    
por 19.03.2012 / 19:55