通过脚本更改Mac上所有桌面背景的缩放

5

我正在尝试设置一个脚本,自动更改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;

然而,默认情况下是选中“填充屏幕”选项,我想要使用“适应屏幕”来显示整张图片(最好还能设置背景颜色)。我已经在尝试使用desktoppicture.db数据库进行调整,当我改变“适应屏幕”时可以看到某些东西也会发生变化,但我不能够找出需要添加到脚本中的内容,以便让所有桌面都以适当比例缩放显示同一张图片。
1个回答

6
我今天自己遇到了这个问题,并进行了一些反向工程。因此,实际上有4个关键步骤可以实现您想要的功能:
  1. Clear the entire database. (This is not mandatory but makes everything much easier)

    DELETE FROM data
    DELETE FROM displays;
    DELETE FROM pictures;
    DELETE FROM preferences;
    DELETE FROM prefs;
    DELETE FROM spaces;
    
  2. Add an empty row to the pictures table. As far as I understood it, this somehow works as a fallback and macOS automatically creates additional rows with according display IDs and space IDs based on everything we define now.

    INSERT INTO pictures (space_id, display_id) VALUES (null, null);
    
  3. Add your actual preferences to the data table.

    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. Now this is the most important part — the actual mapping of the data with the appropriate macOS internal preferences keys. This is what I found out so far:

    #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)
    

    So all you have to do is to match the IDs of the data rows with the keys listed above. For example

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

    The line above means: Use the 2nd row from the data table (→ 60) as the Image changing interval (#11) for the 1st picture (which in our case means all spaces/displays by default).


在我的情况下,我想要每隔一分钟更换壁纸,从一个特定文件夹中随机选择图片并启用适应屏幕功能和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

希望这能帮助那些在IT技术方面困惑的人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接