AppleScript で VPN の常時接続を実現

ウチは以前からシンガポールに置いてあるMac miniと日本の実家に置いてあるMac mini server間でVPN接続を張り、ファイル転送やサーバーの管理を行っています。

引っ越す前は時々CATVインターネット接続が不安定で数日に一度程度、そして引っ越し後はCATVモデム(WiFiアクセスポイント)からウチの部屋に設置したLinksys RE1000までの接続がまだ時々不安定で時々、VPN接続が切れてしまいます。必ず常時接続されていないと困る訳でもないのですが比較的大きなファイルのやり取りをしている為、転送中にVPNが切断されるとやり直しになったり、期待していたファイルが同期されていなかったりと些か不便を感じていました。

という事で少し調べてみたところ、AppleScriptを使って常にVPNの接続状態を監視、接続されていなかった場合は接続するというスクリプトがありましたので試してみました。紹介してみます。

スクリプト本体

on idle
tell application "System Events"
tell current location of network preferences
set myConnection to the service "VPN_Connection"
if myConnection is not null then
if current configuration of myConnection is not connected then
connect myConnection
end if
end if
end tell
return 30
end tell
end idle

AppleScript Editorを起動してスクリプトを記述します。
なお、4行目の”VPN_Connection”の部分の””でくくられた中は、その環境に設定したVPN接続の名称で置き換えます。
そして最後から3行目のreturn 30は、何秒毎に接続状態を監視するかの設定です。

保存する際はFile FormatをApplication、そしてOptionのStay open after run handlerのチェックを入れておきます。
こうする事で、保存されたファイルをダブルクリックするとアプリケーションとして動作し且つ常に動作し続ける様になります。

VPN connection AppleScriptVPN connection AppleScript

早速起動してみるとVPN接続が切断されていれば自動的に再接続する事が分かります。
意図的にVPN接続を切断してみると約30秒以内に再接続が始まります。

VPN connection AppleScript VPN connection AppleScript

 

このままだとDockにアプリケーションアイコンが表示されてしまい少し邪魔と感じるかもしれません。
そんな場合は保存したアプリケーションアイコンを右クリック、Show Package ContentsをクリックしContentsフォルダ内のInfo.plistをXcode等で開きます。

VPN connection AppleScript VPN connection AppleScript

 

そしてXcodeのEditorメニューからAddを選択して「Application is agent (UIElement)」Keyを追加した上で値をYESに設定します。

VPN connection AppleScript VPN connection AppleScript

 

この設定を済ませる事でアプリケーションが起動していてもDockにアイコンが表示されなくなります。
後はログイン時の起動項目にこのアプリケーションを追加しておけば、Mac OS Xの起動とともにVPNに自動的に接続され、その接続状態を監視、切断時には自動的に再接続してくれる様になります。

参考リンク: