3

У меня есть сценарий оболочки, который запускается заданием cron, которое обновляет JPEG. Фон рабочего стола на моем внешнем мониторе настроен на этот же файл. Однако Mac OS X не обновляет автоматически фон рабочего стола при обновлении файла.

Как заставить фон рабочего стола обновляться из скрипта?

5 ответов5

5

Правильный способ (без использования чего-либо еще для вызова вашего скрипта) - добавить следующую строку в ваш скрипт:

osascript -e 'tell Application "Finder"' -e 'set the desktop picture to {"NAME OF STARTUP DRIVE:PATH:TO:PICTURE.jpg"} as alias' -e 'end tell'

Примечание: путь использует двоеточия вместо /, и вы должны назвать жесткий диск.

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

killall Dock

Это убьет Dock, который при перезагрузке (автоматически) обновит фон вашего рабочего стола. Недостатки? Значки открытых док-приложений вашего приложения будут переупорядочены (если значки приложений еще не сохранили позицию в вашей док-станции), а все свернутые окна будут свернуты. Так что, если вы не используете эти функции, это нормально.

3

Мой предыдущий ответ на этот отстой, так что вот лучший.

Для этого я использую сценарий оболочки и рабочий процесс Automator. Сценарий оболочки загружает изображение, которое я хочу, сохраняет его где-то и отображает полный путь к изображению (это важная часть). Рабочий процесс Automator выглядит примерно так:

[run shell script ~/bin/getAPOD.sh] -> [Set the Desktop Picture]

Это действие "Установить изображение на рабочем столе", насколько я могу судить, пришло с Automator.

Затем у меня есть запись в crontab, которая выглядит так:

* 4 * * * /usr/bin/open /Users/myuser/bin/APODset.app

Если вы хотите, я могу опубликовать сценарий, рабочий процесс Automator, что угодно.

1

Вот последний яблочный скрипт, который я использую:

tell application "System Events"
    set myfolder to folder "foo" of the pictures folder
    tell desktop 2 to set picture to file "empty.jpeg" of myfolder as alias
    tell desktop 2 to set picture to file "bar.jpeg" of myfolder as alias
end tell

Это передается osascript из сценария оболочки (фактически ruby), который обновляет jpeg.

Обсуждаемая ранее проблема с фоном, который не обновляется, если новый путь совпадает с текущим путем (который все еще был проблемой с ответом Chealion), может быть взломан путем временного переключения на «empty.jpeg». Это раздражает, так как переход прерывистый, но это лучше, чем перезапуск Finder/Dock.

Я использую приложение System Events, потому что примеры Apple тоже.

0

Это довольно просто сделать без использования внешнего скрипта ....

Во-первых, продолжай работать.

Во-вторых, создайте папку, в которую ваша работа cron поместит одну фотографию /jpg. Эта папка должна содержать только одну фотографию / JPG .. (Несколько файлов дадут вам случайный эффект, см. Ниже).

В-третьих, откройте «Системные настройки» -> «Рабочий стол и заставка» -> вкладка «Рабочий стол».

В-четвертых, перетащите или используйте +, чтобы добавить новую папку в список.

В-пятых, выделите папку в списке папок.

В-шестых, включите «Изменить картинку» и выберите временные рамки.

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

0

Я знаю, что это не отвечает на ваш вопрос полностью, но это может быть интересно для вас, чтобы прочитать. То, как кто-то сделал это, использовало AppleScript, который перезапустил Finder; когда Finder перезагружается, он автоматически обновляет фоновое изображение; кажется, нет другого пути.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .