¿Permitir que la aplicación controle la computadora (dispositivos de asistencia) en Mavericks a través de la Terminal?

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?

No estoy totalmente seguro de que esto sea lo que estás viendo, pero este artículo podría ayudarte: support.apple.com/kb/HT5914
Gracias por la respuesta. También me topé con este artículo mientras buscaba una solución. No es lo que estoy buscando ya que esta solución todavía usa la interacción GUI.
@KarolBerlinski ¿Cuál fue la solución alternativa que usó? Todavía estoy tratando de descubrir cómo agregar una aplicación a los dispositivos de asistencia a través de la línea de comandos o un método que no sea GUI. gracias abraham

Respuestas (2)

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_county csreq) son 0|1|0|\xfa\xde\x0cpara las aplicaciones que se agregaron después de que "example.app" would like to control this computer using accessibility featuresse 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.plistcontiene 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,"".

Muchas gracias por tus comentarios. Pude hacer una solución gracias a eso. El proceso tccd no se puede eliminar, solo reiniciar será suficiente aquí. Inicio la aplicación que necesita Accesibilidad, luego uso sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db 'update access set allow=1' y luego reinicio el sistema. Funciona. Gracias de nuevo (si necesita acceso para una aplicación de la lista, puede agregar la cláusula WHERE a su sql).
+1 por gran investigación. Consulte la respuesta de AbsterT para una programación funcional basada en sudo sqlite3 .... ~/Library/Preferences/com.apple.universalaccessAuthWarning.plistno interviene en la concesión de permisos, solo registra si se ha mostrado un aviso para evitar molestar a los usuarios con avisos repetidos.
El valor ??( \xfa\xde\x0c) proviene de la csreqcolumna, 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 \xfay \xdeno siendo caracteres válidos en la codificación UTF8, \x0ces una vertical pestaña que efectivamente crea un salto de línea).
La csreqcolumna 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.
Esta técnica parece ser utilizada por Dropbox para agregar derechos de Accesibilidad sin la participación del usuario: applehelpwriter.com/2016/08/29/…

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';"

+1, pero por robustez es mejor usar REPLACE INTOen lugar de INSERT INTOpara garantizar que el comando funcione incluso si la base de datos ya tiene una entrada para la aplicación especificada.
@mklement ¿Agregaría eso la aplicación si la aplicación aún no existiera en la base de datos?
Sí, lo haría ( REPLACE INTOes un alias para los más descriptivos INSERT OR REPLACE INTO).
REPLACE INTO funciona perfectamente y mejor que INSERT INTO.
¿Funciona este método para binarios ejecutables que están dentro de un paquete .prefpane?
Para El Capitán, la tabla de acceso parece tener 7 columnas en lugar de 6. Necesitaba agregar un NULL adicional a la lista de parámetros.