如何使用终端命令更改桌面背景?


19

我试图向OS X配置脚本中添加一个将背景设置为纯深灰色的命令,但是,在应用时,它仅将其设置为主监视器,并且当前连接的所有其他监视器都保持其当前背景,并且此后添加的任何监视器仍接收默认的空间背景。到目前为止,我所拥有的如下:

# Change Desktop default BackgroundColor to grey
defaults write com.apple.desktop '{ Background = { default = {BackgroundColor = ( "0.2549019753932953", "0.4117647111415863", "0.6666666865348816" ); Change = Never; ChangePath = "/Library/Desktop Pictures/Solid Colors"; ChangeTime = 1800; DrawBackgroundColor = 1; ImageFileAlias = <00000000 00ce0003 00000000 c73804cd 0000482b 00000000 000c2624 000c2633 0000ca1c 0a310000 00000920 fffe0000 00000000 0000ffff ffff0001 000c000c 2624000c 25fc000a 0789000e 00280013 0053006f 006c0069 00640020 00470072 00610079 00200044 00610072 006b002e 0070006e 0067000f 000c0005 006f0073 00780038 00360012 00394c69 62726172 792f4465 736b746f 70205069 63747572 65732f53 6f6c6964 20436f6c 6f72732f 536f6c69 64204772 61792044 61726b2e 706e6700 00130001 2f00ffff 0000>; ImageFilePath = "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"; NewChangePath = "/Library/Desktop Pictures/Solid Colors"; NewImageFilePath = "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"; NoImage = 0; Placement = Crop; Random = 0; }; }; }'

如何通过终端命令将默认背景设置为深灰色背景?如何通过终端命令将所有已配置为灰色的监视器更改为灰色?


这是一组非常有用的命令!我也喜欢您的.aliases。谢谢!
binarybob 2012年

我无法承担所有功劳,我是从mathiasbynens派生的,但是确实添加了键盘,鼠标和非工作背景设置。
rudolph9'2

哦,我的鼠标跟踪速度设置得比系统偏好设置要高:()那让我尖叫,因为它跟踪速度很快。
rudolph9'2

Answers:


22

这些其他解决方案均无法在Mavericks上使用,因为Apple将设置移至了sqlite DB。但这没关系,因为现在更容易了,png可以在文件系统中的任何位置,并且所有桌面(甚至虚拟桌面)都已更新。

 #!/usr/bin/env bash
 sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '/path/to/any/picture.png'";
 killall Dock;

或者,将其作为函数添加到〜/ .bash_profile中,并使用任何非相对路径将其作为终端命令调用。

#   Update all Wallpapers
function wallpaper() {
    sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '$1'" && killall Dock 
}

wallpaper ~/path/to/any/picture.png


这是当前唯一可行的方法。
saruftw

2
@jeremyjjbrown:谢谢你的回答!不幸的是,这在macOS Sierra中不再起作用。。是否有想法让Apple现在可以保存要用作墙纸的图片?
本杰明·赫尔佐格

您知道如何使它居中/平铺/适合屏幕等吗?
BSUK

@BenjaminHerzog Sanghyun Lee的答案仍然有效(在Mojave上),仅从GitHub来源构建,而不是brew:apple.stackexchange.com/a/273628/1195
Mint

15

这应该为您工作:

osascript
tell application "Finder"
set desktop picture to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"
end tell

此Mac Rumors线程上还有其他几种方法,但是他的方法是最简单的。


你得到这个让自己工作了吗?它对我不起作用。
rudolph9'2

1
给了我./a.scpt:31:46: execution error: Finder got an error: Can’t set file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png" to file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png". (-10006)
rudolph9

再次尝试了另一种颜色,以查看它是否与已经设置为深灰色的桌面有关,并获得了./a.scpt:31:46: execution error: Finder got an error: Can’t set file "/Library/Desktop Pictures/Solid Colors/Solid Gray Medium.png" to file "/Library/Desktop Pictures/Solid Colors/Solid Gray Medium.png". (-10006)
rudolph9 2012年

@KurtRudolph尝试在AppleScript编辑器中运行它。它在那里工作吗?我没有尝试过,但我相信我曾经有过。
daviesgeek'2

根据@faraz的回答,您似乎需要通过在文件关键字之前包含POSIX关键字来告诉Apple Script您正在提供POSIX路径,例如tell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"
Jason Musgrove 2014年

12

在一行中完成此操作的最简单方法:

osascript -e 'tell application "Finder" to set desktop picture to POSIX file "/Library/Desktop Pictures/Earth Horizon.jpg"'

osascript只有在我killall Dock以后跑步时,使用方法才对我有用。有人注意到吗?
Quinn Comendant 2015年

2

如果您喜欢安装新的应用程序而不是创建新的功能,则应该使用m-cli。它易于使用,并且如果需要,它还具有许多其他有用的功能。

brew install m-cli 
m wallpaper ./wallpapers/tree.jpg

m-cli自动检测操作系统的版本,在内部使用bash脚本执行与其他正确答案相同的操作


谢谢!!这个在macOS Mojave上为我工作(尽管您需要从Github来源获取m-cli,因为brew版本从2017年开始过时)
Mint

1

需要使用POSIX filefor /posix/pathsas aliaswith 正确引用路径Old:Mac:Style:Paths

选择你的毒药...

POSIX路径:

set desktopImage to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Dark.png"
tell application "Finder"
    set desktop picture to desktopImage
end tell

Mac路径:

set localLibrary to path to library folder from local domain as string
set desktopImage to localLibrary & "Desktop Pictures:Solid Colors:Solid Gray Dark.png" as alias

tell application "Finder"
    set desktop picture to desktopImage
end tell

您可以使用osascript [-e statement]以下命令轻松地将上述任何Applescript转换为终端命令:

osascript -e 'set desktopImage to POSIX file "/Library/Desktop Pictures/Solid Colors/Solid Gray Light.png"
tell application "Finder"
    set desktop picture to desktopImage
end tell'

要设置多个桌面,您可以尝试类似tell application "System Events" to set picture of every desktop to "<path>"。不幸的是,这似乎在10.7中已被打破,因此您最终将收到以下错误:Expected class name but found application constant or consideration.


1

结合jeremyjjbrown的回答willurd的Gist,El Capitan 上班最方便的方法如下:

  1. 打开Automator(在“应用程序”中)并创建一个新服务
  2. 设置Service receives selectedimage files工作流程的顶部。您可以选择将其限制为仅在Finder中工作。

样本图片1

  1. Run Shell Script向工作流程添加操作
  2. 清空默认脚本,然后将jeremyjjbrown的答案的稍作修改的版本插入编辑器:

    read -e IMAGE;
    sqlite3 ~/Library/Application\ Support/Dock/desktoppicture.db "update data set value = '$IMAGE'";
    killall Dock;
    
  3. 例如,使用您选择的名称保存服务Set Desktop Picture on all Spaces

现在,您可以直接从Finder右键单击任何图像,然后从上下文菜单中选择服务,轻松为所有桌面设置背景。


0

一个Perl脚本可以完成相同的工作:

#!/usr/bin/perl
use Cwd;

if ($#ARGV != 1) {
    die "\nUsage: ./changedesktop <filename> <startup disk> \nwhere <filename> may be    any JPEG, PNG, GIF, TIFF or PSD and <startup disk> is the name of your boot volume.\n\n";
}

my $filename = $ARGV[0];
my $bootdisk = $ARGV[1];
my $directory = getcwd;
my $file = $bootdisk.$directory."/".$filename;
$file =~ tr/\//:/;
system("osascript -e \'tell application \"Finder\"\' -e \'set theFile to \"$file\"\' -   e     \'set desktop picture to \(theFile as alias\)\' -e \'end tell'");

3
否,这是一个perl脚本,它执行运行与第一篇文章相同的操作的osascript,并输入一堆不必要的perl代码,以输入要设置为背景的图像文件。
rudolph9'2

0

提到的解决方案都没有在macOS 10.14.2 Sierra上对我有用,最终我得到了这个AppleScript:

tell application "System Events"
    tell every desktop
        set picture to "path_to_wallpaper.jpg"
    end tell
end tell

它可以从这样的终端运行:

osascript path_to_applescript_file.scpt

或作为一个单行:

osascript -e 'tell application "System Events" to tell every desktop to set picture to "path_to_wallpaper.jpg"'
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.