Perché il mio script launchd non viene eseguito all'accesso?

2

Ho provato a seguire questa domanda in modo che al login lo screensaver attualmente configurato diventi lo sfondo del desktop. Pertanto, ho creato il seguente script:

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

Ho quindi creato un servizio di lancio come ~/Library/LaunchAgents/my_login_items.plist con il contenuto

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

Quindi esegui launchctl load ~/Library/LaunchAgents/my_login_items.plist . Tuttavia, non succede nulla.

    
posta oarfish 17.01.2017 - 10:53
fonte

1 risposta

1

Questa è una risposta profondamente insoddisfacente, ma ho funzionato eseguendo /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background & in una subshell. Ho modificato login.sh in ...

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

... e funziona (il mio solito desktop statico cambia al mio screensaver predefinito). Uso questo idioma per altre attività di launchd, eseguendo le attività in una sotto-shell in modo da poter facilmente verificare se l'operazione è riuscita e registrare $output . Non capisco perché funzioni mentre il tuo originale non funziona, ma almeno funziona.

Tieni presente che ho rimosso & dalla fine del tuo comando: non sono convinto che sia necessario con launchd e impediva al log del wrapper di registrare che era terminato (sebbene & non era la causa del problema originale).

    
risposta data 17.01.2017 - 12:00
fonte

Leggi altre domande sui tag