Проблемы с доступом при управлении удаленным Mac с помощью AppleScript
Я новичок во всем этом программировании, но пытаюсь учиться. У меня был умеренный успех, но я чувствую, что это скорее случайный, чем намеренный. Я был бы признателен за помощь в изучении и понимании AppleScript в частности, а также в области сетей, автоматизации и программирования в целом.
Вот среда: почти все Apple с двумя Minis, парой ноутбуков и различными устройствами iOS, включая AppleTV. Сеть состоит из Apple Airport Extreme и более старого коммутатора D-Link, который я спас (с разрешения) из корзины на работе. Также есть три камеры Foscam Wi-Fi. Один из Mini (называемый Dora) выступает в роли файлового сервера под управлением Yosemite и приложения OS X Server с растущим массивом RAID 1 для хранения носителей.
То, что я хотел бы сделать, это запустить на своем ноутбуке один AppleScript (MacBook Адама), который выполняет следующие действия:
- Запустите приложение iCamSource на MacBook Адама
- Измените "Требовать пароль для пробуждения" на true на MacBook Адама
- Выйдите из iTunes на MacBook Адама, если он работает
- Запустите текущий ScreenSaver, блокирующий Macbook Адама
- Выйдите из iTunes на Dora, если он работает
- Запустите текущий ScreenSaver на Dora, если он еще не запущен, блокируя Dora
Я также хотел бы иметь единственный скрипт на Macbook Адама, который полностью изменяет эти действия.
Я смог запустить iCamSource
установите для параметра "Требовать пароль для пробуждения" значение true и запустите ScreenSaver на Macbook Адама с большим количеством Google-Fu, большим количеством проб и ошибок, а также с небольшим разочарованием. Я еще не пытался бросить iTunes
если он работает Это новая идея / требование, но я думаю, что это должно быть довольно просто добавить к работающему сценарию.
Где я сталкиваюсь с неприятностями, так это контролирую Дору из сценария на Macbook Адама. Я сталкиваюсь с ошибками доступа (905
а также 927
в общем) примерно от половины до двух третей времени я запускаю сценарий. Я испробовал каждый вариант синтаксиса и многие комбинации синтаксиса, которые я нашел в поиске Google, но это тот, который имеет самый (но все еще непоследовательный) успех.
set remoteMachine to "eppc://remoteMachineadam:slajdlll@10.0.1.2"
tell application "iTunes" of machine remoteMachine
quit
end tell
При чтении различных статей, объясняющих, как это сделать, иногда скрипты используют eppc
другие используют epps
и я не видел согласованного результата ни с одним из них. В некоторых статьях используется фактический IP-адрес удаленного компьютера, в других - password@name.local
так что синтаксис будет slajdlll@dora.local
, Это изменение также кажется непоследовательным в своих результатах.
Это, кажется, довольно простая задача, и я нашел много статей, которые делают именно это, но их методы не работают в моей среде. Многие из статей, которые я прочитал, довольно старые, поэтому синтаксис может быть устаревшим. Я как бы сошел с ума, но чувствую, что смогу сделать эту работу. Любая помощь, которую вы можете оказать, будет ОЧЕНЬ признательна.
Обновление - вчера вечером у меня были скрипты, работающие во всех отношениях, кроме управления удаленным компьютером. Этим утром я попытался открыть сценарий "Вне", чтобы снова заняться проблемой удаленного управления, и получил сообщение "Синтаксическая ошибка, не удается аутентифицировать пользователя", и сценарий не будет компилироваться. Вот код:tell application "System Events"
try
tell application "iTunes" to quit
end try
try
tell application "iTunes" of machine "eppc://Dora.local" to quit
end try
tell security preferences
set require password to wake to true
tell application "iCamSource" to activate
tell application "System Events" to start current screen saver
end tell
end tell
Сценарии "Away" и "Home" запускаются из меню AppleScript. Когда я разблокирую ScreenSaver после запуска сценария "Вне", я получаю диалоговое окно с сообщением "При подключении к серверу произошла ошибка"Dora's Airport Extreme. Общий ресурс не существует на сервере. Пожалуйста, проверьте имя общего ресурса, а затем повторите попытку. "Я начинаю думать, что у меня может быть ошибка Permissions на одном или нескольких компьютерах, или если есть другая проблема, которая заставляет скрипты работать не согласованно.
Спасибо за всю помощь до сих пор!
ОБНОВЛЕНИЕ Хорошо, похоже, что проблема была в том, что iPhoto и Screen Saver взаимодействовали с файлами на сетевом жестком диске. Открытие iPhoto и медленное открытие каждого изображения и повторное связывание тех, кто потерял свое местоположение, похоже, решило эту проблему. Я все еще сталкиваюсь с кодом ошибки доступа 905. Чтобы устранить неполадки в этом процессе, я сокращаю сценарий до одной задачи, чтобы выйти из iTunes на удаленном компьютере с именем "Дора". Вот код:
set Dora to "epps://adam:slajdlll@10.0.1.2"
try
tell application "iTunes" of machine Dora to quit
end try
Вот журнал событий, который генерирует этот скрипт:
tell application "iTunes" of machine "eppc://epps/adam%253kslajdlll%4010.0.1.2.local"
quit
--> error number -905
end tell
Возможно / вероятно, что приложение сервера OS X неправильно настроено и препятствует тому, чтобы скрипт управлял удаленным компьютером? Любые другие мысли или вещи, чтобы попробовать?
Спасибо!
ОБНОВЛЕНИЕ 2
В разделе "Группы" приложения OS X Server, запущенного на удаленном компьютере, я обнаружил, что существует группа, называемая Apple Remote Events ACL. Когда я нажимаю кнопку "Изменить", чтобы просмотреть его настройки, я вижу фактическое имя учетной записи "com.apple.access_remote_ae-disabled". Интересно, это нам что-то говорит? Я искал в нескольких библиотеках "com.apple.access", думая, что это может быть что-то, что можно редактировать, но ничего не нашел. Я член этой группы. Я попытался удалить себя из группы и попробовал сценарий без изменений в результатах, поэтому я добавил себя в него.
ОБНОВЛЕНИЕ 3
Как и предполагалось, я пытаюсь исключить OSX Server из уравнения. Для этого я попытаюсь запустить TextEdit (так как он запускается быстрее, чем iTunes) на третьей машине, известной как Office Mini, на которой нет приложения Server. Вот сценарий:set OfficeMini to "eppc://10.0.1.196"
try
tell application "System Events" of machine OfficeMini
open "/Applications/TextEdit.app"
end tell
end try
Когда я запускал скрипт изначально, я получил два диалоговых окна с запросом имени пользователя и пароля. Я поставил их и установил флажок "Сохранить в связке ключей". Скрипт не открыл TextEdit, но я не получаю ошибки доступа. Я получаю разные ошибки, -600 или -10010 в зависимости от того, использую ли я системные события или Finder. Используя список на этой странице: Коды ошибок AppleScript Николаса Рейлинга Я обнаружил, что при системных событиях я получаю ошибку -600, которая означает, что приложение не запущено. Это не удивительно, я пытаюсь открыть это. Когда я использую Finder вместо системных событий, я получаю ошибку -10010, которая указывается в списке: "Обработчик не может обрабатывать объекты этого класса". Итак, прогресс есть, но я все еще в тупике.
ОБНОВЛЕНИЕ 4 Чтобы еще больше уточнить / упростить, я попытался запустить простой скрипт, чтобы открыть iTunes на Office Mini локально на этом компьютере, и он работал нормально.tell application "iTunes" to activate
Подстановка "выйти" вместо "активировать" и попытка использования этого синтаксиса с несколькими различными приложениями работали довольно хорошо и очень быстро. Я попробовал тот же сценарий и варианты на машине Dora с теми же, успешными результатами.
Затем я попытался заставить этот синтаксис работать удаленно с этим кодом:set OfficeMini to "eppc://10.0.1.196"
tell application "iTunes" of machine OfficeMini to quit
Я получил это сообщение об ошибке в журнале событий:tell application "iTunes" of machine "eppc://10.0.1.196"
quit
--> error number -927
Result:
error "iTunes got an error: Unable to authenticate user." number -927
Итак, поскольку OSX Server не работает на Office Mini, это, похоже, устраняет это как причину ошибки. Я попытался изменить код с помощью другого варианта, который я видел в Интернете и который использует "epps" вместо "eppc", что приводит к похожему сообщению об ошибке: "iTunes получил ошибку: удаленный доступ не разрешен". номер -905. Я не получил диалоговые окна, запрашивающие учетные данные. Когда я увидел строку "epps", используемую в Интернете, она была отформатирована как "epps://username:password@location", поэтому я использовал "epps://adam:slajdlll@10.0.1.196" и получил то же сообщение об ошибке, Я даже попробовал "Адам" вместо "Адам" без изменений в результатах.
1 ответ
Да, шаг 1 - попытаться максимально упростить ваш сценарий, чтобы сузить точку отказа.
Я скопировал ваш минимальный скрипт на мою машину и заставил его работать:
set Dora to "minipuppy.local"
try
tell application "iTunes" of machine Dora to quit
end try
Несколько заметок:
- Я использовал "minipuppy.local" (имя Bonjour linklocal), а не ваш eppc, потому что я знаю, что такое первый, но не последний. (Локальное имя ссылки можно получить из панели "Общие привилегии" *, где указано "Компьютеры в вашей локальной сети могут получить доступ к вашему компьютеру по адресу:XXXXX"
- Появилось диалоговое окно аутентификации, в котором говорилось, что мне нужно ввести имя пользователя и пароль для целевой машины, но в этом диалоговом окне был указан адрес eppc (я не делал снимок экрана:-()
- После ввода имени пользователя / пароля мой скрипт ничего не сделал. Интересно, я не смог заставить его распечатать журнал как у тебя?
- Я исправил это, зайдя в Системные настройки целевого Mac и включив "Удаленные события Apple" на панели "Общий доступ" *. После включения мой сценарий сработал.
Я надеюсь, что включение "Удаленных событий Apple" станет лучшим решением вашей упрощенной проблемы.
* Apple Menu -> Системные настройки -> Общий доступ