2

Я хотел бы автоматизировать быстрое переключение пользователей для набора машин. Мое текущее, неработающее решение - это фрагмент кода 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 ответа2

1

Я не могу сказать вам, что может пойти не так, но вот обходной путь много лет назад:

'сообщить приложению "Системные события" о возврате клавиш "на Intel iMacs

По сути, автор этого поста говорит, что в очень похожем сценарии ключ возврата будет успешно инициировать вход в систему только в PowerPC iMac; на машинах Intel сценарий устанавливает время ожидания дисплея на 1 минуту, ждет 65 секунд, а затем каким-то образом, когда дисплей спит, работает "возврат нажатия клавиши". (!)

Звучит довольно ужасно, но, может быть, вы можете адаптировать что-то из этого.

0

Кажется, что существует две основные версии скрипта.

Первый похож на ваш, за исключением того, что "возврат нажатия клавиши" дублируется дважды (источник):

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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .