Automator: смена обоев при изменении яркости экрана

Automator: смена обоев при изменении яркости экрана

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

Есть ли что-то вроде Folder Action, которое запускается пользовательским событием, а не добавлением файлов в папку? Мне нужно, чтобы оно запускалось при изменении яркости экрана, а затем в зависимости от яркости решалось, нужно ли менять обои.

Что я имею на данный момент

Следующий AppleScript делает все, что мне нужно:

set brightness to do shell script "nvram backlight-level | awk '{print $2}'"
if brightness is equal to "8%00" or brightness is equal to "%16%00" or brightness is equal to "%25%00" or brightness is equal to "%00%00" then
    setWallpaper("dark")
else
    setWallpaper("bright")
end if

on setWallpaper(imageName)
    tell application "System Events"
        tell every desktop
            set picture to "/Users/Ryn/Desktop/wallpapers/" & imageName & ".png"
        end tell
    end tell
end setWallpaper

Осталось только придумать, как запускать его каждый раз при изменении яркости экрана.

решение1

У меня это работает с последней версией macOS Mojave.

Вы можете использовать Automator, но это не обязательно в данной ситуации. Вставьте этот следующий код AppleScript непосредственно в приложение Script Editor, затем сохраните его как "остающееся открытым приложение" в Script Editor. Теперь все, что вам нужно сделать, это запустить ваше новое приложение (которое останется открытым, пока вы не решите выйти из него), и каждые 180 секунд (3 минуты) будет выполняться ваша команда shell-скрипта. Значение 180 секунд можно изменить в коде на любое другое.

checkBrightness() -- runs once on opening this app then the idle handler takes over

on idle
    checkBrightness()
    return 180 -- in seconds (runs the shell script command every 3 min.)
end idle

on checkBrightness()
    set brightness to do shell script "nvram backlight-level | awk '{print $2}'"
    if brightness is equal to "8%00" or brightness is equal to "%16%00" or brightness is equal to "%25%00" or brightness is equal to "%00%00" then
        setWallpaper("dark")
    else
        setWallpaper("bright")
    end if
end checkBrightness

on setWallpaper(imageName)
    tell application "System Events"
        --tell every desktop (couldnt get this to work)
        tell current desktop
            set picture to "/Users/Ryn/Desktop/wallpapers/" & imageName & ".png"
        end tell
    end tell
end setWallpaper

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

on idle
    repeat 16 times
        delay (15 * minutes) --(waits to run the shell script command every 15 min.)
        checkBrightness()
    end repeat
end idle

Единственным недостатком использования этого обработчика простоя является то, что единственный способ выйти из приложения во время его работы — это «принудительное завершение» приложения, поскольку обычная команда «Выйти» не сработает.

Связанный контент