Avvia / interrompi la condivisione di Internet da uno script?

21

C'è un modo per avviare / interrompere la condivisione di Internet dalla riga di comando o forse uno script di Apple?

Il fatto è che mi muovo attorno al mio laptop tra casa e lavoro. Ad un certo punto ottengo la connessione internet wireless (e quindi devo disabilitare la condivisione in Internet), e dall'altra ottengo internet da un cavo ethernet e configuro il computer per condividere Internet con altri dispositivi creando una piccola rete wireless.

Ma è sempre noioso dover andare in Preferenze di Sistema e avviare / interrompere la condivisione di Internet ogni volta che cambio posizione, quindi mi piacerebbe avere un comando o uno script rapido da avviare e fare lo switch su richiesta.

Qualche suggerimento o idea?

    
posta Juan A. Navarro 22.09.2010 - 14:36
fonte

12 risposte

19

Per avviare Condivisione Internet dalla CLI:

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

Per interrompere, modifica il caricamento in scarica .

Tieni presente che se hai aperto il pannello delle preferenze quando esegui questa operazione non vedrai che le modifiche avranno effetto immediato (l'interfaccia utente non verrà aggiornata), ma funziona.

    
risposta data 22.09.2010 - 18:10
fonte
4

Un modo per farlo è tramite la GUI scripting: le Preferenze di Sistema non hanno il supporto di Applescript per impostazione predefinita.

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
    
risposta data 22.09.2010 - 16:00
fonte
2

Ho preso spunto dalla risposta di mankoff e l'ho racchiuso in un AppleScript. Sto usando questo script di Automator in modo che io possa facilmente usarlo come servizio e dargli una scorciatoia da tastiera.

Attiva / disattiva Condivisione Internet:

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
    
risposta data 04.01.2011 - 01:29
fonte
2

Ho ottenuto risultati molto migliori (per una configurazione di condivisione già configurata) su 10.11.6 con le semplici varianti ...

sudo launchctl start com.apple.NetworkSharing

e

sudo launchctl stop com.apple.NetworkSharing

, rispettivamente.

    
risposta data 15.10.2016 - 12:13
fonte
0

Il modo più semplice per farlo è combinare @ Philip's risposta con l'applicazione NetworkLocation . NL può dire dove sei e lancia automaticamente un AppleScript quando rileva che hai cambiato posizione.

Penso che sia necessario un software se si possiede un laptop, altrimenti è sempre PITA dover ripristinare manualmente diverse impostazioni ogni volta che cambio posizione.

    
risposta data 23.09.2010 - 00:44
fonte
0

Leggermente diverso rispetto all'altro script pubblicato (penso in un modo migliore ma ...). Avere a volte le opzioni può aiutare.

 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
    
risposta data 20.01.2011 - 19:42
fonte
0

Poiché la soluzione di scripting della GUI precedentemente pubblicata richiede agli utenti internazionali di modificare i nomi dei pulsanti e delle finestre, ho trovato una versione che funziona con qualsiasi linguaggio di sistema. Funziona anche con l'altra opzione di condivisione e fornisce feedback localizzati sullo stato di condivisione. Io uso due diversi servizi di Automator basati su questo, uno per attivare la condivisione dei file e uno per attivare la condivisione di Internet.

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
    
risposta data 11.11.2015 - 12:35
fonte
0

Prima / dopo qualsiasi configurazione, l'interfaccia o le interfacce coinvolte nella condivisione devono essere spente / accese con:

networksetup -setairportpower en1 off

quindi acceso. ( networksetup -setairportpower en1 on )

Il mio wifi è stato elencato come en1 , per cercare il tuo uso networksetup -listnetworkserviceorder . Più precisamente, quando avvii la condivisione su Internet dovrai aggiungere funzionalità NAT più dettagliate e solo impostare il bit abilitato.

NAT viene attivato / disattivato con bit: -int 0 = off   -int 1 = on

L'unica cosa che è scritta in /Library/Preferences/SystemConfiguration/com.apple.nat.plist con

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

è

<!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>

Dovrai modificare il file Plist in modo che assomigli al seguente:

<!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>

Come puoi vedere il mio file plist NAT potrebbe richiedere un po 'di personalizzazione per soddisfare le tue esigenze.

    
risposta data 24.06.2015 - 21:55
fonte
0

Io uso il seguente script per attivare la condivisione su Internet in un MacBook Pro / 10.11.3 El Capitan del 2011, quindi con un hardware più recente potresti farla franca con ritardi più brevi. Adotta le idee di diversi script pubblicati per questo scopo (localizzazione, attivazione / disattivazione wifi utilizzando networksetup , chiusura System Preferences al termine).

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
    
risposta data 08.02.2016 - 17:07
fonte
0

Soluzione definitiva per la costante interruzione della condivisione wifi in MacosX

Ho trovato un sistema che alla fine funziona e quando, meno frequentemente interruzioni di condivisione wifi, riesce a ripristinarlo automaticamente in un minuto.

La soluzione è un daemon ~/Library/LaunchAgents/com.me.wifisharingup.plist con i seguenti contenuti:

<?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>

Puoi vedere, ogni minuto esegue il semplice script che segue. Fai attenzione a rendere il precedente plist appartenente alla root e avvialo con:

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

Lo script che viene lanciato ogni minuto (non dimenticare di renderlo eseguibile) è:

#!/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

Penso che la semplice chiamata periodicamente (ogni minuto) a ipconfig getifaddr en1 aggiorni qualcosa in quello che è il demone di condivisione wifi. Qualunque cosa sia, in qualsiasi momento la condivisione wifi fallisce, perde l'indirizzo IP assegnato automaticamente e quindi, ipconfig getifaddr en1 fallisce, quindi il mio script resetta completamente il wifi, facendolo ricostruire il suo stato precedente e recuperando la condivisione wifi.

Ha funzionato per giorni fino ad ora all'interno di un MacMini senza tastiera, mouse o monitor, ma solo collegato all'Ethernet e dando accesso ai miei dispositivi wifi al mondo.

    
risposta data 03.04.2018 - 23:37
fonte
0

Potresti dare un'occhiata a questa domanda (possibilmente off topic per Stack Overflow) e la sua risposta: Come avviare / interrompere Condivisione Internet tramite AppleScript .

do shell script "/bin/launchctl load -w /System/Library/LaunchDaemons/com.apple.InternetSharing.plist" with administrator privileges
    
risposta data 22.09.2010 - 15:31
fonte
-1
/usr/bin/defaults write /Library/Preferences/SystemConfiguration/com.apple.nat NAT -dict Enabled -int 0
    
risposta data 09.08.2014 - 02:13
fonte

Leggi altre domande sui tag