Скриптовое быстрое переключение пользователей на OSX Lion
Я хотел бы автоматизировать быстрое переключение пользователей для набора машин. Мое текущее неработающее решение - это фрагмент кода appleScript, адаптированный из сценариев Leopard/SL, найденных в Интернете:
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
Кажется, пароль введен успешно, но keystroke return
не удается войти в систему (экран "вибрирует", указывая на неудачную попытку). Самое смешное, что нажатие клавиши ввода вручную завершает вход в систему (поэтому я утверждаю, что пароль введен успешно)
Есть идеи?
Спасибо!
2 ответа
Я не могу сказать вам, что может пойти не так, но вот обходной путь много лет назад:
'сообщить приложению "Системные события" о возврате клавиш "на Intel iMacs
По сути, автор этого поста говорит, что в очень похожем сценарии ключ возврата будет успешно инициировать вход в систему только в PowerPC iMac; на машинах Intel сценарий устанавливает время ожидания дисплея на 1 минуту, ждет 65 секунд, а затем каким-то образом, когда дисплей спит, работает "возврат нажатия клавиши". (!)
Звучит довольно ужасно, но, может быть, вы можете адаптировать что-то из этого.
Кажется, что существует две основные версии скрипта.
Первый аналогичен вашему, за исключением того, что "возврат нажатия клавиши" дублируется дважды ( источник):
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
Кто-то даже понял, что дважды не достаточно
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
В то время как кто-то еще предпочитает это решение, которое будет работать, если у вас есть список пользователей с "Другое...", отображаемым в окне входа в систему:
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
(Ответ от пользователя, не являющегося Mac)