26 votos

¿Iniciar/detener el uso compartido de Internet desde un script?

¿Hay alguna forma de iniciar/detener el uso compartido de Internet desde la línea de comandos o tal vez un script de Apple?

El caso es que me muevo con el portátil entre casa y el trabajo. En un sitio tengo internet inalámbrico (y por tanto tengo que desactivar el uso compartido de internet), y en el otro tengo internet desde un cable ethernet y configuro el ordenador para compartir internet con otros dispositivos creando una pequeña red inalámbrica.

Pero se está volviendo un poco tedioso tener que ir a Preferencias del Sistema e iniciar/detener el uso compartido de Internet cada vez que cambio de ubicación, así que me gustaría tener un comando rápido o script para lanzar y hacer el cambio bajo demanda.

¿Algún consejo o idea?

0 votos

Mankoff, cuando ejecuto tu sugerencia: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.InternetSharing.plist parece que se ejecuta bien e incluso el gui de preferencias de compartición se actualiza correctamente cuando se refresca, sin embargo la conexión no funciona. Si ejecuto el comando de nuevo, incluso falla porque piensa que ya está cargado. Además, si ejecuto el comando "top" para ver el proceso que se está ejecutando, no veo "InternetSharing", pero si lo inicio en la guía de preferencias, veo que el proceso "InternetSharing" se está ejecutando y la conexión funciona. Alguna idea de por qué estoy h

0 votos

No estoy seguro de por qué tienes ese comportamiento. Veo "InternetSharing" en la parte superior (o más fácil, ps aux | grep -i internet ).

0 votos

Estoy usando OS X 10.6. Si tienes una versión diferente quizás sea por eso...

20voto

Para iniciar la compartición de Internet desde la CLI:

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

Para parar, cambie el carga a descargar .

Tenga en cuenta que si tiene el panel de preferencias abierto cuando ejecute esto, no verá que el cambio surta efecto inmediatamente (la interfaz de usuario no se actualizará), pero funciona.

5voto

Mike Polen Puntos 3173

Una forma de hacerlo es mediante scripts de la GUI -Preferencias del Sistema no tiene soporte de Applescript por defecto.

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

0 votos

-1 excesivamente complejo.

3 votos

Tal vez, pero funciona y la respuesta está dentro de las limitaciones de la pregunta del OP: "¿Existe una forma de iniciar/detener el uso compartido de Internet desde la línea de comandos o tal vez un apple script ?" El downvoting debería reservarse para las respuestas realmente atroces. Gracias

1 votos

De ahí que no haya un downvote "oficial" :).

4voto

alex gray Puntos 479

Tuve resultados mucho mejores (para una configuración de uso compartido ya configurada) en 10.11.6 con las variaciones simples...

sudo launchctl start com.apple.NetworkSharing

y

sudo launchctl stop com.apple.NetworkSharing

respectivamente.

2voto

juanfal Puntos 21

Solución definitiva a las constantes averías del wifi en MacosX

He encontrado un sistema que finalmente funciona y cuando, con menos frecuencia, se rompe el wifi compartido, consigue recuperarlo automáticamente en un minuto.

La solución es un ~/Library/LaunchAgents/com.me.wifisharingup.plist daemon con el siguiente contenido:

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

Puedes ver, cada minuto ejecuta el simple script que sigue. Ten cuidado haciendo que el plist anterior sea propiedad del Root y lánzalo con:

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

El script que lanza cada minuto (no olvides hacerlo ejecutable) es:

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

Creo que la simple llamada periódica (cada minuto) a ipconfig getifaddr en1 refresca algo en lo que es el demonio de compartir wifi. Sea lo que sea, en cualquier momento el compartir wifi falla, pierde la dirección IP auto asignada, y entonces, ipconfig getifaddr en1 falla, por lo que mi script reinicia totalmente el wifi, haciendo que reconstruya su estado anterior y recuperando el wifi compartido.

De momento lleva días funcionando dentro de un MacMini sin teclado, ratón ni monitor, pero sólo enchufado a la Ethernet y dando acceso a mis gadgets wifi al mundo.

1voto

Bernhard Wagner Puntos 111

Utilizo el siguiente script para alternar el uso compartido de Internet en un MacBook Pro de principios de 2011 / 10.11.3 El Capitan, así que con un hardware más nuevo podrías conseguir retrasos más cortos. Adopta ideas de varios script publicados para este fin (localización, activación/desactivación del wifi mediante networksetup , cerrar System Preferences al terminar).

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X