Automated screensaver configuration in command line/shell script

bashcommand linelaunchdscreensaverterminal

So I'm configuring some Default User Template LaunchAgents to configure a default screensaver for some of my company's most popular fan art. (It's actually been really well received by the team). They're designed as first-run images when they log into their forced-Local Active Directory users.

However, I'm getting very inconsistent results now…namely it's not working at all.

The .plist launches a Shell Script located in the /sbin/ folder. The odd thing is that it mostly works in an existing user.

The screensaver is meant to use "Flipup" with a specific folder of images, shuffle the pictures and set a start time of 5 minutes.

For example, I intentionally set my "default configuration user" screensaver first to the "Holiday Mobile," set the picture selection to "Cosmos" (one of the defaults) with a start time of 20 minutes and unchecked "shuffle images." Then I changed it to "Arabesque."

When I logged out and logged back in to kick in the script, the result was me getting "Holiday Mobile." However, when I went to "Desktop and Screensaver Settings," "Arabesque" was actually selected though the "Holiday Mobile" preview was showing with a grayed out "Screen Saver Options" below. (However, the start time did change to 5 minutes and when I did click on "Holiday Mobile," "Shuffle Slide Order" was checked properly.)

So in the test user, it's goes to Fan Art, activating Shuffle and changing the time.

But when I create a new user after adding the LaunchAgent .plist to the Default User Template, I get nothing but the standard "Computer Name" screensaver on a black background.

I am totally confused on why this is occurring. Any suggestions?

Here's the shell script:

“`

#!/bin/sh

## Set Screensaver to Photo Slideshow
/usr/bin/defaults -currentHost write com.apple.screensaver 'CleanExit' -string "YES"
/usr/bin/defaults -currentHost write com.apple.screensaver 'PrefsVersion' -int "100"
/usr/bin/defaults -currentHost write com.apple.screensaver 'idleTime' -int "300"
/usr/bin/defaults -currentHost write com.apple.screensaver "moduleDict" -dict-add "path" -string "/System/Library/Frameworks/ScreenSaver.framework/Resources/iLifeSlideshows.saver"
/usr/bin/defaults -currentHost write com.apple.screensaver "moduleDict" -dict-add "type" -int "0" 
/usr/bin/defaults -currentHost write com.apple.screensaver 'ShowClock' -bool "false"
/usr/bin/defaults -currentHost write com.apple.screensaver 'tokenRemovalAction' -int "0"

## Set Type of Slideshow to "Flipup" (Results inconsistent)
/usr/bin/defaults -currentHost write com.apple.ScreenSaver.iLifeSlideshows 'styleKey' -string "Flipup" 

## Set location of photos to Fan Art 
/usr/bin/defaults -currentHost write com.apple.ScreenSaverPhotoChooser 'SelectedSource' -int "4"
/usr/bin/defaults -currentHost write com.apple.ScreenSaverPhotoChooser 'SelectedFolderPath' "/Manehattan Files/Manehattan Backgrounds/Fan Art"
/usr/bin/defaults -currentHost write com.apple.ScreenSaverPhotoChooser 'ShufflesPhotos' -bool "true"

## Removes the .plist LaunchAgent from inside the User Launch Agent Folder. 
rm -f ~/Library/LaunchAgents/set-screensaver.plist

exit

“`

Best Answer

So through JAMF, a very wise man showed me a very simple thing I needed to add to the end of my script:

killall cfprefsd

Solved the problem entirely. While if you go into System Preferences, it still shows the old screensaver being selected, it works.