응용 프로그램이 터미널을 통해 매버릭스의 컴퓨터 (보조 장치)를 제어 할 수 있습니까?


10

나는 현재 Mavericks 10.9의 자동 설치를 위해 노력하고 있습니다. NetBoot를 설정했습니다. Applescript를 실행하기 전까지는 모든 것이 정상적으로 작동합니다. 새 버전이 출시 된 이후로 해당 스크립트를 수동으로 활성화해야합니다. 셸 스크립트에서 보조 장치 목록에 앱을 추가 할 수있는 명령이 있습니까? 아니면 작동하도록 편집해야 할 plist가 있습니까?


나는 이것이 당신이보고있는 것이 확실하지 않지만이 기사가 도움이 될 수 있습니다 : support.apple.com/kb/HT5914
Jay Thompson

답장을 보내 주셔서 감사합니다. 또한 솔루션을 검색하는 동안이 기사를 우연히 발견했습니다. 이 솔루션이 여전히 GUI 상호 작용을 사용하기 때문에 내가 찾고있는 것이 아닙니다.
KarolBerlinski

@KarolBerlinski 사용한 해결 방법은 무엇입니까? 명령 줄이나 비 GUI 방법을 통해 보조 장치에 앱을 추가하는 방법을 여전히 찾고 있습니다. 감사합니다 아브라함
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|나는 시스템 환경 설정의 목록에 드롭하여 추가 한 응용 프로그램.

~/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 프로세스를 종료 할 수 없으며 여기서 만 다시 시작하면됩니다. Accesssibility가 필요한 앱을 시작한 다음 sudo sqlite3 / Library / Application \ Support / com.apple.TCC / TCC.db 'update access set allowed = 1'을 사용하고 시스템을 재부팅하십시오. 효과가있다. 다시 감사합니다 (목록에서 하나의 앱에 액세스 해야하는 경우 WHERE 절을 SQL에 추가 할 수 있습니다).
KarolBerlinski

훌륭한 졸음 +1 에 기반한 작업 프로그래밍 방식에 대해서는 AbsterT의 답변 을 참조하십시오 sudo sqlite3 .... 권한 부여~/Library/Preferences/com.apple.universalaccessAuthWarning.plist 와 관련이 없으며 경고가 반복적으로 표시되는 성가신 사용자를 피하기 위해 경고가 표시되었는지 여부 만 기록합니다.
mklement0

2
??( \xfa\xde\x0c) 값에서 유래 csreq지정된 애플리케이션의 종류의 지문을 포함 칼럼; OSX는이를 배후에서 자동으로 관리하므로 지정할 필요가 없습니다. 실제 값은 훨씬 길다. 3 바이트로 잘라내는 출력 이진 값 (데이터 형식 시도에서 유래 BLOB그것은 문자열 것처럼) 제 NUL 바이트 (상기 정지 출력을 일으키는 ?로부터 줄기 \xfa\xde, UTF8 인코딩 유효한 문자없는 \x0c수직 인 효과적으로 줄 바꿈을 만드는 탭).
mklement0

csreq열에는 앱에 대해 지정된 지정된 요구 사항이 포함되어 있습니다. goo.gl/z10vl 및 Apple의 TN2206 코드 서명 안내서를 참조하십시오 . 지정된 요구 사항은 기본적으로 번들 ID와 인증서를 확인하여 앱의 ID를 확인하는 스크립트입니다.
zoul

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
REPLACE INTO가 INSERT INTO보다 완벽하고 훌륭하게 작동합니다.
AbsterT

이 방법은 .prefpane 번들 안에있는 실행 가능한 바이너리에 적용됩니까?
jasonology
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.