5

Как я могу обновить фоновый рисунок Mac OS X Mavericks из скрипта?

Обновите фон рабочего стола Mac OS X со скрипта, работавшего до OS X 10.8, но больше не работает. По умолчанию на рабочем столе установлен фон "Волна".

4 ответа4

6

Документ, на который ссылается Ян-Ив, кажется уже поджаренным.

Я использую 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. Это обновит несколько строк.

надеюсь это поможет.

3

Маверикс изменил место хранения фоновой информации на рабочем столе. Раньше он находился в ~/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: фиксированная ссылка]

0

Я не мог заставить работать несколько устаревший скрипт, поэтому я переключился на 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)
0

Я пытался заставить это работать самостоятельно на 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, похоже, ничего не делает)

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