¿Por qué mi script de launchd no se ejecuta al iniciar sesión?

2

He intentado seguir esta pregunta para que al iniciar sesión, el protector de pantalla configurado actualmente se convierta en el fondo del escritorio. Por lo tanto, he creado el siguiente script:

# login.sh
/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background &

Luego he creado un servicio de lanzamiento como ~/Library/LaunchAgents/my_login_items.plist con el contenido

<?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>com.user.loginscript</string>
   <key>Program</key>
   <string>/path/to/login.sh</string>
   <key>RunAtLoad</key>
   <true/>
</dict>
</plist>

Y luego ejecuta launchctl load ~/Library/LaunchAgents/my_login_items.plist . Sin embargo, no pasa nada.

    
pregunta oarfish 17.01.2017 - 10:53

1 respuesta

1

Esta es una respuesta muy insatisfactoria, pero funcionó ejecutando /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background & en una subshell. Cambié login.sh a ...

#!/bin/bash
longname=$0
shortname=$(basename "${longname}")
echo "$(date -u "+%Y-%m-%d %H:%M:%S") ${shortname} (${longname}) running..."
output=$(/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background)    # <- COMMAND GOES HERE            
echo "$(date -u "+%Y-%m-%d %H:%M:%S") ${shortname} ended."

... y eso funciona (mis cambios de escritorio estáticos habituales en mi protector de pantalla predeterminado). Utilizo este lenguaje para otras tareas de inicio, ejecutando las tareas en una subshell para poder probar fácilmente si la operación se realizó correctamente y registrar $output . No entiendo por qué funciona esto mientras que tu original no lo hace, pero al menos funciona.

Tenga en cuenta que eliminé el & del final de su comando; no estoy convencido de que sea necesario con launchd , e impidió que mi script de reinicio registrara que había finalizado (aunque el & no fue la causa del problema original).

    
respondido por el John N 17.01.2017 - 12:00

Lea otras preguntas en las etiquetas