Uygulamanın Terminal aracılığıyla Mavericks'teki bilgisayarı (yardımcı cihazlar) kontrol etmesine izin verilsin mi?


10

Şu anda Mavericks 10.9'un otomatik instalasyonu üzerinde çalışıyorum. NetBoot ayarladım. Applescript'i yürütene kadar her şey yolunda gidiyor. Yeni sürümün yayınlanmasından bu yana bu komut dosyalarını el ile etkinleştirmem gerekiyor. Yardımcı Aygıtlar listesine uygulama eklemek için kabuk komut dosyasında kullanabileceğim bir komut var mı? Ya da belki de çalışması için düzenlenmesi gereken bir plist var mı?


Bunun gördüğünüzden tam olarak emin değilim, ancak bu makale yardımcı olabilir: support.apple.com/kb/HT5914
Jay Thompson

Cevabınız için teşekkür ederim. Çözüm ararken bu makalede de tökezledim. Bu çözüm hala GUI etkileşimini kullandığından aradığım şey değil.
KarolBerlinski

@KarolBerlinski Kullandığınız geçici çözüm neydi? Hala komut satırı veya GUI olmayan bir yöntemle Yardımcı Cihazlara bir uygulama eklemek için nasıl anlamaya çalışıyorum. Teşekkürler Abraham
AbsterT

Yanıtlar:


12

Ayarlar şu konumda saklanır /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|

Şema, tarafından verildiği gibi 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));

Benim Kurulum hakkında son dört sütun ( client_type, allowed, prompt_countve csreq) vardır 0|1|0|\xfa\xde\x0csonra eklenen uygulamalar için "example.app" would like to control this computer using accessibility featuresiletişim gösterildi ve 0|1|1|ben Sistem Tercihleri listeye bırakarak ekledi uygulamalar için.

~/Library/Preferences/com.apple.universalaccessAuthWarning.plist uyarı iletişim kutusunun gösterildiği uygulamaların bir listesini içerir:

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

Yine de bir uygulama için yardımcı cihazlara nasıl erişime izin verileceğini anlayamadım. Örneğin bu komutları çalıştırmayı denedim:

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

Ayrıca değişiklikleri uygulamak ve son dört sütun ayarlamak için yeniden başlatmayı denedim 0,1,1,"".


2
Geri bildiriminiz için çok teşekkür ederiz. Bu sayede geçici bir çözüm yapabildim. Tccd işlemi öldürülemez, burada yalnızca yeniden başlatma yeterli olacaktır. Erişilebilirlik gerektiren uygulamayı başlatıyorum, sonra sudo sqlite3 / Library / Application \ Support / com.apple.TCC / TCC.db 'güncelleme erişim ayarına izin verildi = 1' kullanın ve sistemi yeniden başlatın. İşe yarıyor. Tekrar teşekkürler (Listeden bir uygulama için erişime ihtiyacınız varsa sql'nize WHERE yan tümcesi ekleyebilirsiniz).
KarolBerlinski

+ 1 büyük alay için. Daima çalışan bir programatik için AbsterT'nin cevabına bakınız sudo sqlite3 .... izin vermeye~/Library/Preferences/com.apple.universalaccessAuthWarning.plist dahil değildir , yalnızca tekrar eden uyarılara sahip can sıkıcı kullanıcılardan kaçınmak için bir uyarının gösterilip gösterilmediğini kaydeder.
mklement0

2
??( \xfa\xde\x0c) Değeri kaynaklanmaktadır csreqbelirtilen uygulama tür bir parmak izini ihtiva eden kolonu; OSX bunu sahne arkasında otomatik olarak yönetir - hiçbir zaman belirtmenize gerek yoktur. Gerçek değer çok daha uzundur; 3 bayta olan kesilme, ikili değeri (veri türü BLOB) bir dize gibi çıkarmaya çalışmaktan gelir ve çıktının ilk NUL baytında durmasına neden olur ( UTF8 kodlamasında ?kök \xfave \xdegeçerli karakterler olmamaktan kaynaklanır) \x0cdikeydir etkin bir satır sonu oluşturur).
mklement0

csreqSütun, uygulama için derlenmiş belirlenen şartları içeren bkz goo.gl/z10vl ve Apple'ın TN2206 Derinlik Kod imzalama rehberi. Belirlenmiş gereksinimler temel olarak paket kimliğini ve sertifikalarını kontrol ederek bir uygulamanın kimliğini doğrulayan bir betiktir.
zoul

1
Bu teknik, Dropbox tarafından kullanıcı katılımı olmadan Erişilebilirlik yetkileri eklemek için kullanılıyor gibi görünüyor: applehelpwriter.com/2016/08/29/…
pkamb

8

Aşağıdaki komutları izleyerek dosyayı da ekleyebilirsiniz.

Bu komut, Yardımcı Aygıtlara eklemeye çalıştığınız uygulamanın Paket Tanımlayıcısını bulur.

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

Eklemeye çalıştığınız uygulamanın SKYPE olduğunu varsayalım. Daha sonra bunu aşağıya girersiniz:

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

Ve paket kimliğiniz:

com.skype.skype

Daha sonra bu çıktıyı aşağıdaki komutta kullanırsınız:

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

Skype için şöyle görünecektir:

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

Uygulamayı kaldırmak için sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "delete from access where client='com.skype.skype';"


1, ama sağlamlık için kullanmak daha iyidir REPLACE INTOyerine INSERT INTOkomut veritabanı zaten belirtilmiş uygulama için bir giriş olsa bile çalıştığından emin olmak için böylece.
mklement0

@mklement Uygulama veritabanında zaten yoksa uygulamayı ekler miydi?
AbsterT

Evet, ( REPLACE INTOdaha açıklayıcı bir takma addır INSERT OR REPLACE INTO).
mklement0

1
REPLACE INTO, INSERT INTO'dan mükemmel ve daha iyi çalışıyor.
AbsterT

Bu yöntem, .prefpane Paketi içindeki yürütülebilir ikili dosyalar için çalışır mı?
jasonology
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.