我今天自己偶然发现了这个问题,并做了一些逆向工程。所以实际上有 4 个基本步骤可以完成您想要的事情:
-
清除整个数据库。 (这不是强制性的,但会让一切变得更容易)
DELETE FROM data
DELETE FROM displays;
DELETE FROM pictures;
DELETE FROM preferences;
DELETE FROM prefs;
DELETE FROM spaces;
-
在pictures 表中添加一个空行。据我了解,这以某种方式作为后备工作,macOS 会根据我们现在定义的所有内容自动创建具有相应显示 ID 和空间 ID 的附加行。
INSERT INTO pictures (space_id, display_id) VALUES (null, null);
-
将您的实际偏好添加到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
-
现在这是最重要的部分——数据与适当的 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)
因此,您所要做的就是将数据行的 ID 与上面列出的键匹配。例如
INSERT INTO preferences (key, data_id, picture_id) VALUES (11, 2, 1);
上面的行表示:使用data 表中的第二行 (→ 60) 作为第一张图片的Image changing interval (#11)(在我们的例子中,默认情况下表示所有空格/显示)。
在我的情况下,我想将壁纸 每分钟 更改为 特定文件夹 中的 随机 图像,并带有 Fit to Screen 启用和 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
希望这可以帮助那些在这方面苦苦挣扎的人。