Anwendung erlauben, Computer (Hilfsgeräte) auf Mavericks über Terminal zu steuern?

Ich arbeite derzeit an der automatisierten Installation von Mavericks 10.9. Ich habe NetBoot eingerichtet. Alles funktioniert OK, bis ich Applescript ausführen möchte. Seit der Veröffentlichung der neuen Version muss ich diese Skripte manuell aktivieren. Gibt es einen Befehl, den ich im Shell-Skript verwenden kann, um eine App zur Liste der Hilfsgeräte hinzuzufügen? Oder gibt es vielleicht eine Plist, die bearbeitet werden muss, damit es funktioniert?

Ich bin mir nicht ganz sicher, ob Sie das sehen, aber dieser Artikel könnte helfen: support.apple.com/kb/HT5914
Danke für Ihre Antwort. Auf der Suche nach einer Lösung bin ich auch auf diesen Artikel gestoßen. Es ist nicht das, wonach ich suche, da diese Lösung immer noch GUI-Interaktion verwendet.
@KarolBerlinski Was war die Problemumgehung, die Sie verwendet haben? Ich versuche immer noch herauszufinden, wie ich eine App über die Befehlszeile oder eine Nicht-GUI-Methode zu den Hilfsgeräten hinzufügen kann. Danke Abraham

Antworten (2)

Die Einstellungen werden gespeichert in /Library/Application Support/com.apple.TCC/TCC.db:

$ sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db 'select * from access'
kTCCServiceAccessibility|com.apple.ScriptEditor2|0|1|0|��

kTCCServiceAccessibility|com.red-sweater.FastScripts|0|1|0|��

kTCCServiceAccessibility|com.apple.AccessibilityInspector|0|1|0|��

kTCCServiceAccessibility|com.slate.Slate|0|1|0|��

kTCCServiceAccessibility|com.apple.Automator|0|1|1|
kTCCServiceAccessibility|com.googlecode.iterm2|0|1|1|

Das Schema, wie durch gegeben sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db '.schema access', ist:

CREATE TABLE access (service TEXT NOT NULL, client TEXT NOT NULL, client_type INTEGER NOT NULL, allowed INTEGER NOT NULL, prompt_count INTEGER NOT NULL, csreq BLOB, CONSTRAINT key PRIMARY KEY (service, client, client_type));

Bei meiner Installation sind die letzten vier Spalten ( client_type, allowed, prompt_countund csreq) 0|1|0|\xfa\xde\x0cfür Anwendungen, die hinzugefügt wurden, nachdem das "example.app" would like to control this computer using accessibility featuresDialogfeld angezeigt wurde, und 0|1|1|für Anwendungen, die ich hinzugefügt habe, indem ich sie in die Liste in den Systemeinstellungen gezogen habe.

~/Library/Preferences/com.apple.universalaccessAuthWarning.plistenthält eine Liste der Anwendungen, für die der Warndialog angezeigt wurde:

$ defaults read com.apple.universalaccessAuthWarning
{
    "/Applications/Automator.app" = 1;
    "/Applications/Automator.app/Contents/MacOS/Automator" = 1;
    "/Applications/FastScripts.app" = 1;
    "/Applications/FastScripts.app/Contents/MacOS/FastScripts" = 1;
    "/Applications/Slate.app" = 1;
    "/Applications/Slate.app/Contents/MacOS/Slate" = 1;
    "/Applications/Utilities/AppleScript Editor.app" = 1;
    "/Applications/Utilities/AppleScript Editor.app/Contents/MacOS/AppleScript Editor" = 1;
    "/Applications/Xcode.app/Contents/Applications/Accessibility Inspector.app" = 1;
    "/Applications/Xcode.app/Contents/Applications/Accessibility Inspector.app/Contents/MacOS/Accessibility Inspector" = 1;
    "/Applications/iTerm.app" = 1;
    "/Applications/iTerm.app/Contents/MacOS/iTerm" = 1;
    "/Users/lauri/Desktop/aa.app" = 1;
    "/Users/lauri/Desktop/aa.app/Contents/MacOS/applet" = 1;
    "com.apple.AccessibilityInspector" = 1;
    "com.apple.Automator" = 1;
    "com.apple.ScriptEditor.id.aa" = 1;
    "com.apple.ScriptEditor2" = 1;
    "com.red-sweater.FastScripts" = 1;
    "com.slate.Slate" = 1;
}    

Ich konnte jedoch nicht herausfinden, wie man tatsächlich den Zugriff für Hilfsgeräte für eine Anwendung erlaubt. Ich habe zum Beispiel versucht, diese Befehle auszuführen:

sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db 'insert into access values ("kTCCServiceAccessibility","com.apple.ScriptEditor.id.qq",0,1,0,"'$'\xfa\xde\x0c''");'
defaults write com.apple.universalaccessAuthWarning com.apple.ScriptEditor.id.qq -bool true
defaults write com.apple.universalaccessAuthWarning /Users/lauri/Desktop/qq.app -bool true
defaults write com.apple.universalaccessAuthWarning /Users/lauri/Desktop/qq.app/Contents/MacOS/applet -bool true
sudo killall tccd

Ich habe auch versucht, neu zu starten, um die Änderungen zu übernehmen und die letzten vier Spalten auf 0,1,1,"".

Vielen Dank für Ihr Feedback. Dank dessen konnte ich Abhilfe schaffen. Der tccd-Prozess kann nicht beendet werden, hier reicht nur ein Neustart. Ich starte die App, die Barrierefreiheit benötigt, verwende dann sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db 'Update Access Set Allowed=1' und starte dann das System neu. Es klappt. Nochmals vielen Dank (Wenn Sie Zugriff auf eine App aus der Liste benötigen, können Sie Ihrer SQL eine WHERE-Klausel hinzufügen).
+1 für großartige Detektivarbeit. Siehe die Antwort von AbsterT für eine funktionierende Programmmatik basierend auf sudo sqlite3 .... ~/Library/Preferences/com.apple.universalaccessAuthWarning.plistist nicht an der Vergabe von Berechtigungen beteiligt, sondern zeichnet nur auf, ob eine Warnung angezeigt wurde, um Benutzer nicht mit wiederholten Warnungen zu verärgern.
Der Wert ??( ) stammt aus der Spalte, die eine Art Fingerabdruck der angegebenen App enthält; OSX verwaltet dies automatisch hinter den Kulissen – Sie müssen es nie angeben. Der tatsächliche Wert ist viel länger; Die Kürzung auf 3 Byte kommt von dem Versuch, den Binärwert (Datentyp ) so auszugeben, als wäre er eine Zeichenfolge, wodurch die Ausgabe beim ersten NUL-Byte gestoppt wird (der Stamm von und , der keine gültigen Zeichen in der UTF8-Codierung ist, ist eine vertikale Tab, der effektiv einen Zeilenumbruch erzeugt). \xfa\xde\x0ccsreqBLOB?\xfa\xde\x0c
Die csreqSpalte enthält die zusammengestellten festgelegten Anforderungen für die App, siehe goo.gl/z10vl und Apples TN2206 Code Signing in Depth Guide. Die festgelegten Anforderungen sind im Wesentlichen ein Skript, das die Identität einer App validiert, indem es die Paket-ID und die Zertifikate überprüft.
Diese Technik scheint von Dropbox verwendet zu werden, um Barrierefreiheitsberechtigungen ohne Benutzerbeteiligung hinzuzufügen: applehelpwriter.com/2016/08/29/…

Sie können die Datei auch hinzufügen, indem Sie den folgenden Befehlen folgen.

Dieser Befehl findet die Bundle-ID für die Anwendung, die Sie zu Hilfsgeräten hinzufügen möchten.

/usr/libexec/PlistBuddy -c 'Print CFBundleIdentifier' /Applications/enterapplicaitonnamehere.app/Contents/Info.plist

Angenommen, die Anwendung, die Sie hinzufügen wollten, war SKYPE. Das gibst du dann unten ein:

/usr/libexec/PlistBuddy -c 'Print CFBundleIdentifier' /Applications/Skype.app/Contents/Info.plist

Und Ihre Bundle-ID wäre:

com.skype.skype

Diese Ausgabe verwenden Sie dann im folgenden Befehl:

sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "REPLACE INTO access VALUES('kTCCServiceAccessibility','',0,1,1,NULL);" 

Für Skype würde es so aussehen:

sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "REPLACE INTO access VALUES('kTCCServiceAccessibility','com.skype.skype',0,1,1,NULL);" 

Um die Anwendung zu entfernen, würden Sie die verwendensudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "delete from access where client='com.skype.skype';"

+1, aber aus Robustheitsgründen ist es besser, REPLACE INTOanstelle von zu verwenden INSERT INTO, um sicherzustellen, dass der Befehl auch dann funktioniert, wenn die Datenbank bereits einen Eintrag für die angegebene Anwendung enthält.
@mklement Würde das die Anwendung hinzufügen, wenn die Anwendung nicht bereits in der Datenbank vorhanden wäre?
Ja, das würde es ( REPLACE INTOist ein Alias ​​für die aussagekräftigeren INSERT OR REPLACE INTO).
Das REPLACE INTO funktioniert perfekt und besser als das INSERT INTO.
Funktioniert diese Methode für ausführbare Binärdateien, die sich in einem .prefpane-Bundle befinden?
Für El Capitan scheint die Zugriffstabelle 7 statt 6 Spalten zu haben. Ich musste der Liste der Parameter eine zusätzliche NULL hinzufügen.