Скрипт, чтобы определить, подключен ли NAS и, если да, смонтировать общие ресурсы.
Я пытаюсь найти способ монтирования Shares (afp) на моем NAS автоматически. Я использую логины на нем, чтобы контролировать, какие ресурсы доступны компьютеру (для конфиденциальности и по другим причинам). При переключении учетных записей не все общие ресурсы перемонтируются, что вызывает проблемы для некоторых приложений, которые я запускаю.
То, что я хочу сделать, это иметь скрипт, который будет запускаться каждый раз, когда я вхожу в NAS (даже если это просто гостевой вход в систему), тогда этот скрипт будет монтировать общие ресурсы.
Мне было интересно, если кто-нибудь может указать мне в правильном направлении. Это на компьютере с OS X, поэтому подумывал об использовании applecript для достижения этой цели.
заранее спасибо
Том
2 ответа
Основная идея заключается в том, чтобы заставить запускаемый агент наблюдать за папками на предмет изменений. Вы захотите посмотреть папку /Volumes, потому что когда вы входите в NAS, что-то будет смонтировано в папке Volumes. Таким образом, агент наблюдения обнаружит, что что-то изменилось в папке Volumes, и запустит скрипт.
Это очень просто. Вы можете гуглить о launchd и найти много примеров. Но для настройки папки просмотра используйте что-то вроде этого...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>WatchPaths</key>
<array>
<string>/Volumes</string>
</array>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/osascript</string>
<string>/path/to/applescript</string>
</array>
<key>Label</key>
<string>com.someName.plistFileName</string>
</dict>
</plist>
Так что просто создайте текстовый файл с кодом выше. Сохраните его с расширением ".plist". Вставьте путь к appleScript в разделе ProgramArguments и дайте ему имя в разделе Label.
Поместите этот список в папку ~/Library/LaunchAgents и перезагрузите компьютер. Теперь каждый раз, когда что-то меняется в папке /Volumes, запускается яблочный скрипт.
Тогда вы просто создаете яблочный скрипт правильно. Сначала вам нужно проверить папку "Тома" и посмотреть, подключен ли ваш NAS. Если это так, подключите любые дополнительные ресурсы, которые вы хотите, а если нет, то ничего не делайте. Вы можете Google (или переполнение стека поиска), как смонтировать общие ресурсы, используя applecript.
Удачи.
Я боролся с этой проблемой на моем Mac целую вечность и полагаю, что у меня наконец есть решение.
Я разделил его на два сценария:
первый (экспортируется в редакторе яблочного скрипта как оставшееся открытое приложение) работает в режиме ожидания (а не в цикле повтора) и вызывает второй скрипт каждые 10 секунд, который обрабатывает монтирование диска. ошибки, которые я проверяю в первом скрипте, очень важны, так как -128 гарантирует, что вы все равно можете выйти из скрипта оставайтесь открытым с помощью щелчка правой кнопкой мыши или выключения osx, в то время как -5014 является неизвестной ошибкой, которая, если ее не обработать явным образом, не вызывает диалоговое окно мое дело.
--------------------------------------------------------------------------------------
--"On Idle Launch Basic Drive Mounter.app"
on idle
try
--script loads on startup, so first we wait 5 seconds to ensure network
delay 5
--run the mounter script which is on the desktop
run script file ":Users:localusername:Desktop:Basic Drive Mounter.app"
on error errStr number errorNumber
--listen for the apple quit command and quit
if the errorNumber is equal to -128 then
quit
return 1
--listen for the unknown error and ignore it
else if the errorNumber is equal to -5014 then
return 5
else
--all other errors are also ignored
return 5
end if
end try
--return with a wait of 5 seconds before next idle run
return 5
end idle
--------------------------------------------------------------------------------------
второй сценарий (экспорт в виде приложения) выполняет проверку сети, затем пытается подключить том с помощью подключения оболочки. Первоначально я использовал "монтируемый том" поиска, и этот код существует в виде встроенных комментариев, но мне не нравилось, что диалоговое окно выскакивает на ошибках; хотя бы на секунду, поэтому я перешел к сценарию оболочки.
--------------------------------------------------------------------------------------
--"Basic Drive Mounter.app"
try
set IP_address to "xxx.xxx.xxx.xxx"
set IP_Valid to true
try
do shell script ("ping -c 2 " & IP_address)
on error
set IP_Valid to false
end try
if IP_Valid then
tell application "Finder"
if disk "work" exists then
else
try
do shell script "mkdir /Volumes/work"
end try
do shell script "mount_afp afp://xxx.xxx.xxx.xxx/work /Volumes/work/"
-->>finder mount volume version
--with timeout of 1 second
-- mount volume "afp://xxx.xxx.xxx.xxx/work"
--end timeout
--<<finder mount volume version
end if
end tell
end if
on error
return 0
-->>finder mount volume version
--on error finder returns an error dialog which needs to be closed to go back and retry
--tell application "System Events"
-- keystroke return
--end tell
--<<finder mount volume version
end try
--------------------------------------------------------------------------------------
как только он заработает, перетащите первый скрипт / приложение в элементы входа пользователей, чтобы он автоматически запускался при входе в систему. Если вам не требуется постоянное переназначение, перетащите второй скрипт / приложение в элементы входа для один пробег.