Незнание пароля усложняет задачу , но, возможно, решение таково: возможно ли временно удалить пароль пользователя? (И впоследствии сбросьте его на то, что было раньше.)
Для начала:
Во-первых, откройте окно входа в систему. Просто выйдите из текущего пользователя, используйте быстрое переключение пользователей или используйте SSH:
cd "/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/"
sudo ./CGSession -suspend
Или, чтобы сразу переключиться на конкретного пользователя, который, вероятно, покажет окно входа в систему (это внезапно больше не работает на моем 10.5 Leopard):
sudo ./CGSession -switchToUserID 501
То, что показано сейчас, немного зависит от системных настроек, но давайте предположим, что это значки пользователей и их имена. Чтобы активировать имя, мы должны ввести первые буквы. Затем после возврата отображается запрос пароля. В качестве альтернативы можно выбрать любое имя (например, нажав стрелку вниз), а затем нажать Option-Return, чтобы запросить любое имя пользователя и его пароль. Я не знаю, как можно определить, какой экран отображается, но давайте сохраним это на потом ...
Итак, чтобы выбрать первое (случайное) имя пользователя и нажать Option-Return, введите конкретное имя пользователя, нажмите Return и введите пароль:
sudo osascript -e 'tell app "System Events"
key code 125
keystroke return using option down
keystroke "the username"
delay 1.0
keystroke return
delay 1.0
keystroke "the password"
delay 1.0
keystroke return
end tell'
Выше показана некоторая ошибка, которая, насколько я могу судить, не ограничивает использование:
osascript[285] : 3891612: (connectAndCheck) Untrusted apps are not
allowed to connect to or launch Window Server before login.
_RegisterApplication(), FAILED TO establish the default connection to
the WindowServer, _CGSDefaultConnection() is NULL.
В качестве альтернативы используйте скрипт для конкретного языка из « Сценарий окна входа в систему через Apple Remote Desktop » (возможно, однажды комментарии на этом сайте покажут лучшее решение):
tell process "SecurityAgent"
set value of text field 1 of group 1 of window 1 to "the username"
set value of text field 2 of group 1 of window 1 to "the password"
end tell
click button "Log In" of window 1 of application process "SecurityAgent"
Но главная проблема в том, что для этого еще нужен пароль. Однако: очевидно, что пароль не требуется, когда у пользователя есть пустой пароль. На самом деле, для пустых паролей достаточно просто щелкнуть значок пользователя. Итак, если отправка нажатий клавиш с помощью AppleScript является приемлемой, то, возможно, "все", что осталось выяснить:
Можно ли временно удалить пароль пользователя, чтобы разрешить запуск (или возобновление) сеанса, не зная этого пароля ...?
Можно ли сделать AppleScript защищенным от ошибок? Подобно:
- Как сказать , если окно Логин виден? (возможно
stat -f%Su /dev/console
может помочь, так как это дает root
при отображении окна входа в систему)
- Как узнать, какое окно входа отображается? (Например: один показывает значки и имена для входа, или выпадающий список, или, может быть, только запрос пароля, если кто-то выбрал переключение на какого-то конкретного пользователя?)
- Избавиться от задержек.
- Как насчет этого сообщения об ошибке?
(Примечание для тестирования: при использовании общего доступа к экрану кажется, что установка предпочтения При управлении компьютерами: шифрование паролей и нажатий клавиш также сохраняет соединение только при отображении окна входа в систему или после успешного входа пользователя в систему. При использовании Encrypt всех сетевых данных мой Mac должен переустанавливать соединение с Screen Sharing при каждом входе в систему или смене пользователя.)