Скрипт, чтобы определить, подключен ли 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    
--------------------------------------------------------------------------------------

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

Другие вопросы по тегам