Дозволити програмі керувати комп'ютером (допоміжними пристроями) на Mavericks через термінал?


10

Зараз я працюю над автоматизованою установкою Mavericks 10.9. У мене налаштовано NetBoot. Все працює добре, поки я не хочу виконати Applescript. З моменту виходу нової версії мені потрібно вручну ввімкнути ці сценарії. Чи є команда, яку я можу використовувати в скрипті оболонки, щоб додати додаток до списку допоміжних пристроїв? А може, є якийсь пліст, який має бути відредагований, щоб він працював?


Я не зовсім впевнений, що це ви бачите, але ця стаття може допомогти: support.apple.com/kb/HT5914
Джей Томпсон

Дякую за відповідь Я також натрапив на цю статтю, поки шукав рішення. Це не те, що я шукаю, оскільки це рішення все ще використовує взаємодію з графічним інтерфейсом.
KarolBerlinski

@KarolBerlinski Яке рішення ви використовували? Я все ще намагаюся з’ясувати, як додати додаток до допоміжних пристроїв за допомогою командного рядка або не графічного інтерфейсу. Дякую Аврааму
AbsterT

Відповіді:


12

Налаштування зберігаються у /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|

Схеми, як задано sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db '.schema access', є:

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));

На моїй установці останні чотири колонок ( client_type, allowed, prompt_countі csreq) є 0|1|0|\xfa\xde\x0cдля додатків , які були додані після того , як "example.app" would like to control this computer using accessibility featuresдіалог був показаний і 0|1|1|для додатків , які я додав, опускаючи їх в список в System Preferences.

~/Library/Preferences/com.apple.universalaccessAuthWarning.plist містить перелік програм, для яких показано діалогове вікно попередження:

$ 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;
}    

Я не міг зрозуміти, як насправді дозволити доступ до допоміжних пристроїв для програми. Я спробував, наприклад, запустити ці команди:

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

Я також спробував перезапустити, щоб застосувати зміни та встановити останні чотири стовпці 0,1,1,"".


2
Дякую за ваші відгуки. Завдяки цьому я зміг зробити обхід. Процес tccd неможливо вбити, тут буде достатньо лише перезавантаження. Я запускаю додаток, якому потрібна доступність, потім використовую sudo sqlite3 / Бібліотека / додаток \ Підтримка / com.apple.TCC / TCC.db 'встановлений доступ для оновлення дозволений = 1', а потім перезавантажую систему. Це працює. Ще раз дякую (Якщо вам потрібен доступ для однієї програми зі списку, ви можете додати пункт WHERE до sql).
KarolBerlinski

+1 для чудового прогулянки. Дивіться відповідь AbsterT для робочої програми на основі sudo sqlite3 .... ~/Library/Preferences/com.apple.universalaccessAuthWarning.plistне бере участі у наданні дозволів, він лише фіксує, чи було показано попередження, щоб уникнути роздратування користувачів із повторними попередженнями.
mklement0

2
Значення ??( \xfa\xde\x0c) походить від csreqстовпця, який містить відбитки різновидів зазначеної програми; OSX керує цим автоматично за кадром - ніколи не потрібно його вказувати. Фактичне значення набагато довше; усічення до 3 байтів відбувається від спроби вивести бінарне значення (тип даних BLOB) так, ніби це рядок, внаслідок чого вихід зупиняється на першому байті NUL ( ?стовбур символів у коду UTF8 \xfaта \xdeнедійсні символи \x0cє вертикальним вкладку, яка ефективно створює розрив рядка).
mklement0

У csreqстовпці містяться складені призначені вимоги до програми, див. Goo.gl/z10vl та Apple, підписування коду TN2206 у посібнику по глибині . Позначені вимоги, по суті, є сценарієм, який підтверджує особу програми, перевіряючи ідентифікатор пакета та сертифікати.
Зуль

1
Здається, що Dropbox використовує цю техніку для додавання прав доступності без участі користувача: applehelpwriter.com/2016/08/29/…
pkamb

8

Ви також можете додати файл, дотримуючись наведених нижче команд.

Ця команда знайде ідентифікатор групи для програми, яку ви намагаєтеся додати до допоміжних пристроїв.

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

Скажімо, додаток, яке ви намагалися додати, було SKYPE. Потім ви введете це нижче:

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

І ваш ідентифікатор пакета буде:

com.skype.skype

Потім ви використовуєте цей вихід у нижченаведеній команді:

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

Для Skype це виглядатиме так:

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

Щоб видалити програму, яку ви використовуєте sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "delete from access where client='com.skype.skype';"


+1, але для надійності краще використовувати REPLACE INTOзамість INSERT INTOтого, щоб переконатися, що команда працює, навіть якщо в базі даних вже є запис для зазначеної програми.
mklement0

@mklement Чи додав би це додаток, якщо програма ще не існувала в базі даних?
AbsterT

Так, це було б ( REPLACE INTOце псевдонім для більш описового INSERT OR REPLACE INTO).
mklement0

1
ЗАМІНА INTO працює ідеально та краще, ніж INSERT INTO.
AbsterT

Чи працює цей метод для виконуваних бінарних файлів, що знаходяться всередині пакету .prefpane?
jasonology
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.