Izinkan aplikasi mengontrol komputer (perangkat bantu) di Mavericks via Terminal?


10

Saat ini saya sedang mengerjakan instalasi otomatis Mavericks 10.9. Saya sudah mengatur NetBoot. Semuanya berfungsi OK sampai saya ingin menjalankan Applescript. Sejak rilis versi baru saya perlu mengaktifkan skrip-skrip tersebut secara manual. Apakah ada perintah yang dapat saya gunakan dalam skrip shell untuk menambahkan aplikasi ke daftar Perangkat Bantu? Atau mungkin ada beberapa plist yang harus diedit agar bisa berfungsi?


Saya tidak sepenuhnya yakin ini yang Anda lihat, tetapi artikel ini mungkin membantu: support.apple.com/kb/HT5914
Jay Thompson

Terima kasih atas balasannya. Saya juga menemukan artikel ini ketika saya sedang mencari solusi. Ini bukan yang saya cari karena solusi ini masih menggunakan interaksi GUI.
KarolBerlinski

@KarolBerlinski Apa solusi yang Anda gunakan? Saya masih mencoba mencari cara untuk menambahkan aplikasi ke Perangkat Bantu melalui baris perintah atau metode non GUI. Terima kasih Abraham
AbsterT

Jawaban:


12

Pengaturan disimpan di /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|

Skema, seperti yang diberikan oleh sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db '.schema access', adalah:

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

Pada instalasi saya empat kolom terakhir ( client_type, allowed, prompt_count, dan csreq) adalah 0|1|0|\xfa\xde\x0cuntuk aplikasi yang ditambahkan setelah "example.app" would like to control this computer using accessibility featuresdialog ditunjukkan dan 0|1|1|untuk aplikasi yang saya menambahkan dengan menjatuhkan mereka ke daftar di System Preferences.

~/Library/Preferences/com.apple.universalaccessAuthWarning.plist berisi daftar aplikasi yang diperlihatkan dialog peringatan:

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

Saya tidak tahu bagaimana sebenarnya memungkinkan akses untuk perangkat bantu untuk suatu aplikasi. Saya mencoba misalnya menjalankan perintah ini:

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

Saya juga mencoba memulai kembali untuk menerapkan perubahan dan mengatur empat kolom terakhir 0,1,1,"".


2
Terima kasih banyak atas tanggapan Anda. Saya bisa membuat solusi berkat itu. Proses tccd tidak dapat dimatikan, hanya restart akan cukup di sini. Saya memulai aplikasi yang membutuhkan Aksesibilitas, kemudian menggunakan sudo sqlite3 / Library / Application \ Support / com.apple.TCC / TCC.db. set akses pembaruan yang diizinkan diizinkan = 1 'dan kemudian reboot sistem. Berhasil. Terima kasih lagi (Jika Anda memerlukan akses untuk satu aplikasi dari daftar, Anda dapat menambahkan klausa WHERE ke sql Anda).
KarolBerlinski

+1 untuk proses sleuthing yang bagus. Lihat jawaban AbsterT untuk program yang bekerja berdasarkan sudo sqlite3 .... ~/Library/Preferences/com.apple.universalaccessAuthWarning.plisttidak terlibat dalam pemberian izin, hanya mencatat apakah peringatan telah ditampilkan untuk menghindari pengguna yang mengganggu dengan peringatan berulang.
mklement0

2
Nilai ??( \xfa\xde\x0c) berasal dari csreqkolom, yang berisi sidik jari dari jenis aplikasi yang ditentukan; OSX mengelola secara otomatis di belakang layar - tidak perlu menentukannya. Nilai sebenarnya jauh lebih lama; pemotongan ke 3 byte berasal dari mencoba menampilkan nilai biner (tipe data BLOB) seolah-olah itu adalah string, menyebabkan output berhenti pada byte NUL pertama ( ?batang dari \xfadan \xdebukan karakter yang valid dalam pengkodean UTF8, \x0cadalah vertikal tab yang secara efektif membuat jeda baris).
mklement0

The csreqkolom berisi persyaratan ditunjuk dikompilasi untuk aplikasi, lihat goo.gl/z10vl dan Apple TN2206 Kode Penandatanganan di Kedalaman panduan. Persyaratan yang ditunjuk pada dasarnya adalah naskah yang memvalidasi identitas aplikasi dengan memeriksa bundel ID dan sertifikat.
zoul

1
Teknik ini tampaknya digunakan oleh Dropbox untuk menambah hak aksesibilitas tanpa keterlibatan pengguna: applehelpwriter.com/2016/08/29/…
pkamb

8

Anda juga dapat menambahkan file dengan mengikuti perintah di bawah ini.

Perintah ini akan menemukan Bundle Identifier untuk aplikasi yang Anda coba tambahkan ke Perangkat Bantu.

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

Katakanlah aplikasi yang ingin Anda tambahkan adalah SKYPE. Anda kemudian akan memasukkan ini di bawah:

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

Dan pengidentifikasi bundel Anda adalah:

com.skype.skype

Anda kemudian menggunakan output ini dalam perintah di bawah ini:

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

Untuk Skype akan terlihat seperti ini:

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

Untuk menghapus aplikasi, Anda akan menggunakan sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "delete from access where client='com.skype.skype';"


+1, tetapi untuk ketahanan, lebih baik menggunakan REPLACE INTOdaripada INSERT INTOmemastikan bahwa perintah itu berfungsi bahkan jika database sudah memiliki entri untuk aplikasi yang ditentukan.
mklement0

@mklement Apakah itu menambah aplikasi jika aplikasi belum ada di database?
AbsterT

Ya, itu akan ( REPLACE INTOmerupakan alias untuk yang lebih deskriptif INSERT OR REPLACE INTO).
mklement0

1
REPLACE INTO bekerja dengan sempurna dan lebih baik daripada INSERT INTO.
AbsterT

Apakah metode ini berfungsi untuk biner yang dapat dieksekusi yang berada di dalam bundel .prefpane?
jasonology
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.