我有一个由 cron 作业运行的 shell 脚本,用于更新 jpeg。我的外接显示器上的桌面背景设置为同一个文件。但是,当文件更新时,Mac OS X 不会自动刷新桌面背景。
如何强制从脚本更新桌面背景?
答案1
一个正确的方法(不使用其他东西来调用你的脚本)是将以下行添加到你的 shell 脚本中:
osascript -e 'tell Application "Finder"' -e 'set the desktop picture to {"NAME OF STARTUP DRIVE:PATH:TO:PICTURE.jpg"} as alias' -e 'end tell'
注意:路径使用冒号而不是 /,并且您必须命名硬盘。
一个非常奇怪的替代方法,更让人发笑,是一个巨大的临时解决办法,就是将以下行添加到由 cron 运行的 shell 脚本中:
killall Dock
这将关闭 Dock,当它(自动)重新启动时,它将刷新您的桌面背景。缺点是什么?您打开的应用程序 Dock 图标将重新排序(如果应用程序图标尚未保存在 Dock 中的位置),并且任何最小化的窗口都将取消最小化。所以如果您不使用这些功能,也没关系。
答案2
我之前的回答很糟糕,所以这是一个更好的答案。
我使用 shell 脚本和 Automator 工作流程来执行此操作。shell 脚本下载我想要的图像,将其保存在某个地方,然后回显图像的完整路径(这是重点部分)。Automator 的工作流程如下所示:
[run shell script ~/bin/getAPOD.sh] -> [Set the Desktop Picture]
据我所知,“设置桌面图片”操作是由 Automator 提供的。
然后我有一个如下所示的 crontab 条目:
* 4 * * * /usr/bin/open /Users/myuser/bin/APODset.app
如果您愿意,我可以发布脚本、Automator 工作流程等等。
答案3
这是我正在使用的最终的 applescript:
tell application "System Events"
set myfolder to folder "foo" of the pictures folder
tell desktop 2 to set picture to file "empty.jpeg" of myfolder as alias
tell desktop 2 to set picture to file "bar.jpeg" of myfolder as alias
end tell
osascript
这是从更新 jpeg 的 shell(实际上是 ruby)脚本传递的。
之前讨论过,如果新路径与当前路径相同,背景不会更新的问题(这在 Chealion 的答案中仍然是一个问题),可以通过暂时切换到“empty.jpeg”来解决。这很烦人,因为转换很不顺畅,但比必须重新启动 Finder/Dock 要好。
我使用系统事件应用程序是因为苹果的例子也是如此。
答案4
无需使用外部脚本即可轻松完成此操作......
首先,保留你的 cron 工作....
其次,创建一个文件夹,您的 cron 作业将在其中放置一张照片/jpg。此文件夹必须只包含一张照片/jpg。(多个文件将给您带来随机效果,见下文)。
第三,打开系统偏好设置->桌面和屏幕保护程序->桌面选项卡
第四,拖动或使用 + 将新文件夹添加到列表中。
五、在文件夹列表中高亮显示文件夹
第六,打开更改图片,选择一个时间范围。
您也可以运行 Applescript 来重置图片,但这是我能看到的最明显、最简单的方法……