Fiz algumas alterações na resposta fornecida, porque se vale a pena fazer algo, vale a pena fazer no chão. Eu queria reconectar se a VPN foi eliminada, mas NÃO reconectar se a VPN foi desconectada intencionalmente. A solução que eu encontrei foi eficaz e deselegante.
Primeiro, adicionei ganchos à inicialização e desligamento do pppd para acompanhar o estado VPN desejado. Esses arquivos devem pertencer à raiz e ter permissões de leitura / execução mundiais ( 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: para OS X 10.9.5 e inferior
#!/bin/sh
tail /var/log/ppp.log | grep '\[DISCONNECT\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi
/ etc / ppp / ip-down: para OS X 10.10 e superior
#!/bin/sh
tail /var/log/ppp.log | grep '\[TERMINATE\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi
Então, modificando o AppleScript acima, pude verificar a variável de status '/ var / run / reconnect_vpn' para determinar se a VPN deve ser novamente restaurada:
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
Como antes, altere a linha set myConnection to the service "VPN"
para o que for chamado na sua VPN. Além disso, na inicialização, o arquivo 'reconnect_vpn' não existe, então adicionei um booleano (startOnLogin) para servir como padrão quando o arquivo não pôde ser encontrado. Eu gosto de começar imediatamente, mas se você não mudar, mude para false.
Tenho a sensação de que, se você é o tipo de pessoa interessada no comportamento da VPN, também é o tipo de pessoa que gosta de se mexer até encontrar uma solução e, portanto, essa resposta não tem público. Mas por precaução, aqui está. Espero que ajude alguém.
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)