10 votos

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

Actualmente estoy trabajando en la instalación automatizada de Mavericks 10.9. Tengo NetBoot configurado. Todo funciona bien hasta que quiero ejecutar un Applescript. Desde el lanzamiento de la nueva versión, necesito habilitar manualmente esos scripts. ¿Hay un comando que pueda usar en el script de shell para agregar la aplicación a la lista de Dispositivos de Asistencia? ¿O quizás hay algún archivo plist que deba editarse para que funcione?

0 votos

No estoy totalmente seguro de que esto es lo que ves, pero este artículo podría ayudar: support.apple.com/kb/HT5914

0 votos

Gracias por la respuesta. También me encontré con este artículo mientras buscaba una solución. No es lo que estoy buscando ya que esta solución todavía utiliza la interacción de la GUI.

0 votos

@KarolBerlinski ¿Cuál fue la solución alternativa que utilizaste? Todavía estoy tratando de averiguar 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

12voto

Fuzzy Purple Monkey Puntos 702

La configuración se almacena 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, según lo indicado por sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db '.schema access', es:

CREATE TABLE access (service TEXT NOT NULL, client TEXT NOT 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 aplicaciones que se añadieron después de que se mostrara el diálogo "ejemplo.app" desea controlar este equipo mediante funciones de accesibilidad y 0|1|1| para aplicaciones que añadí arrastrándolas a la lista en Preferencias del Sistema.

~/Library/Preferences/com.apple.universalaccessAuthWarning.plist contiene una lista de aplicaciones para las cuales se ha mostrado el 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;
}    

A pesar de eso, no pude descubrir cómo permitir el acceso a 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 como 0,1,1,"".

2 votos

Gracias por tus comentarios. Pude encontrar una solución gracias a ellos. El proceso tccd no puede ser detenido, solo un reinicio 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 allowed=1' y luego reinicio el sistema. Funciona. Gracias nuevamente (Si necesitas acceso para una aplicación de la lista, puedes agregar una cláusula WHERE a tu SQL).

0 votos

+1 por la gran investigación. Ver respuesta de AbsterT para un programa funcional basado en sudo sqlite3 .... ~/Library/Preferences/com.apple.universalaccessAuthWarning.p‌​list no está involucrado en la concesión de permisos, solo registra si se ha mostrado una advertencia para evitar molestar a los usuarios con advertencias repetidas.

2 votos

El valor ?? (\xfa\xde\x0c) se deriva de la columna csreq, que contiene una especie de huella digital de la aplicación especificada; OSX gestiona eso automáticamente detrás de escena, no es necesario especificarlo nunca. El valor real es mucho más largo; la truncación a 3 bytes se debe a intentar de mostrar 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 (los ? provienen de que los caracteres \xfa y \xde no son válidos en codificación UTF8, \x0c es un tabulador vertical que efectivamente crea un salto de línea).

8voto

SurDin Puntos 755

También puedes agregar el archivo siguiendo los comandos a continuación.

Este comando encontrará el Identificador del Paquete para la aplicación que estás tratando de añadir a Dispositivos de Asistencia.

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

Supongamos que la aplicación que estabas tratando de agregar era SKYPE. Entonces ingresarías lo siguiente:

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

Y tu identificador de paquete sería :

com.skype.skype

Luego utilizas esta información 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ías sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "delete from access where client='com.skype.skype';"

0 votos

+1, pero para mayor robustez es mejor usar REPLACE INTO en lugar de INSERT INTO para asegurar que el comando funcione incluso si la base de datos ya tiene una entrada para la aplicación especificada.

0 votos

@mklement ¿Eso agregaría la aplicación si la misma aún no existe en la base de datos?

0 votos

Sí, sería (REPLACE INTO es un alias para el más descriptivo INSERT OR REPLACE INTO).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X