ดูเหมือนว่าฉันไม่สามารถแก้ไขไฟล์ plist จาก LaunchAgents ได้แม้ว่าฉันจะทำ sudo ฉันจะป้องกันไม่ให้มีการลบ / แก้ไข ฉันต้องปิดการใช้งาน SIP เพื่อทำสิ่งนี้หรือไม่?
ดูเหมือนว่าฉันไม่สามารถแก้ไขไฟล์ plist จาก LaunchAgents ได้แม้ว่าฉันจะทำ sudo ฉันจะป้องกันไม่ให้มีการลบ / แก้ไข ฉันต้องปิดการใช้งาน SIP เพื่อทำสิ่งนี้หรือไม่?
คำตอบ:
ปิดการใช้งาน LaunchAgent (ไม่ใช่ LaunchDaemons) และรีบูตเครื่องของคุณ ( โดยไม่ต้อง sudo):
$ launchctl unload /System/Library/LaunchAgents/com.apple.gamed.plist
ในกรณีที่คุณต้องการเปิดใช้งานอีกครั้ง
$ launchctl load /System/Library/LaunchAgents/com.apple.gamed.plist
sudo
launchctl list
หรือไม่
ตามหัวข้อนี้คุณสามารถทำได้:
defaults write com.apple.gamed Disabled -bool true
และเพื่อตรวจสอบสถานะปัจจุบันของ daemon ใช้:
defaults read com.apple.gamed Disabled
ทางออกหนึ่งคือการสร้าง bash script เพื่อหยุดบริการ gamed หลังจากที่คุณเข้าสู่ระบบ ใช้ Automator ใน OS X เพื่อสร้างสคริปต์ทุบตีจากนั้นเพิ่มเป็นรายการเข้าสู่ระบบบัญชี OS X ของคุณ ในครั้งต่อไปที่คุณเข้าสู่ระบบคุณควรได้รับพรอมต์ให้รันสคริปต์ ปกติฉันรอจนกระทั่งฉันเห็นการแจ้งเตือนจาก Little Snitch ที่ gamed กำลังโทรกลับบ้านจากนั้นฉันคลิก 'ดำเนินการต่อ' เพื่อเรียกใช้สคริปต์ สิ่งนี้ยังไม่สมบูรณ์และคุณอาจพบปัญหาหากคุณเรียกใช้ทันทีหลังจากที่คุณลงชื่อเข้าใช้ OS X ฉันชอบที่จะอยู่ห่างจากโซลูชันที่ปิดใช้งานบริการเนื่องจากสิ่งเหล่านั้นต้องการการปิดใช้งาน / แทนที่ SIP ที่ฉันแนะนำ
นี่คือสคริปต์ทุบตีที่ฉันใช้ ข้อเสนอแนะในการปรับปรุงมันยินดีต้อนรับ
#!/bin/bash
chkService=gamed
chkCount=10
chkStatus=$(ps ax | grep "$chkService" | grep -v grep | grep " T " | wc -l)
while [ $chkStatus -ne 1 ]; do
chkProcess=$(ps ax | grep -v grep | grep "$chkService" | wc -l)
if [ $chkProcess -ne 0 ];
then
KILLALL -STOP "$chkService"
chkCount=0
chkStatus=$(ps ax | grep gamed | grep -v grep | grep " T " | wc -l)
else
SLEEP=1
chkCount=$((chkCount-1))
fi
done
ปัญหาคือคำตอบที่ได้รับการยอมรับดังกล่าวข้างต้น:
launchctl unload /System/Library/LaunchAgents/com.apple.gamed.plist
ไม่ทำงานอีกต่อไป ฉันเห็นมันด้วยการใช้-w
ธง ไม่ว่าในกรณีใดในการอัปเดตล่าสุดฉันคิดว่า El Capitan หรือ Yosemite คุณได้รับข้อความแทน
ไม่อนุญาตการดำเนินการในขณะที่การป้องกันความสมบูรณ์ของระบบมีส่วนร่วม
การป้องกันความสมบูรณ์ของระบบเป็นที่รู้จักกันโดยย่อ SIP csrutil disable
ปิดการใช้งานที่คุณต้องบูตเข้าสู่การกู้คืนระบบปฏิบัติการและการทำงาน
ฉันได้ทำลำดับนี้ในรุ่นก่อนหน้าและมันนำไปสู่ความสามารถในการปิดการใช้งาน gamed ผ่านlaunchctl
คำสั่ง
ฉันคิดว่าหลังจากปิดการใช้งาน gamed ใครสามารถเปิดใช้งาน SIP อีกครั้ง อาจเป็นสิ่งที่ดีที่สุดของทั้งสองโลกถึงแม้ว่ามันจะเป็นกระบวนการที่น่าเบื่อหน่าย
แล้วsudo launchctl unload /System/Library/Launch\ Daemons/com.apple.gamed.plist
ไงล่ะ
บน OS Sierra ไปที่การตั้งค่าระบบบัญชีอินเทอร์เน็ตและลบ (ด้วยเครื่องหมายลบ) Game Center ในรายการ (ด้านซ้าย)
สิ่งนี้สร้างความแตกต่างเพียงเล็กน้อยจากจุดยืนด้านความปลอดภัยเพียงแค่เปลี่ยนระบบกลับไปเป็นระบบที่ทำงานได้จริงก่อน SIP และระบบปฏิบัติการ Unix เกือบทั้งหมดยังคงทำงาน คุณค่าของ SIP เป็นสิ่งที่ถกเถียงกันได้ดีที่สุด มันตอบคำถามเพราะวิธีเดียวที่จะใช้คำสั่ง Launchctl เพื่อยกเลิกการโหลดไฟล์ plist gamed คือการปิดการใช้งาน SIP, boot, unload ไฟล์ plist ก่อนจากนั้นหากต้องการเปิดใช้งาน SIP อีกครั้ง
ตัวเลือกอื่นที่ใช้งานได้กับ 10.11.6 คือรูปแบบของวิธีการที่ @ Le-Sci แนะนำ สร้างเชลล์สคริปต์ที่ปิดใช้งานกระบวนการ gamed:
#!/bin/bash
sleep 30 && kill -9 "$(pgrep gamed)"
คำสั่ง sleep ที่นี่บอกสคริปต์ให้รอ 30 วินาทีก่อนเริ่มกระบวนการเลิก gamed เพื่อให้ระบบมีเวลามากพอที่จะโหลด gamed ก่อนที่จะพยายามยุติมัน คุณสามารถปรับระยะเวลาในการรอได้ตามต้องการ คำสั่ง "kill -9" บังคับให้ออกจากกระบวนการที่คุณร้องขอ แต่จะยอมรับเฉพาะหมายเลขกระบวนการเท่านั้นไม่ใช่ชื่อกระบวนการดังนั้น "pgrep" จึงถูกใช้เพื่อค้นหารหัสกระบวนการ จดบันทึกตำแหน่งที่คุณบันทึกสคริปต์ (สำหรับตัวอย่างนี้ฉันจะบันทึกเป็น "forceQuitGamed" ใน / Users / myaccountname /)
ให้สิทธิ์การเรียกใช้สคริปต์:
sudo chmod +x ~/forceQuitGamed
สร้างไฟล์ plist agent เริ่มต้นที่จะทำงานทุกครั้งที่คุณลงชื่อเข้าใช้บัญชีของคุณ หากคุณไม่ได้สร้างไฟล์ plist มาก่อนวิธีหนึ่งที่คุณสามารถทำได้คือใช้ TextEdit ไฟล์สคริปต์ต้องถูกบันทึกเป็นข้อความธรรมดาดังนั้นหากการกำหนดค่าเริ่มต้นของคุณสำหรับการโทร TextEdit สำหรับการจัดรูปแบบ Rich Text ให้ทำรูปแบบ> สร้างคำสั่งข้อความล้วนเพื่อแปลงเป็นข้อความธรรมดาก่อนที่จะพยายามใช้ไฟล์ plist agent ใหม่
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.myaccountname.loginscript</string>
<key>ProgramArguments</key>
<array>
<string>/Users/myaccountname/forceQuitGamed</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
สตริงในอาร์เรย์ภายใต้ "ProgramArguments" เป็นพา ธ / ถึง / your / shell script บันทึกไฟล์ไปที่ ~ / Library / LaunchAgents / ในตัวอย่างนี้ฉันตั้งชื่อไฟล์ plist com.myaccountname.forceQuitGamed.plist ดังนั้นจึงพบได้ที่
/Users/myaccountname/Library/LaunchAgents/com.myaccountname.forceQuitGamed.plist
ตอนนี้ทุกครั้งที่คุณลงชื่อเข้าใช้บัญชีของคุณ gamed ควรจะถูกบังคับให้ออกหลังจากนั้นไม่กี่วินาที (หากคุณต้องการให้ยกเลิกโดยเร็วที่สุดหลังจากโหลดเสร็จแล้วให้ดูที่วิธีการของ @ Le-Sci) วิธีนี้ใช้ได้โดยไม่จำเป็นต้องปิดการใช้งานการป้องกันความสมบูรณ์ของระบบ
คุณต้องเข้าสู่csrutil disable
เทอร์มินัลก่อนในโหมดการกู้คืนจากนั้นรีสตาร์ททำการเปลี่ยนแปลงรีสตาร์ทอีกครั้งในโหมดการกู้คืนและทำcsrutil enable
รีสตาร์ท
แต่ฉันไม่ทราบว่ากระบวนการใดที่ถูกปรับเปลี่ยนจะทำให้บูตใน El Capitan ได้