Скриптовое быстрое переключение пользователей на OSX Lion

1006
Rom1

Я хотел бы автоматизировать быстрое переключение пользователей для набора машин. Мое текущее, неработающее решение - это фрагмент кода 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
Никакой конкретной идеи, но, может быть, вам нужно «выйти», а затем нажать кнопку для входа? slhck 12 лет назад 0
@slhck: Нет, попробовал, не повезло. Спасибо за предложение, хотя! Rom1 12 лет назад 0
Вы скорее захотите автоматизировать переключение на пользователя, чем автоматизировать ввод его паролей, учтите, что любое событие может нарушить ваш сценарий. Tom Wijsman 12 лет назад 0

2 ответа на вопрос

1
Justin

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

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

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

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

0
harrymc

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

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

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)

Похожие вопросы