从脚本更新Mac OS X桌面背景


3

我有一个shell脚本,由一个更新jpeg的cron作业运行。外部监视器上的桌面背景设置为同一个文件。但是,更新文件时,Mac OS X不会自动刷新桌面背景。

如何强制从脚本更新桌面背景?

Answers:


5

一种正确的方法(不使用别的东西来调用你的脚本)就是将以下行添加到你的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,当它重新启动(自动)将刷新您的桌面背景。缺点?您打开的应用程序停靠栏图标将重新排序(如果应用程序图标尚未保存在停靠栏中的位置),任何最小化的窗口都将最小化。所以如果你不使用这些功能,那很好。


24:113:执行错误:Finder出错:无法将“/ Library / Desktop Pictures / Beach.jpg”变成类型文件。(-1700)
iconoclast

@Brandon:不知道什么时候破了; 但如果你删除“POSIX路径”,它可以正常工作。相应地更新了答案。
Chealion

3

我之前对此的回答很糟糕,所以这里有一个更好的答案。

我使用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工作流程,无论如何。


1

这是我正在使用的最终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。

我正在使用System Events应用程序,因为Apple示例也是如此


0

我知道这并不完全回答你的问题,但这个供您阅读可能是有趣的。有人这样做的方式是使用重启Finder的AppleScript; 当Finder重新启动时,它会自动刷新背景图像; 似乎没有任何其他方式。


这是不可取的,让我所有的Finder窗户都被杀死是非常具有侵入性的。但信息链接。
p00ya

FWIW,Dock.app现在控制背景图片,而不是Finder,自10.3 IIRC起。
Chealion

0

不使用外部脚本就可以做到这一点....

首先,保持你的cron工作....

其次,创建一个文件夹,您的cron作业将放置一张照片/ jpg。此文件夹必须只包含一张照片/ jpg ..(多个文件会给你一个随机效果,见下文)。

第三,打开系统首选项 - >桌面和屏幕保护程序 - >桌面选项卡

第四,拖动或使用+将新文件夹添加到列表中。

第五,突出显示文件夹列表中的文件夹

第六,打开更改图片,然后选择一个时间范围。

你也可以运行一个Applescript重置图片,但这是我能看到的最明显和最简单的方式......


这是次优的(我必须将“更改图片”时段设置为远低于cronjob时段,以便在两者不同时获得及时更新)。也就是说,看起来它是最好的解决方案。
p00ya
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.