Я внесла деякі зміни до наданої відповіді, тому що якщо щось варте того, то варто зайнятися землею. Я хотів знову підключитися, якщо VPN було скинуто, але НЕ повторно підключитися, якщо VPN було навмисно відключено. Рішення, яке я придумав, було і ефективним, і неелегантним.
Спочатку я додав гачки до запуску та відключення pppd, щоб відслідковувати бажаний стан VPN. Ці файли повинні належати root та мати дозволи для читання / виконання у світі ( 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: для ОС X 10.9.5 та новіших версій
#!/bin/sh
tail /var/log/ppp.log | grep '\[DISCONNECT\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi
/ etc / ppp / ip-down: для ОС X 10.10 і вище
#!/bin/sh
tail /var/log/ppp.log | grep '\[TERMINATE\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi
Потім, змінивши AppleScript вище, я зміг перевірити змінну стану '/ var / run / reconnect_vpn', щоб визначити, чи потрібно відновити 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
Як і раніше, змініть рядок set myConnection to the service "VPN"
на те, що називається вашим VPN. Крім того, при запуску файл 'reconnect_vpn' не існує, тому я додав булева (startOnLogin), яка слугувала б за замовчуванням, коли файл не вдалося знайти. Мені подобається починати негайно, але якщо ви цього не зробите, то замініть його на помилкове.
У мене таке відчуття, що якщо ти така людина, це стосується поведінки VPN, то ти також така людина, котра любить розгулюватись, поки не знайдеш рішення, і тому ця відповідь не має аудиторії. Але про всяк випадок, ось воно. Сподіваюся, це комусь допоможе.
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)