Automatisches Verbinden mit VPN bei Systemstart

Cillit Bang

Weißer Winterglockenapfel
Registriert
21.12.08
Beiträge
877
Hallo,

Da OS X leider nicht von Haus aus die Option bietet, sich bei Systemstart sich automatisch mit einem bestimmten VPN verbinden zu lassen, bin ich nach kurzer Suche im Internet auf eine einfache Lösung mit einem Apple-Skript gestoßen.

Code:
[LEFT]on idle[/LEFT]
     tell application "System Events"        
          tell current location of network preferences            
               set myConnection to the service "FH München"            
               if myConnection is not null then                
                    if current configuration of myConnection is not connected then                    
                         connect myConnection                
                    end if            
               end if        
          end tell        
          return 120    
     end tell [LEFT]end idle[/LEFT]

HIER die komplette Anleitung.

Jedoch passiert nach dem Ausführen des Skriptes bei mir leider nichts.
Ich habe einmal den "on idle"-Befehl weggelassen, dann funktioniert das Skript. Da ich bis jetzt jedoch kaum etwas mit AppleScript zutun hatte, würde ich gerne von euch wissen, ob dieser Befehl wichtig ist, ob man ihn braucht und was er bewirkt. Außerdem steht in der Anleitung, dass man das Skript als Programm abspeichern soll mit der Option "stay open". Diese wird bei mir jedoch gar nicht erst angezeigt.
 

TAdS

Osnabrücker Reinette
Registriert
17.09.04
Beiträge
977
Wenn du das Ganze ohne AppleScript o.ä. lösen willst, schau dir mal das kleine Menuprogramm `Controlplane` an.
Damit lässt sich u.a auch die VPN-Verbindung `location`-gesteuert ein- und ausschalten.

Gruesse
 

das_micha

Leipziger Reinette
Registriert
11.03.07
Beiträge
1.795
naja sollte ne simple automator aktion nicht reichen. habs eben mal ausprobiert mit wlan deaktivieren und dann wieder aktivieren. hat super geklappt.
 

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
Du musst das Skript mit "on idle" als "Programm" abspeichern mit der Option "Nach run-Handler anzeigen" (Mountain Lion) oder "Nicht automatisch beenden" (vor Mountain Lion).

Der Programmcode im idle-Handler wird wird alle x Sekunden ausgeführt. Dazwischen befindet sich das Programm im Ruhezustand. Die Dauer wird dabei am Ende des Skripts mit "return 120" auf 120 Sekunden festgelegt.

Hier findest du mehr zu den verschiedenen Handler:

https://developer.apple.com/library...langguide/conceptual/ASLR_about_handlers.html
 
  • Like
Reaktionen: Wuchtbrumme

Cillit Bang

Weißer Winterglockenapfel
Registriert
21.12.08
Beiträge
877
Vielen Dank für eure Antworten! Das Programm Controlplane werde ich mir mal anschauen, kann man auch für andere Funktionen gut gebrauchen. Jedoch finde ich für die VPN-Geschichte die Lösung über ein Apple-Skript am simpelsten und saubersten.

@Pill: Genau auf diese Antwort habe ich gewartet! ;) Das Skript funktioniert jetzt wunderbar nachdem ich den Haken bei "Nach run-Handler anzeigen" gesetzt habe. Nun ist alles so, wie ich es mir vorstelle.
 

feuerwehrmann

Tokyo Rose
Registriert
06.05.13
Beiträge
69
Hallo zusammen,

tut mir leid, dass ich das hier nochmal rauskrame. Aber ich bekomme leider eine Fehlermeldung, wenn ich das ganze ausführe.

Was mache ich falsch?

LG
 

Anhänge

  • Bildschirmfoto 2017-09-20 um 19.42.25.png
    Bildschirmfoto 2017-09-20 um 19.42.25.png
    54 KB · Aufrufe: 95

Kernelpanik

Herrenhut
Registriert
05.03.04
Beiträge
2.300
Naja, bisschen nachdenken schadet nicht:
Code:
on idle
    set {newList, exclList} to {{}, {"WLAN", "Ethernet", "iPhone-USB", "iPad-USB"}}
    tell application "System Events"
        tell current location of network preferences
            set nameList to name of services
            repeat with x in nameList
                if x is not in exclList then set newList to newList & x
            end repeat
            try
                set connection to service (some item of newList)
            on error
                return 60
            end try
            connect connection
        end tell
    end tell
    return 60
end idle


Die exclList muss ev. erweitert werden, je nach Bedarf. Wie oben schon gesagt, muss das Programm mit nach Run Handler anzeigen gespeichert werden. Anstelle von (some item of newList) kann auch ein absoluter Wert eingegeben werden.
 
Zuletzt bearbeitet:

feuerwehrmann

Tokyo Rose
Registriert
06.05.13
Beiträge
69
Hallo,

leider bin ich hier kein Profi.
Ich verstehe dich so, dass ich die Liste mit allen Schnittstellen füllen soll, über die ich eine Internetverbindung herstelle, inklusive dem VPN. Und den VPN setzte ich dann in die Klammer "(some item of newList)" ein?

Code:
on idle
   set {newList, exclList} to {{}, {"WLAN", "fritzvpn"}}
   tell application "System Events"
       tell current location of network preferences
           set nameList to name of services
           repeat with x in nameList
               if x is not in exclList then set newList to newList & x
           end repeat
           try
               set connection to service (fritzvpn)
           on error
               return 60
           end try
           connect connection
       end tell
   end tell
   return 60
end idle
 

Kernelpanik

Herrenhut
Registriert
05.03.04
Beiträge
2.300
Hallo,

leider bin ich hier kein Profi.
Ich verstehe dich so, dass ich die Liste mit allen Schnittstellen füllen soll, über die ich eine Internetverbindung herstelle, inklusive dem VPN. Und den VPN setzte ich dann in die Klammer "(some item of newList)" ein?
Nein. Das Script sucht alle verfügbaren Internet Services die in den Systemeinstellungen > Netzwerk definiert sind. Die exclList schliesst alle aus, welche nicht berücksichtigt werden sollen. Von den übrigen wird einer zufällig ausgewählt. (some item of newList) Falls die Zufallsauswahl umgangen werden soll, einfach anstelle von (some item of newList) den absoluten Namen einsetzen. In Deinem Fall "fritzvpn" mit Anführungszeichen.
Das Script ist ungetestet. Falls es nicht geht, einfach den Fehler hier melden.


In Deinem Fall sollte folgendes Script genügen:
Code:
on idle
    tell application "System Events"
        tell current location of network preferences
            try
                set connection to service "fritzvpn"
                connect connection
            end try
        end tell
    end tell
    return 60
end idle
 
Zuletzt bearbeitet:

feuerwehrmann

Tokyo Rose
Registriert
06.05.13
Beiträge
69
Hi,

danke.
Leider funktioniert das Skript, welches bei mir genügen sollte, nicht. Ich bekomme keine Fehlermeldung und der VPN wird auch nicht verbunden.

@ottomane Das Programm habe ich auch schon versucht, allerdings gibt es immer einen Fehler, falls keine Internetverbindung besteht.
 

Kernelpanik

Herrenhut
Registriert
05.03.04
Beiträge
2.300
Kannst Du mal einen Screen Shot von Deinen Netzwerkeinstellungen beilegen hier? Nimm mal "on idle", "try" und "end try" und "end idle" aus dem Skript und schicke dann die Fehlermeldung oder das Ergebnis.
 
Zuletzt bearbeitet:

feuerwehrmann

Tokyo Rose
Registriert
06.05.13
Beiträge
69
Wenn ich das rausnehme passiert garnichts. Keine Fehlermeldung und keine Verbindung des VPN.
 

Anhänge

  • Bildschirmfoto 2017-10-08 um 19.12.47.png
    Bildschirmfoto 2017-10-08 um 19.12.47.png
    130,4 KB · Aufrufe: 57

Kernelpanik

Herrenhut
Registriert
05.03.04
Beiträge
2.300
"on Idle", "end idle" rausgenommen?
Versuch mal folgendes Script:
Code:
do shell script "networksetup -connectpppoeservice fritzvpn"
Sollte das gehen, am Anfang die Zeile "on idle" und am Schluss die Zeilen "return 60" und "end idle" hunzufügen. Danach wie oben beschrieben als Programm mit "nach run handler" speichern.
Code:
on idle
    do shell script "networksetup -connectpppoeservice fritzvpn"
    return 60
end idle
 
Zuletzt bearbeitet:
  • Like
Reaktionen: feuerwehrmann

feuerwehrmann

Tokyo Rose
Registriert
06.05.13
Beiträge
69
Jaaa. Funktioniert. Vielen Dank Kernelpanik.

Kann man das jetzt noch so machen, dass er nur versucht eine Verbindung aufzuabuen wenn WLAN oder Ethernet verbunden sind? Sonst kommt eine Fehlermeldung, wenn keine Internetverbindung besteht.
 

Kernelpanik

Herrenhut
Registriert
05.03.04
Beiträge
2.300
z.B:
Code:
on idle
    try
        do shell script "ping -oQ -t2 8.8.4.4"
        do shell script "networksetup -connectpppoeservice fritzvpn"
    on error
        return 8
    end try
    return 60
end idle


Das Script testet ob egal womit, eine Internetverbindung besteht, wenn ja wird verbunden, wenn nein testet es nach 8 Sekunden wieder. Wenn verbunden testet es alle 60 Sekunden ob die Verbindung noch besteht.
 
  • Like
Reaktionen: feuerwehrmann

feuerwehrmann

Tokyo Rose
Registriert
06.05.13
Beiträge
69
Vielen vielen Dank.

Ich fasse nochmal kurz zusammen, falls andere das gleiche Problem haben:

Folgender Code prüft alle 8 Sekunden, ob eine Internetverbindung besteht (Ping an Google DNS Server).
Wenn dies der Fall ist, wird die Verbindung fritzvpn hergestellt. Dann wird alle 60 Sekunden geprüft, ob die Verbindung noch besteht.

Code:
on idle
   try
       do shell script "ping -oQ -t2 8.8.4.4"
       do shell script "networksetup -connectpppoeservice fritzvpn"
   on error
       return 8
   end try
   return 60
end idle

Den Code in AppleScript einfügen und als Programm speichern. Die Option "nach run-Handler anzeigen" muss aktiviert sein.
Ich packe das jetzt in den Autostart und blende das ganze im Dock aus (https://apple.stackexchange.com/que...to-connect-to-vpn-upon-login-boot/32395#32395). Getestet unter macOS Sierra.

Nochmal vielen Dank.
 

Kernelpanik

Herrenhut
Registriert
05.03.04
Beiträge
2.300
Das Script ist nicht getestet. Unter anderem muss beobachtet werden ob, bei länger bestehender Verbindung Fehler auftreten. Oder was geschieht wenn die Netzwerkverbindung z.B durch Stromausfall oder Neustart des Routers unterbrochen wird. Im Dock ausblenden kann man indem man im Info.plist File des Programms die Zeile
Code:
<key>LSUIElement</key>
    <true/>


hinzufügt. Dazu muss man den Paketinhalt des Skriptprograms anzeigen lassen.
 
Zuletzt bearbeitet:

feuerwehrmann

Tokyo Rose
Registriert
06.05.13
Beiträge
69
Hallo,

ich melde mich hier nochmal.

Gibt es auch ein Skript, um die VPN Verbindung wieder zu trennen?

PS: Das obige Skript funktionier bisher einwandfrei.
 

Kernelpanik

Herrenhut
Registriert
05.03.04
Beiträge
2.300
Code:
do shell script "networksetup -disconnectpppoeservice fritzvpn"
Willste das automatisieren? Zu bestimmten Zeiten? Oder einfach als Widget in der Finder Liste oder Dock?
 
  • Like
Reaktionen: feuerwehrmann