एप्लिकेशन को टर्मिनल के माध्यम से मावेरिक्स पर कंप्यूटर (सहायक उपकरणों) को नियंत्रित करने की अनुमति दें?


10

मैं वर्तमान में Mavericks 10.9 के स्वचालित इंस्टालेशन पर काम कर रहा हूं। मेरे पास नेटबूट सेट है। सब कुछ ठीक काम करता है जब तक मैं Applescript निष्पादित करना चाहते हैं। नए संस्करण की रिलीज़ के बाद से मुझे उन लिपियों को मैन्युअल रूप से सक्षम करने की आवश्यकता है। क्या कोई कमांड है जो मैं शेल स्क्रिप्ट में सहायक उपकरण सूची में ऐप जोड़ने के लिए उपयोग कर सकता हूं? या हो सकता है कि कुछ प्लिस्ट हैं जिन्हें काम करने के लिए संपादित करना होगा?


मुझे पूरा यकीन नहीं है कि यह वही है जो आप देख रहे हैं, लेकिन यह लेख मदद कर सकता है: support.apple.com/kb/HT5914
जेपी थॉम्पसन

जवाब देने के लिए धन्यवाद। जब मैं समाधान खोज रहा था तो मैं भी इस लेख पर अड़ गया। यह वह नहीं है जिसे मैं खोज रहा हूं क्योंकि यह समाधान अभी भी GUI इंटरैक्शन का उपयोग करता है।
करोलबिरिंस्की

@KarolBerlinski आपके द्वारा उपयोग किया गया वर्कअराउंड क्या था? मैं अभी भी यह पता लगाने की कोशिश कर रहा हूं कि कमांड लाइन या गैर जीयूआई विधि के माध्यम से सहायक उपकरणों में ऐप कैसे जोड़ा जाए। धन्यवाद अब्राहम
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 सफल नहीं मारा जा सकता है, केवल पुनः आरंभ यहां पर्याप्त होगा। मैं उस ऐप को शुरू करता हूं जिसे एक्सेसिबिलिटी की आवश्यकता है, फिर sudo sqlite3 / Library / Application \ Support / com.apple.TCC / TCC.db 'अपडेट एक्सेस सेट = 1' और फिर रिबूट सिस्टम का उपयोग करें। यह काम करता हैं। फिर से धन्यवाद (यदि आपको सूची से एक ऐप के लिए एक्सेस की आवश्यकता है तो आप अपने वर्ग में WHERE क्लॉज जोड़ सकते हैं)।
करोलबर्लिंस्की

महान खोजी के लिए +1। काम कर रहे प्रोग्रामेटिक के लिए एबस्टरटी का उत्तर देखें sudo sqlite3 ...। अनुमति देने~/Library/Preferences/com.apple.universalaccessAuthWarning.plist में शामिल नहीं है , यह केवल रिकॉर्ड करता है कि क्या बार-बार चेतावनी के साथ उपयोगकर्ताओं को परेशान करने से बचने के लिए एक चेतावनी दिखाई गई है।
mklement0

2
??( \xfa\xde\x0c) मूल्य की वजह से उपजी csreqस्तंभ, जो निर्दिष्ट एप्लिकेशन की तरह की एक फिंगरप्रिंट होता है; OSX प्रबंधित करता है कि पर्दे के पीछे स्वचालित रूप से - इसे कभी भी निर्दिष्ट करने की आवश्यकता नहीं है। वास्तविक मूल्य बहुत लंबा है; 3 बाइट्स के लिए ट्रंकेशन बाइनरी मान (डेटा प्रकार BLOB) को आउटपुट करने की कोशिश करने से आता है जैसे कि यह एक स्ट्रिंग था, जिससे आउटपुट पहले NUL बाइट पर रुकता है ( UTF8 एन्कोडिंग में ?से \xfaऔर \xdeमान्य वर्ण नहीं होने से स्टेम \x0cएक ऊर्ध्वाधर है) टैब जो प्रभावी रूप से एक लाइन ब्रेक बनाता है)।
mklement0

csreqस्तंभ अनुप्रयोग के लिए संकलित नामित आवश्यकताओं में शामिल है, को देखने के goo.gl/z10vl और एप्पल के TN2206 गहराई में कोड हस्ताक्षर गाइड। निर्दिष्ट आवश्यकताएं अनिवार्य रूप से एक स्क्रिप्ट है जो बंडल आईडी और प्रमाणपत्रों की जांच करके ऐप की पहचान को मान्य करता है।
जूल

1
इस तकनीक का उपयोग ड्रॉपबॉक्स द्वारा उपयोगकर्ता की भागीदारी के बिना एक्सेसिबिलिटी एंटाइटेलमेंट को जोड़ने के लिए किया जाता है: 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

@ यदि आवेदन डेटाबेस में पहले से मौजूद नहीं था, तो क्या वह आवेदन जोड़ देगा?
एबस्टर टीटी

हां, यह ( REPLACE INTOअधिक वर्णनात्मक के लिए एक उपनाम है INSERT OR REPLACE INTO)।
mklement0

1
REPLACE INTO पूरी तरह से और INSERT INTO की तुलना में बेहतर काम कर रहा है।
अबस्टरटी

क्या यह विधि निष्पादन योग्य बायनेरिज़ के लिए काम करती है जो एक .prefpane बंडल के अंदर होती है?
जसनोलॉजी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.