Starten/Starten Sie die Internetfreigabe von einem Skript aus?
-
16-10-2019 - |
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?
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