在 macOS 14 Sonoma 中通过命令行设置 macOS 屏幕保护程序

在 macOS 14 Sonoma 中通过命令行设置 macOS 屏幕保护程序

在早期版本的 macOS 中,我可以使用如下命令从 shell 脚本设置屏幕保护程序:

defaults -currentHost write com.apple.screensaver moduleDict -dict moduleName Drift path /System/Library/Screen\\ Savers/Drift.saver type 0

然而,在 macOS 14 中,系统似乎仍然写道对该属性进行设置后,屏幕保护程序将不再受该属性的控制。您可以通过以下方式读取该属性

defaults -currentHost read com.apple.screensaver

但设置它不会改变所选的屏幕保护程序。

如何以编程方式控制在 macOS 14 Sonoma 中选择哪个屏幕保护程序?

答案1

killall cfprefsd在 Ventura 中,我在脚本中使用后更改了SelectedFolderPathcom.apple.ScreenSaverPhotoChooser,变化是立竿见影的。

但在 macOS 14 Sonoma 中,这还不够。如果我同时更新CustomFolderDict字典值,它最终会改变设置,尽管更改可能需要几分钟才能反映在正在运行的屏幕保护程序中。

打开系统设置到屏幕保护程序将显示正确的文件夹名称(并且我假设 UI 下方的正确路径),但预览的缓存可能会延迟,直到使用上述设置CustomFolderDict键刷新其他进程。

这是我用来调试行为的脚本,当 shell 位于要更改为的目录中时运行(pwd):

#!/usr/bin/env bash

# write the SelectedFolderPath key
/usr/bin/defaults -currentHost write com.apple.ScreenSaverPhotoChooser SelectedFolderPath "$(pwd)"

# write the new CustomFolderDict key
/usr/bin/defaults -currentHost write com.apple.ScreenSaverPhotoChooser CustomFolderDict -dict identifier "$(pwd)" name "$(pwd | perl -pe 's/.*\///gmi')"

# restart cfprefsd to pickup the change (required in ventura)
killall cfprefsd

# did we write what we expected to?
/usr/bin/defaults -currentHost read com.apple.ScreenSaverPhotoChooser

# launch screensaver to test
open /System/Library/CoreServices/ScreenSaverEngine.app --background

# did anything change after screensaver launched?
sleep 5
/usr/bin/defaults -currentHost read com.apple.ScreenSaverPhotoChooser

相关内容