Actualmente estoy trabajando en la instalación automatizada de Mavericks 10.9. Tengo configurado NetBoot. Todo funciona bien hasta que quiero ejecutar Applescript. Desde el lanzamiento de la nueva versión, necesito habilitar manualmente esos scripts. ¿Hay algún comando que pueda usar en el script de shell para agregar una aplicación a la lista de dispositivos de asistencia? ¿O tal vez hay algún plist que debe editarse para que funcione?
Los ajustes se almacenan en /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|
El esquema, dado por sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db '.schema access'
, es:
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));
En mi instalación, las últimas cuatro columnas ( client_type
, allowed
, prompt_count
y csreq
) son 0|1|0|\xfa\xde\x0c
para las aplicaciones que se agregaron después de que "example.app" would like to control this computer using accessibility features
se mostró el cuadro de diálogo y 0|1|1|
para las aplicaciones que agregué colocándolas en la lista de Preferencias del sistema.
~/Library/Preferences/com.apple.universalaccessAuthWarning.plist
contiene una lista de aplicaciones para las que se ha mostrado el cuadro de diálogo de advertencia:
$ 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;
}
Sin embargo, no pude averiguar cómo permitir el acceso de dispositivos de asistencia para una aplicación. Intenté, por ejemplo, ejecutar estos comandos:
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
También intenté reiniciar para aplicar los cambios y establecer las últimas cuatro columnas en 0,1,1,""
.
sudo sqlite3 ...
. ~/Library/Preferences/com.apple.universalaccessAuthWarning.plist
no interviene en la concesión de permisos, solo registra si se ha mostrado un aviso para evitar molestar a los usuarios con avisos repetidos.??
( \xfa\xde\x0c
) proviene de la csreq
columna, que contiene una especie de huella digital de la aplicación especificada; OSX gestiona eso automáticamente entre bastidores, sin necesidad de especificarlo nunca. El valor real es mucho más largo; el truncamiento a 3 bytes proviene de intentar generar el valor binario (tipo de datos BLOB
) como si fuera una cadena, lo que hace que la salida se detenga en el primer byte NUL (la ?
raíz del \xfa
y \xde
no siendo caracteres válidos en la codificación UTF8, \x0c
es una vertical pestaña que efectivamente crea un salto de línea).csreq
columna contiene los requisitos designados compilados para la aplicación, consulte goo.gl/z10vl y la guía detallada de firma de código TN2206 de Apple . Los requisitos designados son esencialmente una secuencia de comandos que valida la identidad de una aplicación al verificar la identificación y los certificados del paquete.También puede agregar el archivo siguiendo los comandos a continuación.
Este comando encontrará el identificador de paquete para la aplicación que intenta agregar a los dispositivos de asistencia.
/usr/libexec/PlistBuddy -c 'Print CFBundleIdentifier' /Applications/enterapplicaitonnamehere.app/Contents/Info.plist
Digamos que la aplicación que intentaba agregar era SKYPE. Luego ingresaría esto a continuación:
/usr/libexec/PlistBuddy -c 'Print CFBundleIdentifier' /Applications/Skype.app/Contents/Info.plist
Y su identificador de paquete sería:
com.skype.skype
Luego usa esta salida en el siguiente comando:
sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "REPLACE INTO access VALUES('kTCCServiceAccessibility','',0,1,1,NULL);"
Para Skype se vería así:
sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "REPLACE INTO access VALUES('kTCCServiceAccessibility','com.skype.skype',0,1,1,NULL);"
Para eliminar la aplicación, usaría elsudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "delete from access where client='com.skype.skype';"
REPLACE INTO
en lugar de INSERT INTO
para garantizar que el comando funcione incluso si la base de datos ya tiene una entrada para la aplicación especificada.REPLACE INTO
es un alias para los más descriptivos INSERT OR REPLACE INTO
).
jay thompson
karolberlinski
AbsterT