I wrote a simple command line tool which can read and set the desktop picture. Neil Martin had the brilliant idea to call it
You can read the current desktop picture with:
$ desktoppr /Library/Desktop Pictures/Sierra.jpg
and set the desktop picture with
$ desktoppr "/Library/Desktop Pictures/BoringBlueDesktop.png"
When you have multiple displays,
desktoppr will list all desktop pictures:
$ desktoppr /Library/Desktop Pictures/HotStepper.jpg /Library/Desktop Pictures/LyricalGangster.jpg /Library/Desktop Pictures/MrOfficer.jpg
When you pass a file
desktoppr will set it as the desktop picture for all screens:
$ desktoppr /Library/Desktop Pictures/NaahNananah.jpg $ desktoppr /Library/Desktop Pictures/NaahNananah.jpg /Library/Desktop Pictures/NaahNananah.jpg /Library/Desktop Pictures/NaahNananah.jpg
You can also set the desktop for a specific screen: (index starts at zero)
$ desktoppr 0 /Library/Desktop Pictures/HotStepper.jpg $ desktoppr 1 /Library/Desktop Pictures/LyricalGangster.jpg $ desktoppr 2 /Library/Desktop Pictures/MrOfficer.jpg
You can get the code for
desktoppr on my Github page and an installer here. The installer pkg will install the tool in
/usr/local/bin. Alternatively, a brew casks exists, so you could install it using
brew cask install desktoppr if you have Homebrew installed.
When you want to run it from a management script it is safest to include the entire path:
/usr/local/bin/desktoppr "/Library/Desktop Pictures/BoringBlueDesktop.png"
desktoppr tool also sets user preferences, you still need to pay attention that it runs as the user. A LaunchAgent or a solution like
outset is a good choice to manage this. Alternatively, you can run the command as the current user from a root script.
The tool requires the Swift 5 Runtime support for command line tools when you install it on versions of macOS older than 10.14.4.
I have written a few blog posts that describe different use strategies for setting a desktop picture: