2 votos

Actualizar el Panel de Preferencias después de usar la escritura por defecto

Estoy usando la escritura por defecto para configurar/desconfigurar la opción Bloquear todas las conexiones entrantes del firewall de OSX.

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

Me he dado cuenta de que la opción no se activa 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?

1voto

Tim Brigham Puntos 8727

Depende de si quieres seguir con shell, o usar applescript. Este applescript script 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, parece 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'

Sustituir SomeInteger con un valor.

Actualización:

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

0 votos

Interesante. Pero me he dado cuenta de que hay que garantizar el acceso de Automator a Accesibilidad para volver a abrir el Panel de Preferencias: ¿es necesario?

0 votos

@pasine Sí, se llama GUI Scripting. Efectivamente permites que el script tome el control del cursor y realice acciones por ti. Olvidé la parte en la que decías "la opción no se activa si el panel de preferencias está abierto". Perdón. Hay que actualizar el código para solucionar eso. Tal vez más tarde.

0 votos

Creo que tu solución es mejor que la mía. Pero no me gusta la idea de salir del panel de preferencias sin avisar al usuario, así que he añadido un cuadro de diálogo antes de cerrarlo y aplicar la opción: ¿qué te parece? gist.github.com/pasine/2361dbe0c147698ca926

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