26 votes

Démarrer/arrêter le partage d'internet à partir d'un script ?

Existe-t-il un moyen de démarrer/arrêter le partage internet depuis la ligne de commande ou peut-être un script d'apple ?

Le fait est que je déplace mon ordinateur portable entre la maison et le travail. À un endroit, j'obtiens l'internet sans fil (et je dois donc désactiver le partage d'internet), et à l'autre, j'obtiens l'internet à partir d'un câble Ethernet et je configure l'ordinateur pour partager l'internet avec d'autres appareils en créant un petit réseau sans fil.

Mais cela devient un peu fastidieux d'avoir à aller dans les Préférences Système et de démarrer/arrêter le partage internet à chaque fois que je change de lieu, donc j'aimerais avoir une commande rapide ou un script à lancer et faire le changement à la demande.

Des conseils ou des idées ?

0voto

Dori Points 7167

La façon la plus simple de le faire est de combiner la méthode de @Philip respuesta avec le RéseauLocalisation application. NL peut savoir où vous êtes et exécuter automatiquement un AppleScript lorsqu'il détecte que vous avez changé d'emplacement.

Je pense qu'il s'agit d'un logiciel obligatoire si vous avez un ordinateur portable. Sinon, c'est un véritable casse-tête de devoir réinitialiser manuellement plusieurs paramètres chaque fois que je change de lieu.

0voto

Légèrement différent de l'autre applescript posté (je pense d'une meilleure manière mais ). Avoir des options peut parfois aider.

 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

0voto

PaSe Points 1

Avant/après toute configuration, l'interface ou les interfaces impliquées dans le partage doivent être désactivées/activées :

networksetup -setairportpower en1 off

puis sur. ( networksetup -setairportpower en1 on )

Mon wifi était répertorié comme en1 pour rechercher le vôtre, utilisez networksetup -listnetworkserviceorder . Plus précisément, lorsque vous démarrez le partage d'Internet, vous devrez ajouter une fonctionnalité NAT plus détaillée que le simple réglage de l'élément activé.

Le NAT est activé/désactivé par le bit : -int 0 = désactivé -int 1 = sur

La seule chose qui est écrite dans /Library/Preferences/SystemConfiguration/com.apple.nat.plist avec

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

es

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

Vous devrez modifier votre fichier plist pour qu'il ressemble à ce qui suit :

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

Comme vous pouvez le constater, mon fichier plist NAT peut nécessiter une petite personnalisation pour répondre à vos besoins.

0voto

r0mer0 Points 1

Comme la solution de script GUI postée précédemment exige que les utilisateurs internationaux ajustent les noms des fenêtres et des boutons, j'ai conçu une version qui fonctionne avec n'importe quelle langue du système. Elle fonctionne également pour l'autre option de partage, et donne un retour d'information localisé sur l'état du partage. J'utilise deux services Automator différents basés sur cette solution, l'un pour activer le partage de fichiers et l'autre pour activer le partage d'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

0voto

japa Points 1

Modifié un des scripts ci-dessus pour basculer le partage d'Internet sur OSX MOJAVE (10.14), cela fonctionne :

tell application "System Preferences"
    activate
    reveal (pane id "com.apple.preferences.sharing")
    delay 0.3
    set current pane to pane "com.apple.preferences.sharing"
    delay 0.3
    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 7 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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X