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

标签 macos sqlite applescript osx-mavericks osx-yosemite

我正在尝试设置一个脚本来自动更改 Mac 上的所有桌面(空间)背景。我已经达到了 this answer让您可以通过

的快速脚本将所有桌面背景更改为图像
#!/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 数据库,当我更改“适合屏幕”时我可以看到某些事情发生了变化,但我不太清楚需要向脚本中添加什么才能获得所有内容桌面显示相同的图像,但适当缩放。

最佳答案

我今天自己偶然发现了这个问题,并做了一点逆向工程。所以实际上有 4 基本步骤可以完成您想要的事情:

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

    DELETE FROM data
    DELETE FROM displays;
    DELETE FROM pictures;
    DELETE FROM preferences;
    DELETE FROM prefs;
    DELETE FROM spaces;
    
  2. pictures 表添加一个空行。据我所知,这在某种程度上起到了后备作用,macOS 会根据我们现在定义的所有内容自动创建具有相应显示 ID 和空间 ID 的其他行。

    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)
    

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

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

    上面一行的意思是:使用 data 表 (→ 60) 的第 2 行作为第一张图片的 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

希望这可以帮助那些正在努力解决这个问题的人。

关于macos - 通过脚本更改 Mac 上所有桌面背景的缩放比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33533304/

相关文章:

objective-c - NSDocumentDirectory或NSBundle资源路径与Sqlite吗?

c# - 在 SQLIte 中使用哪种数据类型来存储 TimeTaken 字段?

javascript - Applescript : wait that the page is load on chrome

macos - OSX - 如何调试分布式构建?

ios - Xcode - 如何修复 'NSUnknownKeyException' ,原因 : … this class is not key value coding-compliant for the key X"error?

python - SQLite3 在一个 SELECT 语句中获取多列(python)

objective-c - 如何在 Mac OSX 中获取和/或覆盖窗口的最小大小

file - Applescript:从文件中读取文本

macos - 在新的 Visual Studio for Mac 中 - 可以创建 Windows 窗体应用程序吗?

macos - 无法在 OS X 10.10 上使用 Qt 框架签署应用程序包