¿Cambiar automáticamente el fondo de escritorio de OS X para todos los escritorios y monitores?

resumen _ La automatización cambia el fondo del escritorio para todos los escritorios (virtuales), pero no para todos los monitores. ¿Cómo hacerlo para todos los monitores?

Detalles _

Esta entrada de blog analiza cómo cambiar automáticamente el fondo de todos los escritorios (virtuales, de control de misión, etc.) con el siguiente script:

#! /bin/bash
#script to change all desktop backgrounds
echo -n “Drag and drop an image file here then press ‘return’ or press ‘control-c’ to cancel…”
read -e WLPR;
function change_wallpaper
{
defaults write com.apple.desktop Background "{default = {ImageFilePath='$WLPR'; };}"; killall Dock
}
change_wallpaper

Sin embargo, no cambia el fondo del escritorio en mi segundo monitor en mi sistema basado en Lion para ninguno de mis escritorios controlados por misión. ¿Cómo se aplica uno anterior (o similar) a todos los monitores físicos? (Hacks como este poco atractivos).

Respuestas (4)

Tengo una Mac con dos monitores en el trabajo, así que podré probarla mañana (día libre hoy).

Creo que si tuvieras que comparar la salida de:

$ defaults read com.apple.desktop

Antes y después de haber cambiado manualmente el fondo de pantalla a través de:

Preferencias del sistema > Escritorio y protector de pantalla > Escritorio

Eso debería abrir una ventana en la segunda pantalla que le permita seleccionar la imagen requerida. Una vez que esté configurado y funcionando, compare la salida del comando original y vea si le da alguna pista. Haré lo mismo mañana y jugaré con él. A ver si no puedo darte una respuesta más completa.

Me temo que esta no es una respuesta completa, ya que aún no he encontrado una manera de hacer que esto funcione con múltiples escritorios, pero configurará el escritorio de todos los monitores en el espacio actual para cualquier imagen que especifique.

on run {input, parameters}
    set theFile to first item of input
    tell application "System Events"
        set theDesktops to a reference to every desktop
        repeat with aDesktop in theDesktops
            set the picture of aDesktop to theFile
        end repeat
    end tell
    return theFile
end run

Agregue eso a una acción Ejecutar AppleScript en un flujo de trabajo de Automator y guárdelo como una aplicación. Luego puede arrastrar y soltar una imagen en la aplicación y se establecerá como la imagen del escritorio.

Quizás alguien pueda encontrar una manera de hacer que esto funcione con múltiples espacios/escritorios.

En mi sistema (10.12) defaults read com.apple.desktopdioDomain com.apple.desktop does not exist

El siguiente enlace me da 2 ideas: https://derflounder.wordpress.com/2013/10/26/mavericks-desktop-background-picture-settings-moved-from-librarypreferencescom-apple-desktop-plist/

La primera idea: cambie el enlace de DefaultDesktop: por lo tanto, debe deshabilitar temporalmente System Integrity Protection( https://apple.stackexchange.com/a/214540/156148 ), para cambiar el enlace simbólico debajo/System/Library/CoreServices/DefaultDesktop.jpg

#! /bin/bash
if [ -z "$1" ]; then
    echo "Please specify an absolute path to an image as first parameter"
    exit -1
fi
mv /System/Library/CoreServices/DefaultDesktop.jpg /System/Library/CoreServices/DefaultDesktop.jpg.backup
ln -s $1 /System/Library/CoreServices/DefaultDesktop.jpg

La segunda idea:

#! /bin/bash
#script to change all desktop backgrounds
if [ -z "$1" ]; then
    echo "Please specify an absolute path to an image as first parameter"
    exit -1
fi

osascript -e "tell application \"System Events\" to set picture of every desktop to \"$1\""
killall Dock

Suspiro. Es realmente molesto que 4 años después todavía no tengamos una respuesta adecuada para esta pregunta. Tengo una secuencia de comandos de Automator que configura un escritorio con la imagen astronómica del día y noté que había cambiado la imagen por un escritorio diferente al que normalmente hacía. Acabo de probar algunas de las ideas de este hilo para cambiar todos los escritorios y, en cambio, cambió la imagen en un solo escritorio que ni siquiera era visible. Si escribo un script para mostrar la imagen actual de cada escritorio, me dice que se han configurado dos escritorios con la imagen elegida, aunque ninguno de los escritorios visibles haya cambiado.

Curiosamente, si pido los nombres de los escritorios, obtengo nombres de monitores que no son "Escritorio 1", "Escritorio 2", etc.

tell application "System Events"
    repeat with aDesktop in every desktop
        display dialog the name of aDesktop & ": " & the picture of aDesktop as string
    end repeat
end tell