通过命令行设置macOS wallpaper文件夹

时间:2018-01-30 00:46:59

标签: macos

macOS允许用户通过旋转文件夹as described in Apple Support中的图像来自动更改桌面背景。

我使用该功能旋转一个“壁纸”'每隔30分钟在iCloud中找到一个文件夹。我尝试设置命令从命令行进行此更改,但它当前将背景设置为macOS High Sierra中的默认图像。

sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '/Library/Mobile Documents/com~apple~CloudDocs/Wallpaper'" && killall Dock

任何提示都会非常感激!

2 个答案:

答案 0 :(得分:0)

我是通过Google到达这里的。您的答案几乎在那里,但是您正在尝试将墙纸图像设置为目录而不是图像文件。这是我用的

#!/bin/zsh
dir='~/Wallpapers'
file=$(ls -1 $dir/*.jpg  | shuf -n 1)
echo $file
sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '${file}'" && killall Dock

将此文件另存为名为rand-wallpaper.sh的文件,然后每30分钟执行一次cron作业。

您可以轻松地将其变成一个将目录作为命令行参数并在不同目录之间切换的shell函数。

因此,这将为您提供所需的效果,但是我不确定如何在实际的系统偏好设置中显示它,

答案 1 :(得分:0)

作为设置我的点文件的一部分,我希望它从我的图像集中随机选择一个墙纸。上面的解决方案似乎正是我所需要的,但是我遇到了一些问题。

  1. shuf在我的环境中不是可用的命令

  2. 在几个重要实例中,对我而言,操作desktoppicture.db数据库失败:

    • 最初,desktoppicture.db中的数据表不包含任何记录。这是新计算机或新安装的OS上的状态,其中显示默认背景。在这种情况下,由于没有先前的值要更新,因此调用“更新数据设置值”命令将失败。

    • 如果用户进入“系统偏好设置”中“桌面和屏幕保护程序”的“桌面”选项卡,并将文件夹添加到要查找墙纸图像的位置列表中,则该文件夹的路径将添加到数据中tablepicture.db中的表格。在这种情况下,调用'update data set value'命令成功,但并非按预期进行。这会导致Dock无法启动,可能是因为系统预期文件夹路径所在的位置现在有文件。幸运的是,删除desktoppicture.db文件可以使系统创建一个新文件。

    • 如果用户使用“桌面和屏幕保护程序”添加文件夹和选择墙纸,则数据表将以两行结尾,每个值一行。在这种情况下,“更新数据集值”会将两行更改为相同的新值。再次,对Dock的运行能力不利。

为解决这些问题,我进行了以下操作:

#!/usr/bin/env bash
walls="$HOME/projects/dot/wall"
wall=$(ls -1 "$walls" | sort --random-sort | head -1)
osascript -e 'tell application "Finder" to set desktop picture to POSIX file "'"$walls/$wall"'"'