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?
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_count
und csreq
) 0|1|0|\xfa\xde\x0c
für Anwendungen, die hinzugefügt wurden, nachdem das "example.app" would like to control this computer using accessibility features
Dialogfeld 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.plist
enthä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,""
.
sudo sqlite3 ...
. ~/Library/Preferences/com.apple.universalaccessAuthWarning.plist
ist 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.??
( ) 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\x0c
csreq
BLOB
?
\xfa
\xde
\x0c
csreq
Spalte 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.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';"
REPLACE INTO
anstelle 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.REPLACE INTO
ist ein Alias für die aussagekräftigeren INSERT OR REPLACE INTO
).
Jay Thompson
KarlBerlinski
AbsterT