Как я могу обновить фоновый рисунок Mac OS X Mavericks из скрипта?
Обновите фон рабочего стола Mac OS X со скрипта, работавшего до OS X 10.8, но больше не работает. По умолчанию на рабочем столе установлен фон "Волна".
Как я могу обновить фоновый рисунок Mac OS X Mavericks из скрипта?
Обновите фон рабочего стола Mac OS X со скрипта, работавшего до OS X 10.8, но больше не работает. По умолчанию на рабочем столе установлен фон "Волна".
Документ, на который ссылается Ян-Ив, кажется уже поджаренным.
Я использую SQLite Database Browser 2.0 b1.app на Mavericks. Это немного старый, но все еще работает.
Если вы откроете файл ~/Library/Application Support/Dock/desktoppictures.db, вы сможете просмотреть важную таблицу "data". Это просто путь к тому, какой должна быть текущая картинка на рабочем столе. Однако может быть несколько строк в зависимости от того, сколько мониторов вы используете. По-видимому, вы можете установить различные картинки для рабочего стола на монитор, и я считаю, что это улучшение является частью Mavericks.
Вы можете вручную изменить ряд (ы) в вашем редакторе sqlite, а затем создать док-станцию killall, если вы не забыли сохранить изменения в редакторе. Это не так просто, как открыть системные префы, но я попробовал это просто для того, чтобы убедиться, как работает система. Вероятно, имеет смысл сделать резервную копию вашего .db файла перед ручным редактированием.
В любом случае, я использую пару небольших сценариев оболочки, чтобы изменить свой рабочий стол в качестве предупреждения, когда я изменял файл hosts.
Полный скрипт выглядит так:
#!/bin/sh
sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '/Users/user/Documents/My Pictures/dlanham_Phobos.sitechange.jpg'";
killall Dock;
Вы можете легко добавить аргумент, чтобы обеспечить больший контроль над изображением, но это основная логика.
Вы увидите, что некоторые сообщения рекомендуют дополнительный "where rowid = 1". Для моих целей я разрешаю замену рабочего стола для всех мониторов, поэтому я опускаю rowid. Это обновит несколько строк.
надеюсь это поможет.
Маверикс изменил место хранения фоновой информации на рабочем столе. Раньше он находился в ~/Library/Preferences/com.apple.desktop.plist
(в виде двоичного файла plist), а теперь он находится в ~/Library/Application Support/Dock/desktoppictures.db
(в виде файла SQLite). Если вы откроете его (я думаю, что sqlite3 входит в стандартную комплектацию OS X? В противном случае вы сможете найти приложение SQLite DB - я использую Base, но там может быть и лучше), вы заметите, что у вас есть имена фоновых файлов рабочего стола в таблице data
. Другие таблицы интересны, но немного более загадочны. Вы можете в основном выполнить запрос UPDATE для таблицы, чтобы изменить фон рабочего стола для данного пространства, например:
UPDATE data SET value=~/Pictures/foo.png WHERE ROWID=1
Я только сам разобрался с этим: немного больше деталей доступно здесь.
[ETA: фиксированная ссылка]
Я не мог заставить работать несколько устаревший скрипт, поэтому я переключился на PyObjc.
Используя python 2.7 из Macports с установленным пакетом py27-pyobjc-cocoa:
#!/opt/local/bin/python2.7
from AppKit import NSWorkspace, NSScreen
from Foundation import NSURL
def change_desktop_background(file, desk_id):
file_url = NSURL.fileURLWithPath_(file)
ws = NSWorkspace.sharedWorkspace()
screen = NSScreen.screens()[desk_id]
ws.setDesktopImageURL_forScreen_options_error_(file_url, screen, {}, None)
# Change my second screen desktop
change_desktop_background("myfile.jpg", 1)
Я пытался заставить это работать самостоятельно на osx Yosemite, и с помощью сочетания ответа @yelling_monster и старого скрипта bash, который раньше работал на горного льва, я сделал это:
#! /bin/bash
echo -n "Drag and drop an image file here and hit 'return' (or ctrl-c to cancel)
"
read -e WLPR;
function change_wallpaper
{
#!/bin/sh
sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '$WLPR'";
killall Dock;
}
change_wallpaper
Сделайте резервную копию вашего desktoppicture.db
с помощью простого
cp ~/Library/Application\ Support/Dock/desktoppicture.db{,-bkp}
Следуйте инструкциям на сайте, на который я ссылаюсь, чтобы сделать скрипт исполняемым (назовите его более приятным, как wpset
), и все готово .
После выполнения вы все равно можете индивидуально изменить фон монитора с помощью Desktop & screensaver
в системных настройках, это удобно для второго монитора (хотя старая картинка правой кнопкой мыши в контекстном меню finder -> services, похоже, ничего не делает)