2 votes

Pourquoi mon launchd script ne s'exécute-t-il pas à la connexion ?

J'ai essayé de suivre cette question afin qu'à l'ouverture de session, l'économiseur d'écran actuellement configuré devienne l'arrière-plan du bureau. J'ai donc créé le script suivant :

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

J'ai ensuite créé un service de lancement en tant que ~/Library/LaunchAgents/my_login_items.plist avec le contenu

<?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>

Et ensuite, lancez launchctl load ~/Library/LaunchAgents/my_login_items.plist . Mais rien ne se passe.

3voto

John N Points 1418

Cette réponse est profondément insatisfaisante, mais j'ai réussi à la faire fonctionner en exécutant la commande suivante /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background & dans une sous-coquille. J'ai modifié login.sh à...

#!/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."

...et cela fonctionne (mon bureau statique habituel se transforme en économiseur d'écran par défaut). J'utilise cet idiome pour d'autres tâches launchd, en exécutant les tâches dans un sous-shell afin de pouvoir facilement tester si l'opération a réussi et enregistrer $output . Je ne comprends pas pourquoi cela fonctionne alors que votre original ne fonctionne pas, mais au moins cela fonctionne.

Notez que j'ai supprimé le & à partir de la fin de votre commande - je ne suis pas convaincu que cela soit nécessaire dans le cas de launchd et cela empêchait mon script de signaler qu'il s'était terminé (bien que la fonction & n'était pas la cause du problème initial).

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X