อนุญาตให้แอปพลิเคชันควบคุมคอมพิวเตอร์ (อุปกรณ์ช่วยเหลือ) ใน Mavericks ผ่าน Terminal หรือไม่


10

ขณะนี้ฉันกำลังทำงานกับการติดตั้งอัตโนมัติของ Mavericks 10.9 ฉันติดตั้ง NetBoot แล้ว ทุกอย่างใช้ได้ดีจนกระทั่งฉันต้องการเรียกใช้ Applescript ตั้งแต่รุ่นใหม่ฉันต้องเปิดใช้งานสคริปต์เหล่านั้นด้วยตนเอง มีคำสั่งที่ฉันสามารถใช้ในเชลล์สคริปต์เพื่อเพิ่มแอพในรายการ Assistive Devices หรือไม่ หรืออาจจะมีการวางแผนบางอย่างที่ต้องแก้ไขเพื่อให้ทำงานได้?


ฉันไม่แน่ใจทั้งหมดนี่คือสิ่งที่คุณเห็น แต่บทความนี้อาจช่วยได้: support.apple.com/kb/HT5914
Jay Thompson

ขอบคุณสำหรับการตอบกลับ. ฉันยังสะดุดกับบทความนี้ในขณะที่ฉันกำลังค้นหาวิธีแก้ไข ไม่ใช่สิ่งที่ฉันกำลังมองหาเนื่องจากวิธีนี้ยังคงใช้การโต้ตอบกับ GUI
KarolBerlinski

@KarolBerlinski คุณใช้วิธีแก้ปัญหาแบบใด ฉันยังคงพยายามหาวิธีเพิ่มแอพในอุปกรณ์ช่วยเหลือผ่านทางบรรทัดคำสั่งหรือวิธีการที่ไม่ใช่ GUI ขอบคุณ Abraham
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 proccess ไม่สามารถฆ่าได้การรีสตาร์ทจะเพียงพอที่นี่ ฉันเริ่มต้นแอพที่ต้องการใช้งาน Accesssibility จากนั้นใช้ sudo sqlite3 / Library / Application \ Support / com.apple.TCC / TCC.db 'ชุดการเข้าถึงการอัปเดตที่อนุญาต = 1' จากนั้นรีบูตระบบ มันได้ผล. ขอขอบคุณอีกครั้ง (หากคุณต้องการเข้าถึงแอพเดียวจากรายการคุณสามารถเพิ่ม WHERE clause ได้ที่ 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และแอปเปิ้ล TN2206 รหัสนามในความลึกคู่มือ ข้อกำหนดที่กำหนดเป็นหลักเป็นสคริปต์ที่ตรวจสอบข้อมูลประจำตัวของแอปโดยตรวจสอบ ID กลุ่มและใบรับรอง
zoul

1
ดูเหมือนว่าเทคนิคนี้จะใช้โดย Dropbox เพื่อเพิ่มการให้สิทธิ์การเข้าถึงโดยไม่ต้องมีส่วนร่วมของผู้ใช้: applehelpwriter.com 2016/05/29/29
pkamb

8

คุณสามารถเพิ่มไฟล์ได้โดยทำตามคำสั่งด้านล่าง

คำสั่งนี้จะค้นหา Bundle Identifier สำหรับแอปพลิเคชันที่คุณพยายามเพิ่มลงในอุปกรณ์ช่วยเหลือ

/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 Bundle หรือไม่
jasonology
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.