Aktualisieren Sie das Einstellungsfenster, nachdem Sie den Standardschreibmodus verwendet haben

Ich verwende die Standard-Schreibfunktion, um die Option „Alle eingehenden Verbindungen blockieren“ der OSX-Firewall zu aktivieren/deaktivieren.

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

Mir ist aufgefallen, dass die Option nicht gesetzt ist, wenn das Einstellungsfenster geöffnet ist.
Gibt es eine Möglichkeit, dieses Verhalten zu vermeiden und möglicherweise die Benutzeroberfläche des Einstellungsfelds zu aktualisieren, nachdem der neue Wert festgelegt wurde?

Antworten (1)

Hängt davon ab, ob Sie bei der Shell bleiben oder Applescript verwenden möchten. Dieses Applescript-Skript gibt Ihnen ein Popup für das Passwort:

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

Im Terminal sieht es chaotisch aus:

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'

SomeIntegerDurch einen Wert ersetzen .

Aktualisieren:

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
Interessant. Aber mir ist aufgefallen, dass Sie Automator den Zugriff auf Barrierefreiheit garantieren müssen, um das Einstellungsfenster erneut zu öffnen: Ist das notwendig?
@pasine Ja, es heißt GUI Scripting. Sie erlauben dem Skript effektiv, den Cursor zu übernehmen und Aktionen für Sie auszuführen. Ich habe den Teil vergessen, in dem Sie sagten: "Die Option ist nicht festgelegt, wenn das Einstellungsfenster geöffnet ist". Verzeihung. Der Code muss aktualisiert werden, um dies zu überwinden. Vielleicht später.
Ich finde deine Lösung besser als meine. Aber ich mag die Idee nicht, das Einstellungsfenster zu verlassen, ohne den Benutzer zu warnen, also habe ich ein Dialogfeld hinzugefügt, bevor ich es schließe und die Option anwende: was denkst du? gist.github.com/pasine/2361dbe0c147698ca926
@pasine ganz im Zeichen der geselligen Überlegenheit, siehe Update.
Schön, überprüfen Sie meine neue Version. Ich ziehe es vor, zu überprüfen, ob die Option richtig eingestellt wurde, bevor ich den Benutzer benachrichtige.
@pasine bravo, mein Herr. Ich persönlich hasse Dialogfenster. Es ist unansehnlich anzusehen und mühsam zu klicken. Wenn Sie sich für die Verwendung entscheiden display dialog, darf ich vorschlagen, sie zu löschen with administrator privileges? Zeigen Sie ein Warnfenster mit einem Textfeld mit versteckten Zeichen an, das freundlich nach dem Passwort fragt, und leiten Sie die resultierende Zeichenfolge in sudo defaults write.
Ich habe das Wesentliche mit meiner endgültigen Version aktualisiert. Ich verwende es mit Alfred, also habe ich beschlossen, die Möglichkeit zu behalten, die Option ein-/auszuschalten oder den aktuellen Status umzuschalten. Vielen Dank für Ihre Unterstützung, Sie haben mir wirklich geholfen, viele Dinge herauszufinden.
Hey @fartheraway, wie ich festgestellt habe, hast du gute Erfahrungen mit Applescript, kannst du mir erklären, warum das passiert? apple.stackexchange.com/questions/187101/…