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

Eth*_* K. 5 sqlite macos applescript osx-mavericks osx-yosemite

我正在尝试设置一个自动更改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;
Run Code Online (Sandbox Code Playgroud)

但是,默认为"填充屏幕"选项,我想使用"适合屏幕"来显示整个图像(并且最好也设置背景颜色).

我一直在使用desktoppicture.db数据库,当我更改Fit to Screen时,我可以看到某些事情发生了变化,但是我无法确定需要添加到脚本中的内容以使所有桌面都显示出来相同的图像,但适当缩放.

mzd*_*zdr 5

我今天偶然发现了这个问题并进行了一些逆向工程.所以实际上有4个基本步骤可以完成你想要的东西:

  1. 清除整个数据库.(这不是强制性的,但使一切变得更容易)

    DELETE FROM data
    DELETE FROM displays;
    DELETE FROM pictures;
    DELETE FROM preferences;
    DELETE FROM prefs;
    DELETE FROM spaces;
    
    Run Code Online (Sandbox Code Playgroud)
  2. pictures表中添加一个空行.据我所知,这可以作为后备工作,macOS根据我们现在定义的所有内容自动创建具有相应显示ID和空间ID的其他行.

    INSERT INTO pictures (space_id, display_id) VALUES (null, null);
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  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)
    
    Run Code Online (Sandbox Code Playgroud)

    因此,您所要做的就是将数据行的ID与上面列出的键相匹配.例如

    INSERT INTO preferences (key, data_id, picture_id) VALUES (11, 2, 1);
    
    Run Code Online (Sandbox Code Playgroud)

    上面的行表示:使用data表格中的第二行(→60)作为Image changing interval第一张图片的(#11)(在我们的例子中,默认情况下表示所有空格/显示).


在我的情况,我想改变墙纸每分钟随机图像从一个特定的文件夹适合屏幕启用和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
Run Code Online (Sandbox Code Playgroud)

希望这有助于任何人在那里挣扎.