Автоматически менять фон рабочего стола OS X для всех рабочих столов + мониторов?

Резюме . Автоматизация изменяет фон рабочего стола для всех (виртуальных) рабочих столов, но не для всех мониторов. Как это сделать для всех мониторов?

Детали .

В этой записи блога обсуждается, как автоматически изменить фон для всех (виртуальных / Mission Control / и т. д.) рабочих столов с помощью следующего сценария:

#! /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

Тем не менее, это не меняет фон рабочего стола на моем втором мониторе в моей системе на базе Lion ни для одного из моих рабочих столов, управляемых миссией. Как можно применить вышеуказанное (или подобное) ко всем физическим мониторам? ( Такие хаки непривлекательны.)

Ответы (4)

У меня на работе Mac с двумя мониторами, так что я смогу попробовать завтра (сегодня выходной).

Я думаю, если бы вы сравнили вывод:

$ defaults read com.apple.desktop

До и после смены обоев вручную через:

Системные настройки > Рабочий стол и заставка > Рабочий стол

Это должно вызвать окно на втором дисплее, позволяющее выбрать нужное изображение. После того, как это настроено и работает, сравните вывод исходной команды и посмотрите, даст ли она вам какие-либо подсказки. Я сделаю то же самое завтра и поиграюсь с этим. Посмотрим, не смогу ли я дать вам более полный ответ.

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

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

Добавьте это в действие « Выполнить AppleScript» в рабочем процессе Automator и сохраните его как приложение. Затем вы можете перетащить изображение в приложение, и оно будет установлено в качестве изображения рабочего стола.

Возможно, кто-то сможет найти способ заставить это работать с несколькими пространствами/рабочими столами.

В моей системе (10.12) defaults read com.apple.desktopвыдалDomain com.apple.desktop does not exist

Следующая ссылка дает мне 2 идеи: https://derflounder.wordpress.com/2013/10/26/mavericks-desktop-background-picture-settings-moved-from-librarypreferencescom-apple-desktop-plist/

Первая идея: изменить ссылку DefaultDesktop: поэтому вам нужно временно отключить System Integrity Protection( https://apple.stackexchange.com/a/214540/156148 ), чтобы изменить символическую ссылку под/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

2-я идея:

#! /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

Вздох. Очень досадно, что спустя 4 года у нас до сих пор нет правильного ответа на этот вопрос. У меня есть скрипт-автомат, который устанавливает рабочий стол на Астрономическую картинку дня, и я заметил, что он изменил изображение для другого рабочего стола, чем обычно. Я только что попробовал некоторые из идей в этой теме, чтобы изменить все рабочие столы, и вместо этого он изменил изображение на одном рабочем столе, который даже не был виден. Если я пишу сценарий для отображения текущего изображения каждого рабочего стола, он сообщает мне, что два рабочих стола были настроены на выбранное выбранное изображение, даже если ни один из видимых рабочих столов не изменился.

Интересно, что если я запрашиваю имена рабочих столов, я получаю имена мониторов, а не «Рабочий стол 1», «Рабочий стол 2» и т. Д.

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