2015-11-04 7 views
4

Я пытаюсь настроить сценарий, который автоматически изменяет все фоны рабочего стола (пробелы) на Mac. Я получил, насколько this answer, что позволяет изменить все обои рабочего стола на изображение с помощью быстрого сценарияИзменение масштаба для всех фоновых рисунков рабочего стола на Mac с помощью скрипта

#!/bin/sh 
sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '/Users/user/Documents/My Pictures/dlanham_Phobos.sitechange.jpg'"; 
killall Dock; 

Однако, что по умолчанию опции «Fill Screen», и я хотел бы использовать «Fit to Screen», чтобы показать все изображение (и, возможно, также установите цвет фона).

Я играл с базой данных desktoppicture.db, и я вижу, что некоторые вещи меняются, когда я изменяю Fit to Screen, но я не могу полностью понять, что нужно добавить в скрипт, чтобы получить все рабочие столы показывают одно и то же изображение, но масштабируются соответствующим образом.

ответ

4

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

  1. Очистить всю базу данных. (Это не является обязательным, но делает все намного проще)

    DELETE FROM data 
    DELETE FROM displays; 
    DELETE FROM pictures; 
    DELETE FROM preferences; 
    DELETE FROM prefs; 
    DELETE FROM spaces; 
    
  2. Добавить пустую строку в таблице pictures. Насколько я понял, это как-то работает как резерв, а macOS автоматически создает дополнительные строки с соответствующими идентификаторами отображения и идентификаторами пространства на основе всего, что мы определяем сейчас.

    INSERT INTO pictures (space_id, display_id) VALUES (null, null); 
    
  3. Добавить фактические предпочтения в data таблице.

    INSERT INTO data (value) VALUES ('~/Pictures'); -- #10 
    INSERT INTO data (value) VALUES (60); -- #11 
    INSERT INTO data (value) VALUES (5); -- #2 
    INSERT INTO data (value) VALUES (0.07); -- #3, #4, #5 
    INSERT INTO data (value) VALUES ('current-wallpaper.jpg'); -- #16 
    INSERT INTO data (value) VALUES (1); -- #11/#12 
    
  4. Теперь это самая важная часть - фактическое отображение данных с соответствующими ключами Macos внутренние предпочтения. Это то, что я узнал, что до сих пор:

    #1: Image path 
    #2: Scaling method (Fill Screen (1), Center (3), Stretch to Fill Screen (4), Fit to Screen (5)) 
    #3: Fill color 
    #4: Fill color 
    #5: Fill color 
    #9: Enable automatic changing 
    #10: Directory path to images 
    #11: Image changing interval 
    #12: Random order 
    #16: Current image (used when automatic changing is enabled) 
    

    Так все, что вам нужно сделать, чтобы соответствовать идентификаторы строк данных с помощью клавиш, перечисленных выше. Например

    INSERT INTO preferences (key, data_id, picture_id) VALUES (11, 2, 1); 
    

    линия выше означает: использовать 2-ю строку из data таблицы (→ 60) в качестве Image changing interval (# 11) на 1-й картине (в нашем случае означает все пробелы/дисплеи по умолчанию) ,


В моем случае я хотел изменить обои каждую минуту к случайным изображений из определенной папки с размером экрана включен и 7% яркий черный фоном цвет. Я достиг этого с этой линией:

sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db " \ 
    DELETE FROM data; \ 
    DELETE FROM displays; \ 
    DELETE FROM pictures; \ 
    DELETE FROM preferences; \ 
    DELETE FROM prefs; \ 
    DELETE FROM spaces; \ 
    INSERT INTO pictures (space_id, display_id) VALUES (null, null); \ 
    INSERT INTO data (value) VALUES ('~/Pictures'); \ 
    INSERT INTO data (value) VALUES (60); \ 
    INSERT INTO data (value) VALUES (5); \ 
    INSERT INTO data (value) VALUES (0.07); \ 
    INSERT INTO data (value) VALUES ('198.png'); \ 
    INSERT INTO data (value) VALUES (1); \ 
    INSERT INTO preferences (key, data_id, picture_id) VALUES (2, 3, 1); \ 
    INSERT INTO preferences (key, data_id, picture_id) VALUES (3, 4, 1); \ 
    INSERT INTO preferences (key, data_id, picture_id) VALUES (4, 4, 1); \ 
    INSERT INTO preferences (key, data_id, picture_id) VALUES (5, 4, 1); \ 
    INSERT INTO preferences (key, data_id, picture_id) VALUES (9, 6, 1); \ 
    INSERT INTO preferences (key, data_id, picture_id) VALUES (10, 1, 1); \ 
    INSERT INTO preferences (key, data_id, picture_id) VALUES (11, 2, 1); \ 
    INSERT INTO preferences (key, data_id, picture_id) VALUES (12, 6, 1); \ 
    INSERT INTO preferences (key, data_id, picture_id) VALUES (16, 5, 1); \ 
" && killall Dock 

Надеюсь, это поможет любому, кто там борется.