Оновіть фон робочого столу Mac OS X зі сценарію


3

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

Як змусити оновити фон робочого столу зі сценарію?

Відповіді:


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

Це вб'є Док, який при перезапуску (автоматично) оновить фон робочого столу. Недоліки? Ваші піктограми відкритих доків додатків будуть перезаписані (якщо піктограми додатків уже не збережені у вашому док-станції), і будь-які мінімізовані вікна не знімуть їх. Тож якщо ви не використовуєте ці функції, це добре.


24: 113: помилка виконання: Finder отримав помилку: Не вдається створити "/ Library / Desktop Pictures / Beach.jpg" у файл типу. (-1700)
іконоборство

@Brandon: Не впевнений, коли це зламалося; але якщо ви видалите "POSIX шлях", він працює правильно. Відповідно оновив відповідь.
Chealion

3

Моя попередня відповідь на це засмагла, тож ось краща.

Для цього використовую скрипт оболонки та робочий процес Automator. Сценарій оболонки завантажує потрібне зображення, зберігає його десь і повторює повний шлях до зображення (це важлива частина). Тоді робочий процес Automator виглядає приблизно так:

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

Наскільки я можу сказати, що "Налаштуйте малюнок робочого столу", це було зроблено разом із Automator.

Тоді у мене є запис із кронтабом, який виглядає приблизно так:

* 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з сценарію оболонки (власне рубіну), який оновлює jpeg.

Раніше обговорене питання про те, що фон не оновлюється, якщо новий шлях такий, як поточний шлях (який досі був проблемою у відповіді Чеаліона), зламався, тимчасово перейшовши на "empty.jpeg". Це дратує, оскільки перехід ривковий, але б'є перезапуск Finder / Dock.

Я використовую додаток System Events, тому що це теж приклади Apple .


0

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


це небажано, тому що вбиті всі мої вікна Finder є досить нав'язливим. Однак інформаційне посилання.
p00ya

FWIW, Dock.app контролює фонове зображення зараз, а не Finder і має з 10.3 IIRC.
Chealion

0

Це зробити досить просто, не використовуючи зовнішній скрипт ....

По-перше, збережіть роботу з крон ....

По-друге, Створіть папку, у яку ваш cron завдання розмістить одну фотографію / jpg. Ця папка повинна містити лише одну фотографію / jpg .. (Кілька файлів дають вам випадковий ефект, див. Нижче).

По-третє, відкрийте Налаштування системи -> Заставка робочого столу та заставки -> вкладка Робочий стіл

По-четверте, або перетягніть або використовуйте +, щоб додати нову папку до свого списку.

По-п’яте, виділіть папку в списку папок

По-шосте, увімкніть Змінити малюнок і виберіть часові рамки.

Ви також можете запустити Applescript, щоб скинути зображення, але це найбільш очевидний і спрощений спосіб, який я бачу, щоб зробити це ...


Це субоптимально (я повинен встановити період "зміни картини" значно менший, ніж період кроніова, щоб отримати своєчасні оновлення, коли двоє перебувають у фазі). Однак, схоже, це найкраще рішення.
p00ya
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.