He encontrado una manera de hacer que esto funcione con launchd. Esto requiere dos pasos: primero, crear una secuencia de comandos que descargue la imagen de la cámara web y, en segundo lugar, crear un archivo plist LaunchAgent que llame a la secuencia de comandos de vez en cuando.
Este método actualizará la imagen de fondo de un espacio específico, pero solo mientras esté en ese espacio (también, al iniciar sesión y tal vez al despertar de la suspensión).
Primer paso: crear un script que descargue la imagen y cambie el fondo del escritorio
- crea una carpeta, por ejemplo,
~/Library/Desktop Pictures/Webcam
.
- Seleccione esa carpeta para que sea su carpeta de fondos de escritorio en Preferencias del sistema → Destkop & Protector de pantalla.
-
Escriba un archivo de texto con el siguiente contenido:
#!/bin/bash
shopt -s extglob # required for fancy rm
# This script updates the desktop background of a specific Space to a webcam picture
# while you are currently on that space.
#
# Choose a webcam:
remotepic=http://www.foto-webcam.org/webcam/wallberg/current/full.jpg
# Choose a desktop backgrounds pictures folder of the Space where you want to see the webcam
# (you have to set this manually in System Preferences → Destkop & Screen Saver):
webcampicturefolder=~/Library/Desktop\ Pictures/Webcam
# check the desktop background pictures folder of the current Space
currentpicturefolder='osascript -e "tell application \"System Events\" to get pictures folder of current desktop"'
# only proceed if you are currently on the space where you want to see the webcam
if [ "$currentpicturefolder" == "$webcampicturefolder" ] ; then
localpic="$webcampicturefolder"/$(date +%Y%m%dT%H%M%S).jpg
backup="$webcampicturefolder"/backup.jpg
#remove all but the previous backup file and txt files:
rm "$webcampicturefolder"/!(*txt|'basename "$backup"') 2>>/dev/null
# get the new picture unless there is a connection failure (-f flag):
curl -fs -o "$localpic" "$remotepic"
# make a backup of the new picture:
cp "$localpic" "$backup" 2>>/dev/null
# if no new picture has been downloaded, copy from backup:
cp "$backup" "$localpic"
# see http://www.macosxautomation.com/applescript/features/system-prefs.html
osascript -e "
tell application \"System Events\"
tell current desktop
set picture rotation to 0
set picture to POSIX file \"$localpic\"
end tell
end tell
"
fi
-
Guarda el archivo, por ejemplo, como ~/Library/Desktop Pictures/Webcam/getwebcam.sh
-
Hazlo ejecutable emitiendo el siguiente comando en la Terminal:
chmod u+x ~/Library/Desktop Pictures/Webcam/getwebcam.sh
Segundo paso: crear una lista de LaunchAgent que llame al script
-
Escriba un archivo de texto con el siguiente contenido. Debe adaptar la cadena /Users/myusername/Library/Desktop Pictures/Webcam/getwebcam.sh
para que apunte al script creado en el primer paso. No puedes usar una ruta relativa con ~
. Cambie los elementos de dictado con la tecla "Minuto" como mejor le parezca, puede agregar más. El número entero determina a qué minuto de cada hora se llamará el script (vea también man launchd.plist
en su Terminal).
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>me.myname.update-desktop-from-webcam</string>
<key>ProgramArguments</key>
<array>
<string>/Users/myusername/Library/Desktop Pictures/Webcam/getwebcam.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Minute</key>
<integer>01</integer>
</dict>
<dict>
<key>Minute</key>
<integer>16</integer>
</dict>
<dict>
<key>Minute</key>
<integer>31</integer>
</dict>
<dict>
<key>Minute</key>
<integer>46</integer>
</dict>
</array>
</dict>
</plist>
-
Guarde el archivo de texto en ~/Library/LaunchAgents/me.myname.update-desktop-from-webcam.plist
; el nombre debe coincidir con la tecla "Etiqueta" del archivo.
-
Cárguelo emitiendo el siguiente comando:
launchctl load ~/Library/LaunchAgents/me.myname.update-desktop-from-webcam.plist