Automator: altere o papel de parede quando o brilho da tela for alterado

Automator: altere o papel de parede quando o brilho da tela for alterado

Eu sou novo no uso do Automator. Estou tentando fazer com que o papel de parede da minha área de trabalho mude de acordo com o brilho da tela, que se ajusta automaticamente à luz da minha sala (basicamente um modo claro/escuro automático para a área de trabalho).

Existe algo como Folder Action que é acionado por um evento personalizado em vez de adicionar arquivos a uma pasta? Preciso que ele seja acionado quando o brilho da tela mudar e, dependendo do brilho, decidir se o papel de parede precisa ser alterado.

O que eu tenho até agora

O seguinte AppleScript faz tudo que preciso:

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

A única coisa que resta é descobrir como executá-lo sempre que o brilho da tela mudar.

Responder1

Isso funciona para mim usando a versão mais recente do macOS Mojave.

Você pode usar o Automator, mas não é necessário para esta situação. Cole o seguinte código AppleScript diretamente no aplicativo Editor de Scripts e salve-o como um "aplicativo aberto" no Editor de Scripts. Agora tudo que você precisa fazer é iniciar seu novo aplicativo (que permanece aberto até que você decida encerrá-lo) e a cada 180 segundos (3 minutos), seu comando shell script será executado. O valor de 180 segundos pode ser alterado no código para o que você desejar.

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

Existe outra opção se você não quiser que este aplicativo seja executado continuamente em segundo plano. Por exemplo, se quiser que este aplicativo seja executado apenas por 4 horas, você pode usar o seguinte manipulador ocioso.

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

A única desvantagem de usar esse manipulador ocioso é que a única maneira de sair do aplicativo enquanto ele está em execução seria "Forçar o encerramento" do aplicativo porque o comando normal "Sair" não funcionará.

informação relacionada