Основываясь на ответе dF. , вы можете сделать это с помощью Apple Script без Finder и вы можете сделать это для нескольких рабочих столов.
Чтобы установить обои для рабочего стола i
(номера рабочего стола начинаются с 1):
tell application "System Events"
set currDesktop to item i of desktop
set currDesktop's picture to "image_path"
end tell
Это то, что я закончил (в Python):
SET_DESKTOP_IMAGE_WRAPPER = """/usr/bin/osascript<<END
tell application "System Events"
{}
end tell
END"""
SET_DESKTOP_IMAGE = """
set currDesktop to item {idx} of desktops
set currDesktop's picture to "{image_path}"
"""
def set_wallpapers(images):
""" images is an array of file paths of desktops """
script_contents = ""
for i, img in enumerate(images):
idx = i+1
script_contents += SET_DESKTOP_IMAGE.format(idx=idx, image_path=img)
script = SET_DESKTOP_IMAGE_WRAPPER.format(script_contents)
subprocess.check_call(script, shell=True)
Иногда изображения на рабочем столе появляются не сразу. Я не знаю, почему это происходит, но перезапуск дока исправляет это.
Чтобы сделать это из Python:
subprocess.check_call("killall Dock", shell=True)
Кстати, вы можете узнать количество рабочих столов в системе, используя этот код AppleScript:
tell application "System Events"
get the number of desktops
end tell
вы можете использовать это с subprocess.check_output
, чтобы получить вывод