Frage

Gibt es eine Möglichkeit, die Internetfreigabe aus der Befehlszeile oder vielleicht ein Apple -Skript zu starten/zu stoppen?

Die Sache ist, dass ich mich zwischen Zuhause und Arbeit um meinen Laptop bewege. An einem Ort bekomme ich drahtloses Internet (und daher muss ich das Internet -Sharing deaktivieren), und an der anderen Seite bekomme ich das Internet aus einem Ethernet -Kabel und richte den Computer ein, um das Internet auf andere Geräte zu teilen, indem ich ein kleines drahtloses Netzwerk erstellt.

Aber es wird ein bisschen mühsam, in die Systemeinstellungen einzugehen und jedes Mal, wenn ich den Standorten wechsle, zu starten/zu stoppen/zu stoppen. Daher möchte ich einen schnellen Befehl oder ein Skript zum Starten und Schalter für den Schalter haben.

Irgendwelche Hinweise oder Ideen?

War es hilfreich?

Lösung

Um mit dem Internet -Teilen von der CLI zu beginnen:

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.InternetSharing.plist

Um anzuhalten, ändern Sie die Belastung zu entladen.

Beachten Sie, dass Sie, wenn Sie das Pref -Bereich bei Ihrer Ausführung öffnen haben, nicht sofort wirksam wird (die Benutzeroberfläche wird nicht aktualisiert), aber es funktioniert.

Andere Tipps

Eine Möglichkeit, dies zu tun, besteht darin, dass GUI -Skripting standardmäßig einen Applescript -Support bietet.

tell application "System Preferences" to set current pane to pane "com.apple.preferences.sharing"
delay 1
tell application "System Events" to tell process "System Preferences"
    click checkbox 1 of row 8 of table 1 of scroll area 1 of group 1 of window "Sharing" -- change to row 10 if you are using anything before Snow Leopard
    delay 1
    if (exists sheet 1 of window "Sharing") then
        click button "Start" of sheet 1 of window "Sharing"
    end if
end tell
ignoring application responses
    tell application "System Preferences" to quit
end ignoring

Ich machte ein Stichwort von Mankoffs Antwort und wickelte es in ein Apfelkript ein. Ich verwende dieses Skript von Automator, damit ich es einfach als Dienst verwenden und ihm eine Tastaturverknüpfung gebe.

Internet -Freigabe umschalten:

register_growl()

try
    if isRunning("InternetSharing") then
        do shell script "launchctl unload -w /System/Library/LaunchDaemons/com.apple.InternetSharing.plist" with administrator privileges

        if isRunning("InternetSharing") then
            error "Internet Connection Sharing was Not Disabled"
        else
            my growlnote("Success", "Internet Connection Sharing Disabled")
        end if

    else
        do shell script "launchctl load -w /System/Library/LaunchDaemons/com.apple.InternetSharing.plist" with administrator privileges

        if isRunning("InternetSharing") then
            my growlnote("Success", "Internet Connection Sharing Enabled")
        else
            error "Internet Connection Sharing was Not Enabled"
        end if

    end if

on error errMsg
    my growlnote("Error", errMsg)

end try

on isRunning(processName)
    try
        return 0 < length of (do shell script "ps ax | grep -v grep | grep " & processName)
    on error
        return false
    end try
end isRunning

on register_growl()
    try
        tell application "GrowlHelperApp"
            set the notificationsList to {"Success", "Warning", "Error"}
            register as application "Toggle Internet Connection Sharing" all notifications notificationsList default notifications notificationsList icon of application "Sharing"
        end tell
    end try
end register_growl

on growlnote(growltype, str)
    try
        tell application "GrowlHelperApp"
            notify with name growltype title growltype description str application name "Toggle Internet Connection Sharing"
        end tell
    end try
end growlnote

Ich hatte weitaus bessere Ergebnisse (für ein bereits konfiguriertes Sharing -Setup) am 10.11.6 mit den einfachen Variationen ...

sudo launchctl start com.apple.NetworkSharing

und

sudo launchctl stop com.apple.NetworkSharing

beziehungsweise.

Die wirklich einfache Möglichkeit, es zu tun, besteht darin, @Philips zu kombinieren Antworten mit dem Netzwerkstandort Anwendung. NL kann erkennen, wo Sie sich befinden, und führen automatisch ein AppleScript aus, wenn Sie feststellen, dass Sie den Standort gewechselt haben.

Ich denke, es ist erforderlich, dass Software erforderlich ist, wenn Sie einen Laptop haben - andernfalls ist es eine Pita, immer mehrere Einstellungen manuell zurückzusetzen, wenn ich den Standort wechsle.

Etwas anders als der andere AppleScript (ich denke auf bessere Weise aber…). Optionen können manchmal helfen.

 tell application "System Preferences"
   activate
   reveal (pane id "com.apple.preferences.sharing")
 end tell

 tell application "System Events"
   tell process "System Preferences"
     try
       click checkbox of row 11 of table 1 of scroll area of group 1 of window "Sharing"

       if checkbox of row 11 of table 1 of scroll area of group 1 of window "Sharing" is equal to 1 then
         repeat until sheet of window 1 exists
           delay 0.5
         end repeat
       end if

       if (sheet of window 1 exists) then
         click button "Start" of sheet of window 1
       end if

       tell application "System Preferences" to quit
       activate (display dialog "Internet Sharing preferences sucessfully flipped")

     on error     
       activate
       display dialog "something went wrong in automation but you are probably in the right menu…"
       return false
     end try
   end tell
 end tell

Da die zuvor gepostete GUI -Skriptlösung die internationalen Benutzer erfordert, dass sie das Fenster und die Schaltflächennamen anpassen, habe ich eine Version entwickelt, die mit jeder Systemsprache funktioniert. Es funktioniert auch für die andere Sharing -Option und gibt lokalisiertes Feedback zum Sharing -Status. Ich verwende zwei verschiedene Automatordienste, die basierend auf diesem, eine zum Umschalten der Dateifreigabe und eine zum Umschalten der Internetfreigabe.

tell application "System Preferences"
    set current pane to pane "com.apple.preferences.sharing"
    set localized_window to the localized name of the current pane
    set localized_app to (localized string "System Preferences")
    set localized_ok to {localized string "OK"} -- File sharing
    set localized_start to {localized string "START"} -- Internet sharing
end tell
delay 0.3
tell application "System Events"
tell process "System Preferences"
    click checkbox 1 of row 8 of table 1 of scroll area 1 of group 1 of window localized_window
    delay 0.2
    select row 8 of table 1 of scroll area 1 of group 1 of window localized_window
    -- change row numbers to the service you want toggled
    if (exists sheet 1 of window localized_window) then
        try
            click button (localized_ok as string) of sheet 1 of window localized_window
        on error
            click button (localized_start as string) of sheet 1 of window localized_window
        end try
    end if
    set sharing_state to the value of item 1 of static text of group 1 of window localized_window
end tell

tell application "System Preferences" to quit
display notification sharing_state with title localized_app
--  display notification exists since OS 10.9, for older systems use: 
--  display dialog sharing_state buttons {localized_ok} default button 1 with title localized_app giving up after 1.5
end tell

Vor/nach einer Konfiguration muss die Schnittstelle oder Schnittstellen, die an der Freigabe beteiligt sind, ausgeschaltet werden, mit:

networksetup -setairportpower en1 off

dann weiter. (networksetup -setairportpower en1 on)

Mein WLAN wurde als aufgeführt en1, um Ihre Verwendung zu suchen networksetup -listnetworkserviceorder. Mehr auf den Punkt, wenn Sie beim Starten der Internetfreigabe detailliertere NAT -Funktionen hinzufügen und einfach das aktivierte Bit festlegen.

Nat wird mit Bit ein-/ausgeschaltet: -int 0 = aus -int 1 = on

Das einzige, was geschrieben ist /Library/Preferences/SystemConfiguration/com.apple.nat.plist mit

defaults write /Library/Preferences/SystemConfiguration/com.apple.nat\
    NAT -dict Enabled -int 0

ist

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>NAT</key>
        <dict>
                </dict>
                <key>Enabled</key>
                <integer>1</integer>
        </dict>
</dict>
</plist>

Sie müssen Ihre Plist -Datei ändern, um wie Folgendes auszusehen:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>NAT</key>
        <dict>
                <key>AirPort</key>
                <dict>
                        <key>40BitEncrypt</key>
                        <integer>1</integer>
                        <key>Channel</key>
                        <integer>0</integer>
                        <key>Enabled</key>
                        <integer>0</integer>
                        <key>NetworkName</key>
                        <string>FancyHostNome</string>
                        <key>NetworkPassword</key>
                        <data>
                        </data>
                </dict>
                <key>Enabled</key>
                <integer>1</integer>
                <key>NatPortMapDisabled</key>
                <false/>
                <key>PrimaryInterface</key>
                <dict>
                        <key>Device</key>
                        <string>en4</string>
                        <key>Enabled</key>
                        <integer>0</integer>
                        <key>HardwareKey</key>
                        <string></string>
                        <key>PrimaryUserReadable</key>
                        <string>InfiniBand</string>
                </dict>
                <key>PrimaryService</key>
                <string>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string>
                <key>SharingDevices</key>
                <array>
                        <string>en1</string>
                </array>
        </dict>
</dict>
</plist>

Wie Sie sehen können, muss meine Plist Nat -Datei möglicherweise eine kleine Anpassung benötigen, um Ihren Anforderungen zu entsprechen.

Ich benutze das folgende Skript, um die Internet -Freigabe in einem MacBook Pro / 10.11.3 El Capitan aus dem MacBook Pro / 10.11.3 umzuschalten. Mit neuerer Hardware können Sie mit kürzeren Verzögerungen davonkommen. Es werden Ideen aus mehreren Skripten angewendet, die zu diesem Zweck veröffentlicht werden networksetup, nah dran System Preferences wenn fertig).

tell application "System Preferences"
    activate
    reveal (pane id "com.apple.preferences.sharing")
    set localized_window to the localized name of the current pane
end tell

tell application "System Events" to tell process "System Preferences"
    delay 1
    repeat with r in rows of table 1 of scroll area 1 of group 1 of window localized_window
        if (value of static text of r as text) starts with "Internet" then
            set sharingBool to value of checkbox of r as boolean
            select r
            if sharingBool is true
              do shell script "/usr/sbin/networksetup -setairportpower en1 off"
            else
              do shell script "/usr/sbin/networksetup -setairportpower en1 on"
            end if
            click checkbox of r
        end if
    end repeat
    delay 1

    if (exists sheet 1 of window localized_window) then
      click button "Start" of sheet 1 of window localized_window
    end if

end tell

ignoring application responses
  tell application "System Preferences" to quit
end ignoring

Endgültige Problemumgehung zum ständigen Abbau von Wifi-Sharing in macosx

Ich habe ein System gefunden, das endlich endlich Arbeiten Und wenn weniger häufig WLAN -Freigabe bricht, kann es in einer Minute automatisch wiederhergestellt werden.

Die Lösung ist a ~/Library/LaunchAgents/com.me.wifisharingup.plist Daemon mit dem nächsten Inhalt:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.juanfal.wifisharingup</string>

  <key>ProgramArguments</key>
  <array>
    <string>/Users/mi/bin/wifisharingup.sh</string>
  </array>
  <key>Nice</key>
  <integer>1</integer>

  <key>StartInterval</key>
  <integer>60</integer>

  <key>RunAtLoad</key>
  <true/>

  <key>StandardErrorPath</key>
  <string>/Users/me/Library/Logs/wifisharingup.err</string>

  <key>StandardOutPath</key>
  <string>/Users/me/Library/Logs/wifisharingup.out</string>
</dict>
</plist>

Sie können sehen, dass jede Minute das folgende einfache Skript ausführt. Achten Sie darauf, den vorherigen Plan im Besitz der Wurzel und starten Sie sie mit:

sudo chown root com.me.wifisharingup.plist
sudo launchctl load /Users/me/Library/LaunchAgents/com.me.wifisharingup.plist

Das Skript startet jede Minute (vergessen Sie nicht, es ausführbar zu machen):

#!/bin/sh

if [[ ! `ipconfig getifaddr en1` ]]; then
    /usr/sbin/networksetup -setairportpower en1 off
    /usr/sbin/networksetup -setairportpower en1 on
    echo `date` >> "/Users/me/Library/Logs/wifisharingup.err"
else
    touch "/Users/me/Library/Logs/wifisharingup.out"
fi

Ich denke, der einfache (jede Minute) Anruf an ipconfig getifaddr en1 Aktualisiert etwas in dem, was der WLAN teilt, der Daemon teilt. Was auch immer es ist, jeder Moment, in dem die WLAN -Freigabe fällt, verliert es die selbst zugewiesene IP -Adresse, und dann, ipconfig getifaddr en1 fällt fehl, also setzt mein Skript WiFi vollständig zurück, wodurch es seinen vorherigen Status wieder aufgebaut und die WLI-Sharing wiederhergestellt wird.

Es arbeitet seit Tagen in einem MacMini ohne Tastatur, Maus oder Monitor, aber nur in das Ethernet und gewährte meinen WLAN -Geräten Zugang zur Welt.

Vielleicht möchten Sie sich diese Frage (möglicherweise nicht zum Thema Stapelüberlauf) ansehen und deren Antwort: So starten/stoppen Sie die Internetfreigabe mit appleScript.

do shell script "/bin/launchctl load -w /System/Library/LaunchDaemons/com.apple.InternetSharing.plist" with administrator privileges
/usr/bin/defaults write /Library/Preferences/SystemConfiguration/com.apple.nat NAT -dict Enabled -int 0
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit apple.stackexchange
scroll top