Troca rápida de usuário por script no OSX Lion


2

Gostaria de automatizar a troca rápida de usuário para um conjunto de máquinas. Minha solução atual e quebrada é esse trecho de código de script, 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 returnfalha ao conectar 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í a minha afirmação de que a senha foi inserida com sucesso)

Alguma ideia?

Obrigado!


Não faço ideia concreta, mas talvez você tem que tabpressionar para fora e, em seguida, o botão de login?
slhck

@slhck: não, tentei, sem sorte. Obrigado pela sugestão!
Rom1

Você prefere automatizar a opção para o usuário do que automatizar a digitação de suas senhas. Considere que qualquer evento poderia quebrar seu script.
Tamara Wijsman

Respostas:


1

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

'diga ao aplicativo "System Events" para retornar o pressionamento de tecla' no Intel iMacs

Essencialmente, o autor desta postagem diz que, em um cenário muito semelhante, a chave de retorno somente acionaria com êxito um login nos PowerMac iMacs; em máquinas Intel, o script define o tempo limite de suspensão da tela como 1 minuto, aguarda 65 segundos e, de alguma forma, quando a tela estiver em suspensão, o "retorno de pressionamento de tecla" funciona. (!)

Parece horrível, mas talvez você possa adaptar algo viável a partir disso.


0

Parece haver duas versões principais do script flutuando.

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

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, ela funcionará se você tiver uma lista de usuários com "Outros ..." exibido 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

(Respondida por um usuário não Mac)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.