J'ai apporté quelques modifications à la réponse fournie, car si quelque chose vaut la peine d'être fait, il vaut la peine de le faire dans le sol. Je voulais me reconnecter si le VPN était tombé, mais PAS se reconnecter si le VPN était intentionnellement déconnecté. La solution que j'ai trouvée était à la fois efficace et inélégante.
J'ai d'abord ajouté des crochets au démarrage et à l'arrêt de pppd pour garder une trace de l'état VPN souhaité. Ces fichiers doivent appartenir à root et disposer des autorisations de lecture / exécution du monde ( sudo chmod 755 /etc/ppp/ip-*
).
/ etc / ppp / ip-up:
#!/bin/sh
echo true > /var/run/reconnect_vpn
chmod 644 /var/run/reconnect_vpn
/ etc / ppp / ip-down: pour OS X 10.9.5 et inférieur
#!/bin/sh
tail /var/log/ppp.log | grep '\[DISCONNECT\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi
/ etc / ppp / ip-down: pour OS X 10.10 et supérieur
#!/bin/sh
tail /var/log/ppp.log | grep '\[TERMINATE\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi
Puis en modifiant l'AppleScript ci-dessus, j'ai pu vérifier la variable d'état '/ var / run / reconnect_vpn' pour déterminer s'il fallait ramener le VPN:
on idle
tell application "System Events"
tell current location of network preferences
set myConnection to the service "VPN"
set startOnLogin to true
local doReconnect
try
set doReconnect to (do shell script "cat /var/run/reconnect_vpn")
on error errMsg
set doReconnect to startOnLogin
end try
if myConnection is not null and doReconnect then
if current configuration of myConnection is not connected then
connect myConnection
end if
end if
end tell
return 120
end tell
end idle
Comme précédemment, changez la ligne set myConnection to the service "VPN"
en quel que soit le nom de votre VPN. De plus, au démarrage, le fichier «reconnect_vpn» n'existe pas, j'ai donc ajouté un booléen (startOnLogin) pour servir de valeur par défaut lorsque le fichier est introuvable. J'aime commencer immédiatement, mais si vous ne le faites pas, changez-le en faux.
J'ai le sentiment que si vous êtes le genre de personne qui est si particulier à propos du comportement VPN, alors vous êtes aussi le genre de personne qui aime tâtonner jusqu'à ce que vous trouviez une solution et donc cette réponse n'a pas d'audience. Mais juste au cas où, le voici. J'espère que cela aide quelqu'un.
Can’t get «class svce» "MyVPN" of «class locc» of «class netp» of application "System Events".
System Events got an error: Can’t get service "MyVPN" of current location of network preferences. (-1728)