Actualizar el panel de preferencias después de usar la escritura predeterminada

Estoy usando la escritura predeterminada para establecer/deshabilitar la opción Bloquear todas las conexiones entrantes del firewall OSX.

sudo defaults write /Library/Preferences/com.apple.alf globalstate -int 2
sudo defaults write /Library/Preferences/com.apple.alf globalstate -int 1

Me di cuenta de que la opción no está configurada si el panel de preferencias está abierto.
¿Hay alguna forma de evitar este comportamiento, posiblemente actualizando la interfaz de usuario del Panel de preferencias después de establecer el nuevo valor?

Respuestas (1)

Depende de si desea seguir con Shell o usar AppleScript. Este script de applescript le da una ventana emergente para la contraseña:

do shell script "defaults write /Library/Preferences/com.apple.alf globalstate -int SomeInteger" with administrator privileges
tell application "System Events" to if (first application process whose name is "System Preferences") exists then
    tell application "System Preferences"
        quit
        delay 1
        activate
        set current pane to pane "com.apple.preference.security"
    end tell
    tell application process "System Preferences" to tell window 1 to tell tab group 1 to tell radio button "Firewall" to perform action "AXPress"
end if

En Terminal, se ve desordenado:

sudo defaults write /Library/Preferences/com.apple.alf globalstate -int SomeInteger; osascript -e 'tell application "System Events" to if (first application process whose name is "System Preferences") exists then' -e 'tell application "System Preferences"' -e 'quit' -e 'delay 1' -e 'activate' -e 'set current pane to pane "com.apple.preference.security"' -e 'end tell' -e 'tell application process "System Preferences" to tell window 1 to tell tab group 1 to tell radio button "Firewall" to perform action "AXPress"' -e 'end if'

Reemplace SomeIntegercon un valor.

Actualizar:

set firewallState to do shell script "defaults read /Library/Preferences/com.apple.alf globalstate"

if firewallState is "1" then
    tell application "System Events" to display notification with title "Switching Firewall from This to That"
    set newState to "2"
end if

if firewallState is "2" then
    tell application "System Events" to display notification with title "Switching Firewall from That to This"
    set newState to "1"
end if

do shell script ("defaults write /Library/Preferences/com.apple.alf globalstate -int " & newState) with administrator privileges

tell application "System Events" to if (first application process whose name is "System Preferences") exists then
    tell application "System Preferences"
        quit
        delay 1
        activate
        set current pane to pane "com.apple.preference.security"
    end tell
    tell application process "System Preferences" to tell window 1 to tell tab group 1 to tell radio button "Firewall" to perform action "AXPress"
end if
Interesante. Pero noté que debe garantizar el acceso de Automator a Accesibilidad para reabrir el Panel de preferencias: ¿es necesario?
@pasine Sí, se llama GUI Scripting. De hecho, permite que la secuencia de comandos tome el control del cursor y realice acciones por usted. Olvidé la parte donde dijiste "la opción no está configurada si el panel de preferencias está abierto". Lo siento. El código tiene que ser actualizado para superar eso. Quizas mas tarde.
Creo que tu solución es mejor que la mía. Pero no me gusta la idea de salir del panel de preferencias sin alertar al usuario, así que agregué un cuadro de diálogo antes de cerrarlo y aplicar la opción: ¿qué te parece? gist.github.com/pasine/2361dbe0c147698ca926
@pasine en el espíritu de superación cordial, vea la actualización.
Genial, mira mi nueva versión. Prefiero comprobar que la opción se ha configurado correctamente antes de notificar al usuario.
@pasine bravo, señor. Personalmente detesto la ventana de diálogo. Es desgarbado de ver y laborioso de hacer clic. Si elige usar display dialog, ¿puedo sugerir que lo elimine with administrator privileges? Muestra una ventana de advertencia con un campo de texto de caracteres ocultos que solicita amablemente la contraseña y canaliza la cadena resultante en sudo defaults write.
He actualizado la esencia con mi versión definitiva. Lo estoy usando con Alfred, así que decidí mantener la oportunidad de activar/desactivar la opción o alternar el estado actual. Gracias por su apoyo, realmente me ayudó a resolver muchas cosas.
Hola @fartheraway, como he notado que tienes una buena experiencia con Applescript, ¿puedes explicarme por qué sucede esto? apple.stackexchange.com/questions/187101/…