проблема с доступом при управлении удаленным Mac с помощью AppleScript

Я новичок во всем этом программировании, но пытаюсь учиться. У меня был умеренный успех, но я чувствую, что это скорее случайно, чем преднамеренно. Я был бы признателен за помощь в изучении и понимании AppleScript в частности, а также в работе с сетями, автоматизации и программировании в целом.

Вот обстановка: почти вся Apple с двумя Mini, парой ноутбуков и различными iOS-девайсами, включая AppleTV. Сеть состоит из Apple Airport Extreme и более старого коммутатора D-Link, который я спас (с разрешения) из корзины на работе. Также есть три камеры Foscam с Wi-Fi. Один из Mini (названный Dora) действует как файловый сервер, на котором запущены Yosemite и приложение OS X Server с растущим массивом RAID 1 для хранения мультимедиа.

Что я хотел бы сделать, так это запустить один AppleScript с моего ноутбука (Macbook Адама), который делает следующее:

  1. Запустите приложение iCamSource на Macbook Адама.
  2. Измените «Требовать пароль для пробуждения» на true на Macbook Адама.
  3. Выйдите из iTunes на Macbook Адама, если он запущен
  4. Запустите текущую заставку, блокирующую Macbook Адама.
  5. Выйдите из iTunes на Доре, если он запущен
  6. Запустите текущую заставку на Доре, если она еще не запущена, тем самым заблокировав Дору.

Я также хотел бы иметь один сценарий на Macbook Адама, который отменяет эти действия.

Мне удалось запустить iCamSource, установить для параметра «Требовать пароль для пробуждения» значение true и запустить экранную заставку на Macbook Адама с большим количеством Google-Fu, методом проб и ошибок и небольшим разочарованием. Я еще не пытался выйти из iTunes, если он запущен. Это новая идея/требование, но я думаю, что это должно быть довольно просто добавить к функционирующему сценарию.

У меня возникают проблемы, когда я управляю Дорой из сценария на Macbook Адама. Я сталкиваюсь с ошибками доступа (обычно 905 и 927) примерно в половине-двух третях времени запуска сценария. Я пробовал каждый вариант синтаксиса и множество комбинаций синтаксиса, которые я нашел с помощью поиска Google, но это тот, который имеет наибольший (но все же непоследовательный) успех.

set remoteMachine to "eppc://remoteMachineadam:[email protected]"
tell application "iTunes" of machine remoteMachine
    quit
end tell

При чтении различных статей, объясняющих, как это сделать, иногда сценарии используют eppc, другие используют epps, и я не видел последовательного результата ни с одним из них. В некоторых статьях используется фактический IP-адрес удаленной машины, в других — [email protected], поэтому синтаксис будет [email protected]. Это изменение также кажется непоследовательным в своих результатах.

Это кажется довольно простой задачей, и я нашел много статей, которые делают именно это, но их методы не работают в моей среде. Многие статьи, которые я читал, довольно старые, поэтому синтаксис может быть устаревшим. Я как бы на пределе своих возможностей, но чувствую, что должен справиться с этой задачей. Любая помощь, которую вы все могли бы оказать, будет ОЧЕНЬ оценена.

Обновление. Вчера вечером у меня были сценарии, работающие во всех отношениях, кроме управления удаленной машиной. Этим утром я попытался открыть сценарий «Нет на месте», чтобы снова решить проблему с удаленным управлением, и я получаю сообщение «Синтаксическая ошибка, не позволяющая аутентифицировать пользователя», и сценарий не компилируется. Вот код:
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

Сценарии «В гостях» и «Дома» запускаются из меню AppleScript. Когда я разблокирую заставку после запуска сценария «В гостях», я получаю диалоговое окно с сообщением «Произошла проблема с подключением к серверу «Dora's Airport Extreme». Общий ресурс не существует на сервере. Пожалуйста, проверьте имя общего ресурса и повторите попытку." Я начинаю думать, что у меня может быть ошибка разрешений на одной или нескольких машинах, или есть другая проблема, из-за которой сценарии работают непоследовательно.

Спасибо за всю помощь!

ОБНОВЛЕНИЕ Хорошо, похоже, возникла проблема с взаимодействием iPhoto и заставки с файлами на сетевом жестком диске. Открытие iPhoto и медленное открытие каждого изображения и повторное связывание тех, которые потеряли свое местоположение, похоже, решили эту проблему. Я все еще сталкиваюсь с кодом ошибки доступа 905. Чтобы устранить неполадки в этом процессе, я разделяю сценарий на одну задачу, чтобы выйти из iTunes на удаленной машине с именем «Дора». Вот код:

set Dora to "epps://adam:[email protected]" 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 Server неправильно настроено и не позволяет сценарию управлять удаленным компьютером? Любые другие мысли или вещи, чтобы попробовать?

Спасибо!

ОБНОВЛЕНИЕ 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
Замена «quit» на «quit» «активировать», и попытка использовать этот синтаксис с несколькими различными приложениями работала достаточно хорошо и очень быстро. Я попробовал тот же сценарий и его вариации на машине Доры с такими же успешными результатами.

Затем я попытался заставить этот синтаксис работать удаленно с помощью этого кода:
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:[email protected]» и получил такое же сообщение об ошибке. . Я даже попробовал «Адам» вместо «Адам» без каких-либо изменений в результатах.


person Faramir66103    schedule 23.12.2014    source источник


Ответы (1)


Да, шаг 1 — попытаться максимально упростить сценарий, чтобы сузить точку отказа.

Я скопировал ваш минимальный скрипт на свою машину и заставил его работать:

set Dora to "minipuppy.local"
try
    tell application "iTunes" of machine Dora to quit
end try

Несколько заметок:

  • Я использовал «minipuppy.local» (местное имя ссылки Bonjour), а не ваш материал eppc, потому что я знаю, что такое первое, но не второе. (Вы можете получить локальное имя ссылки на панели настроек общего доступа *, где написано «Компьютеры в вашей локальной сети могут получить доступ к вашему компьютеру по адресу: XXXXX»
  • Появилось диалоговое окно аутентификации, в котором говорилось, что мне нужно ввести имя пользователя и пароль для целевой машины, но в диалоговом окне действительно был адрес eppc (я не сделал снимок экрана :-( )
  • После ввода имени пользователя/пароля мой скрипт ничего не сделал. Интересно, у меня не получилось заставить распечатать лог как у тебя?
  • Я исправил это, перейдя в Системные настройки целевого Mac и включив «Удаленные события Apple» на панели «Общий доступ» *. После включения мой скрипт заработал.

Я надеюсь, что включение «Удаленных событий Apple» станет окончательным решением вашей упрощенной проблемы.

*Меню Apple -> Системные настройки -> Общий доступ

person WonderMonster    schedule 30.12.2014
comment
Спасибо за интерес и помощь. Попробовал скрипт как вы написали, подставив соответствующие имена машин. Как ни странно, у меня не появилось диалогового окна аутентификации. Я также получил новый номер ошибки -927. Вот ответ: скажите приложению iTunes на машине eppc://Dora.local quit --› номер ошибки -927 end скажите, что я также проверил удаленные события Apple, и они включены. У меня также включено удаленное управление. Я продолжу изучение приложения Server, так как в него также встроены обширные элементы управления доступом. Любая другая помощь будет принята с благодарностью. :-) - person Faramir66103; 30.12.2014
comment
Можете ли вы заставить это работать между двумя компьютерами Mac, просто работающими под управлением Mac OS X (не Server)? - person WonderMonster; 31.12.2014
comment
Это как бы работает на другом Mac. См. обновление 3 выше. Спасибо за помощь. Я действительно оценил это. - person Faramir66103; 31.12.2014
comment
Вы добавили новые повороты, поэтому снова упростите сначала: сначала запустите свой сценарий в Office Mini сам по себе (без удаленного аспекта). Я предполагаю, что ваш сценарий неверен. Вам понадобится что-то вроде: я думаю, откройте приложение TextEdit. Но на самом деле вам стоит попробовать такой сценарий: скажите приложению TextEdit закрыться На самом деле, пытались ли вы заставить скрипт выхода iTunes работать на Доре, не выполняя это с удаленной машины? Рад помочь - пожалуйста, проголосуйте за любой из моих комментариев, который вы считаете полезным, чтобы я мог получить очки репутации (я новичок, и мне нужны очки, чтобы разблокировать больше функций!) - person WonderMonster; 31.12.2014