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 ?

20voto

Pour lancer le Partage d'Internet à partir de l'interface CLI :

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

Pour arrêter, changez le charge à décharger .

Notez que si vous avez le volet Préfixe ouvert lorsque vous exécutez cette opération, vous ne verrez pas le changement prendre effet immédiatement (l'interface utilisateur ne sera pas mise à jour), mais cela fonctionne.

5voto

Mike Polen Points 3173

L'un des moyens d'y parvenir est d'utiliser des scripts pour l'interface graphique - les Préférences Système n'ont pas de support Applescript par défaut.

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

2voto

juanfal Points 41

Solution définitive à la panne constante du partage wifi dans MacosX.

J'ai trouvé un système qui finalement travaux et lorsque, plus rarement, le partage wifi s'interrompt, il parvient à le récupérer automatiquement en une minute.

La solution est un ~/Library/LaunchAgents/com.me.wifisharingup.plist daemon avec le contenu suivant :

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

Vous pouvez voir que chaque minute, il exécute le simple script qui suit. Faites attention à ce que le plist précédent soit la propriété de la Racine et lancez-le avec :

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

Le script qu'il lance chaque minute (n'oubliez pas de le rendre exécutable) est :

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

Je pense que le simple appel périodique (à chaque minute) à ipconfig getifaddr en1 rafraîchit quelque chose dans ce qui est le démon de partage wifi. Quoi qu'il en soit, dès que le partage wifi échoue, il perd l'adresse IP qu'il s'était assignée, et ensuite.., ipconfig getifaddr en1 échoue, alors mon script réinitialise totalement le wifi, le faisant reconstruire son état précédent et récupérant le partage du wifi.

Jusqu'à présent, il a fonctionné pendant plusieurs jours à l'intérieur d'un MacMini sans clavier, souris ou écran, mais seulement branché sur l'Ethernet et donnant à mes gadgets wifi un accès au monde.

1voto

Amos Points 121

Je me suis inspiré de la réponse de Mankoff et je l'ai emballé dans un AppleScript. J'utilise ce script à partir d'Automator afin de pouvoir facilement l'utiliser comme un service et lui donner un raccourci clavier.

Basculer le partage d'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

0voto

UnkwnTech Points 21942

Vous voudrez peut-être jeter un coup d'œil à cette question (peut-être hors sujet pour Stack Overflow) et à sa réponse : Comment démarrer/arrêter le partage d'Internet à l'aide d'AppleScript ? .

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

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