Automator: cambia el fondo de pantalla cuando se cambia el brillo de la pantalla

Automator: cambia el fondo de pantalla cuando se cambia el brillo de la pantalla

Soy nuevo en el uso de Automator. Estoy intentando hacer que el fondo de pantalla de mi escritorio cambie de acuerdo con el brillo de mi pantalla, que se ajusta automáticamente a la luz de mi habitación (básicamente, un modo automático de brillo/oscuridad para el escritorio).

¿Existe algo parecido a una acción de carpeta que se activa mediante un evento personalizado en lugar de agregar archivos a una carpeta? Necesito que se active cuando cambia el brillo de la pantalla y luego, dependiendo del brillo, decidir si es necesario cambiar el fondo de pantalla.

lo que tengo hasta ahora

El siguiente AppleScript hace todo lo que necesito:

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

Lo único que queda es descubrir cómo ejecutarlo cada vez que cambia el brillo de la pantalla.

Respuesta1

Esto me funciona usando la última versión de macOS Mojave.

Puede utilizar Automator pero no es necesario para esta situación. Pegue el siguiente código AppleScript directamente en la aplicación Script Editor y luego guárdelo como una "aplicación abierta" en Script Editor. Ahora todo lo que necesita hacer es iniciar su nueva aplicación (que permanece abierta hasta que realmente elija cerrarla) y cada 180 segundos (3 minutos), se ejecutará su comando de script de shell. El valor de 180 segundos se puede cambiar en el código a lo que desee.

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 otra opción si no desea que esta aplicación se ejecute continuamente en segundo plano. Por ejemplo, si desea que esta aplicación solo se ejecute durante 4 horas, puede utilizar el siguiente controlador inactivo.

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

La única desventaja de usar este controlador inactivo es que la única forma de salir de la aplicación mientras se está ejecutando sería "Forzar el cierre" de la aplicación porque el comando normal "Salir" no funcionará.

información relacionada