나는 현재 Mavericks 10.9의 자동 설치를 위해 노력하고 있습니다. NetBoot를 설정했습니다. Applescript를 실행하기 전까지는 모든 것이 정상적으로 작동합니다. 새 버전이 출시 된 이후로 해당 스크립트를 수동으로 활성화해야합니다. 셸 스크립트에서 보조 장치 목록에 앱을 추가 할 수있는 명령이 있습니까? 아니면 작동하도록 편집해야 할 plist가 있습니까?
나는 현재 Mavericks 10.9의 자동 설치를 위해 노력하고 있습니다. NetBoot를 설정했습니다. Applescript를 실행하기 전까지는 모든 것이 정상적으로 작동합니다. 새 버전이 출시 된 이후로 해당 스크립트를 수동으로 활성화해야합니다. 셸 스크립트에서 보조 장치 목록에 앱을 추가 할 수있는 명령이 있습니까? 아니면 작동하도록 편집해야 할 plist가 있습니까?
답변:
설정은 다음에 저장됩니다 /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|
나는 시스템 환경 설정의 목록에 드롭하여 추가 한 응용 프로그램.
~/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,""
.
sudo sqlite3 ...
. 권한 부여~/Library/Preferences/com.apple.universalaccessAuthWarning.plist
와 관련이 없으며 경고가 반복적으로 표시되는 성가신 사용자를 피하기 위해 경고가 표시되었는지 여부 만 기록합니다.
??
( \xfa\xde\x0c
) 값에서 유래 csreq
지정된 애플리케이션의 종류의 지문을 포함 칼럼; OSX는이를 배후에서 자동으로 관리하므로 지정할 필요가 없습니다. 실제 값은 훨씬 길다. 3 바이트로 잘라내는 출력 이진 값 (데이터 형식 시도에서 유래 BLOB
그것은 문자열 것처럼) 제 NUL 바이트 (상기 정지 출력을 일으키는 ?
로부터 줄기 \xfa
와 \xde
, UTF8 인코딩 유효한 문자없는 \x0c
수직 인 효과적으로 줄 바꿈을 만드는 탭).
csreq
열에는 앱에 대해 지정된 지정된 요구 사항이 포함되어 있습니다. goo.gl/z10vl 및 Apple의 TN2206 코드 서명 안내서를 참조하십시오 . 지정된 요구 사항은 기본적으로 번들 ID와 인증서를 확인하여 앱의 ID를 확인하는 스크립트입니다.
아래 명령에 따라 파일을 추가 할 수도 있습니다.
이 명령은 보조 장치에 추가하려는 응용 프로그램의 번들 식별자를 찾습니다.
/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';"
REPLACE INTO
대신 사용하는 것이 좋습니다 INSERT INTO
.
REPLACE INTO
더 설명적인 별칭입니다 INSERT OR REPLACE INTO
).