Il s'agit d'un suivi de La réponse de TJ Luoma qui, je l'espère, résoudra les problèmes liés à l'utilisation de la fonction .plist
qui empêche le travail d'être exécuté de manière correcte.
De man
launchd.plist
:
**WatchPaths** <array of strings>
Cette clé facultative permet de lancer le travail si l'une des conditions suivantes est remplie sont modifiés.
IMPORTANT : L'utilisation de cette clé est fortement déconseillée car la surveillance des du système de fichiers est très sensible à la concurrence, et il est tout à fait possible que des modifications soient manquées. Lorsque des modifications sont détectées, il n'y a aucune garantie que le fichier sera dans un état cohérent lorsque le travail sera lancé.
**StartOnMount** <boolean>
Cette clé optionnelle fait en sorte que le job soit lancé chaque fois qu'un système de fichier est monté.
Voici une version révisée .plist
définition de l'incorporation StartOnMount
en faveur de WatchPaths
. Il est actuellement étiqueté "local.startOnMount.iTunes"
qui, s'il est inchangé, signifie que le fichier doit être enregistré à l'adresse suivante ~/Library/LaunchAgents/local.StartOnMount.iTunes.plist
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.StartOnMount.iTunes</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/osascript</string>
<string>-e</string>
<string>if (list disks) contains "Media" then ¬
run application id "com.apple.iTunes"</string>
</array>
<key>RunAtLoad</key>
<false/>
<key>StandardErrorPath</key>
<string>/tmp/local.StartOnMount.iTunes.stderr</string>
<key>StandardOutPath</key>
<string>/tmp/local.StartOnMount.iTunes.stdout</string>
<key>StartOnMount</key>
<true/>
</dict>
</plist>
Le site ProgramArguments
peut aussi être plus proche de la clé originale de TJ. bash
commandement :
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>[[ -d "/Volumes/Media" ]] && open -jg -b "com.apple.iTunes"</string>
</array>
Cependant, en testant, j'ai constaté que si iTunes est déjà en cours d'exécution et est caché, alors l'appel de la fonction open
même avec la commande -j
et/ou -g
option(s)-marques iTunes au premier plan. J'ai donc décidé d'utiliser osascript
pour effectuer les mêmes actions, mais de manière plus cohérente.
Cette nouvelle .plist
semble résoudre les problèmes, et ne lance le travail que lorsqu'un système de fichiers est monté, qui à son tour n'exécute une action que s'il s'agit du bon nom de disque. A remplacer :
cd ~/Library/LaunchAgents
launchctl unload com.tjluoma.itunes-on-mount.plist
launchctl load local.StartOnMount.iTunes.plist
Toutefois, si un élément ne fonctionne pas comme prévu, et que la raison n'est pas évidente, regardez dans l'onglet /tmp/
pour le(s) fichier(s) nommé(s) local.StartOnMount.iTunes.stderr
et/ou local.StartOnMount.iTunes.stdout
:
cat local.StartOnMount.iTunes.stderr
EDIT : Post Catalina Bonus
Ajouté par @dunxd le 2021-03-18
Apple a divisé iTunes en applications distinctes (Musique, TV et Podcasts) avec le lancement de Catalina. Il est possible d'ajuster le script ci-dessus pour lancer Musique et TV en une seule fois en ajoutant des chaînes supplémentaires au tableau ProgramArguments comme suit :
<key>ProgramArguments</key>
<array>
<string>/usr/bin/osascript</string>
<string>-e</string>
<string>if (list disks) contains "Media" then run application id "com.apple.music"</string>
<string>-e</string>
<string>if (list disks) contains "Media" then run application id "com.apple.TV"</string>
</array>
EDIT : Affinement de "Post Catalina Bonus".
Ajouté par @CJK le 2021-04-17
<key>ProgramArguments</key>
<array>
<string>/usr/bin/osascript</string>
<string>-e</string>
<string>
if (list disks) does not contain "Media" then return
run application id "com.apple.music"
run application id "com.apple.TV"
</string>
</array>