ターミナルを介してアプリケーションがマーベリックスのコンピューター(補助装置)を制御することを許可しますか?


10

私は現在、Mavericks 10.9の自動インストールに取り組んでいます。NetBootをセットアップしました。Applescriptを実行するまで、すべてが正常に機能します。新しいバージョンのリリース以来、これらのスクリプトを手動で有効にする必要があります。アプリを支援デバイスリストに追加するためにシェルスクリプトで使用できるコマンドはありますか?それともそれが機能するために編集する必要があるいくつかのplistがありますか?


これがあなたが見ているものであるかどうかは完全にはわかりませんが、この記事は役立つかもしれません:support.apple.com/kb/HT5914
Jay Thompson

返信してくれてありがとう。また、解決策を探しているときにこの記事に出くわしました。このソリューションはまだGUIインタラクションを使用しているため、私が探しているものではありません。
KarolBerlinski 2013年

@KarolBerlinski使用した回避策は何ですか?コマンドラインまたは非GUIメソッドを使用して、支援デバイスにアプリを追加する方法を理解しようとしています。ありがとうAbraham
AbsterT 2014

回答:


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

私のインストールの最後の4つの列(client_typeallowedprompt_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

また、変更を適用するために再起動し、最後の4つの列をに設定してみました0,1,1,""


2
フィードバックをありがとうございます。そのおかげで回避策を講じることができました。tccdプロセスは強制終了できません。ここでは再起動のみで十分です。Accesssibilityを必要とするアプリを起動し、sudo sqlite3 / Library / Application \ Support / com.apple.TCC / TCC.db 'update access set allowed = 1'を使用して、システムを再起動します。できます。再度ありがとう(リストから1つのアプリにアクセスする必要がある場合は、SQLにWHERE句を追加できます)。
KarolBerlinski 2013年

素晴らしい探検の+1。に基づく実用的なプログラマティックについては、AbsterTの回答を参照してくださいsudo sqlite3 ...。パーミッションの付与に~/Library/Preferences/com.apple.universalaccessAuthWarning.plistは関与せず、警告が繰り返されてユーザーを煩わせることがないように警告が表示されているかどうかを記録するだけです。
mklement0 2014年

2
??\xfa\xde\x0c)値が由来するcsreq指定されたアプリの種類の指紋を含む列、。OSXは自動的にそれを舞台裏で管理します-それを指定する必要はありません。実際の値ははるかに長くなります。3バイトに切り捨てが出力するバイナリ値(データ型にしようとしてから来てBLOB、それが文字列であるかのように)最初のNULバイト(時停止への出力を引き起こして?からステム\xfa\xde、UTF8エンコーディングで有効な文字をされていない\x0c垂直です改行を効果的に作成するタブ)。
mklement0 2014年

csreq列には、アプリのコンパイル済みの指定要件が含まれている参照goo.gl/z10vlとAppleのTN2206 深さのコード署名ガイドを。指定された要件は、本質的に、バンドルIDと証明書をチェックすることでアプリのIDを検証するスクリプトです。
zoul 2015年

1
この手法は、ユーザの関与なしにアクセシビリティの資格を追加するためのDropboxで使われているようです:applehelpwriter.com/2016/08/29/...
pkamb

8

以下のコマンドに従ってファイルを追加することもできます。

このコマンドは、支援デバイスに追加しようとしているアプリケーションのバンドル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';"


+1ですが、堅牢性のためには、データベースが指定されたアプリケーションのエントリをすでに持っている場合でもコマンドが確実に機能するようにするREPLACE INTO代わりに、使用INSERT INTOすることをお勧めします。
mklement0 2014年

@mklementアプリケーションがデータベースにまだ存在しない場合、アプリケーションを追加しますか?
AbsterT 2014年

はい、そうです(REPLACE INTOより説明的なものの別名ですINSERT OR REPLACE INTO)。
mklement0 2014年

1
REPLACE INTOは、INSERT INTOよりも完全に機能します。
AbsterT 2014年

このメソッドは、.prefpaneバンドル内にある実行可能バイナリに対して機能しますか?
jasonology 16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.