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

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

0voto

Dave Penneys Puntos 3064

La forma más fácil de hacerlo es combinar el método de @Philip respuesta con el RedLocalización aplicación. NL puede saber dónde estás y ejecutar automáticamente un AppleScript cuando detecta que has cambiado de ubicación.

Creo que es un software necesario si tienes un ordenador portátil; de lo contrario, es una molestia tener que restablecer manualmente varias configuraciones cada vez que cambio de ubicación.

0 votos

Suena como Marco Polo ( symonds.id.au/marcopolo ) pero sin los esteroides de Marco Polo. :)

0 votos

@Ian - Esa página dice que MP tiene problemas conocidos con Snow Leopard. El Grupo Google dice que "el proyecto MarcoPolo no está muerto, per se, pero se está desarrollando muy lentamente. No esperes una nueva versión pronto". El repositorio git no muestra ninguna actualización desde septiembre de 2009. Me parece que los esteroides podrían estar alcanzando a alguien ;-)

0 votos

No puedo decir que haya tenido ningún problema con él en SL guardar para BlueTooth. Simplemente no utilizo la función de activar/desactivar/detectar BT y funciona bastante bien. (Pero se entiende el punto)

0voto

UnkwnTech Puntos 21942

Puede que quieras echar un vistazo a esta pregunta (posiblemente fuera de tema para Stack Overflow) y su respuesta: Cómo iniciar/detener el uso compartido de Internet utilizando AppleScript .

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

0voto

Pavel V. S. Puntos 1

Antes/después de cualquier configuración, la interfaz o las interfaces implicadas en la compartición necesitan ser apagadas/encendidas con:

networksetup -setairportpower en1 off

y después. ( networksetup -setairportpower en1 on )

Mi wifi aparecía como en1 Para buscar el suyo, utilice networksetup -listnetworkserviceorder . Más aún, cuando se inicia el uso compartido de Internet tendrá que añadir una funcionalidad NAT más detallada que simplemente establecer el bit habilitado.

NAT se activa/desactiva con un bit: -int 0 = off -int 1 = en

Lo único que está escrito en /Library/Preferences/SystemConfiguration/com.apple.nat.plist con

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>

Tendrá que cambiar su archivo plist para que tenga el siguiente aspecto:

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

Como puedes ver mi archivo plist NAT puede necesitar un poco de personalización para adaptarse a tus necesidades.

0voto

robo Puntos 136

Dado que la solución de scripting de la GUI publicada anteriormente requiere que los usuarios internacionales ajusten los nombres de las ventanas y los botones, he ideado una versión que funciona con cualquier idioma del sistema. También funciona para la otra opción de compartir, y da información localizada sobre el estado de compartir. Utilizo dos servicios diferentes de Automator basados en esto, uno para alternar el uso compartido de archivos y otro para alternar el uso compartido de 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

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