ป้องกันไม่ให้แอป Apple Music เปิดขึ้นมาเอง
(lowtechguys.com)- Music Decoy เป็นแอปที่คงอยู่ในรูปแบบโปรเซสที่กำลังทำงาน เพื่อไม่ให้แอป Music ของระบบเปิดขึ้นมาเมื่อเผลอกด ▶ Play
- แอปนี้ ไม่ทำงานใดๆ ในเบื้องหลังเลย แต่ใช้วิธีทำให้ระบบเข้าใจว่าแอป Music ทำงานอยู่แล้ว โดยใช้ bundle identifier เดียวกับแอป Music
- ตั้งแต่ v1.1 เป็นต้นไป สามารถกำหนดค่า mediaAppPath เพื่อให้เมื่อกด ▶ Play แล้วเปิดแอปอื่น เช่น Spotify ได้
- การเปิดแอป Music อัตโนมัติอาจเกิดขึ้นเมื่อกด ▶ Play บนคีย์บอร์ด, ส่งคำสั่งเล่นหลังจากเชื่อมต่อหูฟังบลูทูธ, หรือเมื่อหูฟังสลับจากโหมดโทรกลับเป็นโหมดเพลงหลังวางสาย
rcdจะส่งคำสั่งไปยังแอปที่กำลังเล่นเสียงอยู่เมื่อเกิดอีเวนต์เล่น แต่ถ้าไม่มีแอปดังกล่าว มันจะเปิดแอป Music ของระบบ และการปิด daemon นี้จะทำให้การควบคุมการเล่นสื่อจากคีย์บอร์ดถูกปิดไปด้วย
Music Decoy
-
ดาวน์โหลด, ดูซอร์ส, มีคำสั่งติดตั้ง
$brew install music-decoy -
ป้องกันการเปิดแอป Music
- ระหว่างที่ Music Decoy กำลังทำงาน ถึงจะเผลอกด ▶ Play ก็จะไม่ทำให้แอป Music ของระบบเปิดขึ้นมา
- แอปนี้ไม่ทำงานใดๆ ในเบื้องหลังเลย และมีอยู่ในรูปแบบโปรเซสที่กำลังทำงานพร้อม bundle identifier เดียวกับแอป Music
-
หลักการทำงาน
- ใช้ bundle identifier
com.apple.Musicเพื่อทำให้ระบบตัดสินว่าแอป Music เปิดอยู่แล้ว
- ใช้ bundle identifier
-
การตั้งค่า
- ตั้งแต่ v1.1 เป็นต้นไป สามารถตั้งค่า Music Decoy ให้เปิดแอปอื่นเมื่อกดปุ่ม ▶ Play ได้
- คำสั่งตั้งค่าตัวอย่างสำหรับ Spotify:
defaults write com.lowtechguys.MusicDecoy mediaAppPath /Applications/Spotify.app - คำสั่งรีเซ็ตการตั้งค่า:
defaults delete com.lowtechguys.MusicDecoy mediaAppPath
-
วิธีปิดแอป
- เนื่องจากไม่มีไอคอนใน Dock และไม่มีไอคอนในแถบเมนู จึงต้องปิดด้วยวิธีใดวิธีหนึ่งต่อไปนี้
- เปิด Activity Monitor แล้วหา Music Decoy จากนั้นกดปุ่ม ❌ ด้านบน
- รัน
killall 'Music Decoy'ใน Terminal
- เนื่องจากไม่มีไอคอนใน Dock และไม่มีไอคอนในแถบเมนู จึงต้องปิดด้วยวิธีใดวิธีหนึ่งต่อไปนี้
เงื่อนไขการเปิดอัตโนมัติ, สาเหตุ, และทางเลือก
-
Music เปิดขึ้นมาเองเมื่อไร?
- เกิดขึ้นเมื่อกดปุ่ม ▶ Play บนคีย์บอร์ด และไม่มีแอปอื่นกำลังเล่นเสียงอยู่
- เกิดขึ้นเมื่อเชื่อมต่อหูฟังบลูทูธแล้วส่งคำสั่งเล่น
- เกิดขึ้นเมื่อการโทรสิ้นสุดลงและหูฟังบลูทูธสลับจากโหมดโทรเป็นโหมดเพลง
-
ทำไมถึงเกิดเรื่องนี้?
rcdย่อมาจาก Remote Control Daemon และเป็น daemon ที่รับผิดชอบการจัดการปุ่มสื่อ- เมื่อเกิดอีเวนต์เล่น
rcdจะตรวจสอบว่ามีแอปที่กำลังเล่นเสียงอยู่หรือไม่ - ถ้ามีแอปเล่นเสียงอยู่ มันจะส่งคำสั่งเล่นไปยังแอปนั้น และถ้าไม่มี มันจะเปิดแอป Music ของระบบ
- มีวิธีปิด daemon นี้อยู่ แต่จะทำให้ฟังก์ชันควบคุมการเล่นสื่อจากคีย์บอร์ดถูกปิดใช้งานไปด้วย
-
ทางเลือก
- ตาม คำตอบบน StackExchange มีวิธีบางอย่างที่ให้ผลลัพธ์แบบเดียวกัน
launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist- ข้อเสีย: ปิดการทำงานของปุ่ม Play ไปเลยทั้งหมด
- noTunes ใช้วิธีตรวจจับแอปที่ถูกเปิด และปิด Music ทันทีที่มันเริ่มทำงาน
- ข้อเสีย: ใช้ CPU เล็กน้อยมากในเบื้องหลัง แต่การตรวจจับแอปที่เปิดอยู่นั้นเป็นงานที่เบามาก
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ฉลาดมากที่มันทำงานได้เพียงแค่คงอยู่เป็นโปรเซสที่กำลังรันด้วย bundle identifier เดียวกับแอป Music โดยไม่ได้ทำอะไรเลยในเบื้องหลัง
วิธีแก้แบบโลว์โค้ด/โนโค้ดลักษณะนี้มีความงามที่เกิดขึ้นได้ก็ต่อเมื่อเข้าใจระบบอย่างลึกมาก ต้องรู้ว่าเวลากดปุ่มเล่นบน macOS นั้นเกิดอะไรขึ้นกันแน่ และ bundle identifier ทำงานอย่างไร ผลลัพธ์สุดท้ายกลับเป็นแค่ “การชนกัน” ที่แทบไม่มีโค้ดเลย ซึ่งสวยมาก
พูดนอกเรื่องหน่อย เอเจนต์เขียนโค้ดมักอ่อนกับปัญหาแบบนี้ ถ้าเป็น Codex ตอนนี้ก็น่าจะทำแอปเกินความจำเป็นที่คอยเฝ้าดูการเปิด Music แล้วคอยฆ่ามันในลูป
ถ้าสั่งว่า “ช่วยทำให้ Apple Music เปิดไม่ได้” ก็น่าจะลงเอยด้วยวิธีเฝ้าดูแล้วปิดทิ้งแบบที่คนส่วนใหญ่ทำ แต่ถ้าสั่งว่า “ช่วยสืบหน่อยว่าทำไม Apple Music ถึงเปิดขึ้นมา” ผู้ใช้ก็น่าจะหาข้อสรุปได้เร็วจากผลการสืบสวนว่า ทางออกที่ดีที่สุดคือสร้าง แอปแบบไม่ต้องเขียนโค้ด ที่ชนกับ Music
info.plistของเกมเป็นcom.apple.systempreferencesแล้วเซ็น.appใหม่ด้วยใบรับรองนักพัฒนาของตัวเองสนุกดีอยู่พักหนึ่งก่อนจะโดนจับได้
จนถึงตอนนี้ผมก็ยังไม่อยากเชื่อว่า Apple เอา iTunes ออกไปแล้ว
แต่ก่อนผมเก็บคลังเพลงดิจิทัลทั้งหมดไว้ใน iTunes ส่วนใหญ่เป็นเพลงที่ริปจาก CD เอง แต่ก็มีอัลบั้มและรายการทีวีที่ซื้อจาก iTunes ด้วย ตอนที่ Apple ทิ้ง iTunes ทั้งก้อนแล้วลบมันออกจาก Mac OS ไปแทนด้วยอะไรอย่าง Apple Music ผมก็ตั้งใจเลยว่าจะไม่ไว้ใจอีกแล้ว
ช่วงหนึ่งก็หาตัวเล่น MP3 ดี ๆ และลองใช้ AIMP แต่ตอนนี้กำลังคิดจะใช้ AI ทำเพลเยอร์แบบไฟล์โลคัลที่มีอินเทอร์เฟซตามใจตัวเอง ไม่ต้องการสตรีมมิงและไม่ได้อยากได้ด้วย ผมอาจจะยังซื้ออัลบั้มใน iTunes ต่อก็ได้ แต่ตอนนี้ซื้อเป็น CD น่าจะดีกว่า
ปีที่แล้วผมใช้แบบนั้นเกือบทั้งปี ปิดความสามารถฝั่งคลาวด์ไว้ เอาเพลงโลคัลทั้งหมดใส่ Apple Music แล้วซิงก์เข้า iPhone ด้วยสายเหมือน iPod สมัยก่อน ซึ่งยังทำงานได้ดี
ถึงจะไม่ได้สมัคร Apple Music ผมก็ยังเก็บคลังเพลงดิจิทัลทั้งหมดไว้ใน iTunes/Music แล้วใช้เหมือนเดิม
ผมใช้ยูทิลิตีในตัว
hidutilเพื่อรีแมป ปุ่ม F3~F9 เป็นปุ่มที่ต้องการF3/F4 เปลี่ยนเป็นปรับความสว่างไฟคีย์บอร์ด ส่วน F5~F9 เปลี่ยนเป็นปุ่มฟังก์ชันปกติ โพสต์นี้มีข้อมูลที่เป็นประโยชน์มาก: https://news.ycombinator.com/item?id=35555475
บน M1 MacBook ผมใช้
hidutil property --setกับUserKeyMappingโดยกำหนดค่าHIDKeyboardModifierMappingSrc/HIDKeyboardModifierMappingDstผมเคยต้องการอะไรแบบนี้เมื่อไม่กี่เดือนก่อน สำหรับการแสดงสด ผมรันคีย์บอร์ดริกจาก MacBook และใช้ หูฟังไร้สายหน่วงต่ำ สำหรับมอนิเตอร์
ผมเสียบดองเกิลส่งสัญญาณของหูฟังเข้ากับโน้ตบุ๊ก และเมื่อกดปุ่มบนหูฟัง ดองเกิลจะส่งคำสั่ง “เล่น/หยุดชั่วคราว” ทำให้ Music เปิดขึ้นมาแล้วเริ่มเล่นเสียงผ่านอุปกรณ์เอาต์พุตเริ่มต้น มันไม่สนใจเลยด้วยซ้ำว่าตัวส่งสัญญาณหูฟังถูกเลือกเป็นเอาต์พุตเริ่มต้นหรือไม่ ดังนั้นในชุดอุปกรณ์หลายชิ้นที่ซับซ้อน เสียงอาจออกไปยังอุปกรณ์คนละตัวโดยสิ้นเชิง
ถ้าระหว่างแสดงเผลอกดปุ่ม แล้วค่าเริ่มต้นดันเป็นอินเทอร์เฟซที่ต่อกับระบบ P.A. ก็มีโอกาสที่เพลงสุ่มจะดังลั่นออกลำโพงทั้งสถานที่ด้วยความดังสูงสุด
ตอนนี้ผมเปลี่ยนฮาร์ดแวร์ให้ดองเกิลไปต่อกับฝั่งออดิโออินเทอร์เฟซแทนโน้ตบุ๊กแล้ว เลยยังไม่ใช่ปัญหาทันที แต่การป้องกันพฤติกรรมผิดพลาดแบบนี้ก็เป็นหนึ่งในเหตุผลที่ผมจัดระบบใหม่ บนอุปกรณ์พรีเมียมสำหรับงานสร้างสรรค์ระดับมืออาชีพ พฤติกรรม ที่ตั้งค่าไม่ได้ แบบนี้ไม่เหมาะกับงานแสดงสดเลย
น่าเศร้าที่เห็น Apple ใช้กลยุทธ์ชั้นต่ำแบบ Microsoft การบังคับลากผู้ใช้ไปใช้อีกผลิตภัณฑ์หนึ่งคือ การกัดกินแบรนด์ตัวเอง
คล้ายกับภาพ Microsoft ปะทะ Netscape ในอดีต
ผมไม่เข้าใจว่าทำไมถึงไม่มีวิธีง่าย ๆ ในการปิดพฤติกรรมก้าวร้าวนี้ มันดูเหมือนถูกออกแบบมาให้บังคับและน่ารำคาญโดยตั้งใจ และถ้าไม่ตัดทิ้งตั้งแต่ต้น สุดท้ายมันจะลุกลามมากขึ้นแล้วบีบคอผู้ใช้ภายหลัง
ไม่ใช่แค่ปัญหาของ Apple แต่เป็นเรื่องที่นักออกแบบผลิตภัณฑ์หลายคนรับเอา ท่าทีหยิ่งผยอง แบบนี้ไปใช้
ผมไม่ชอบที่พอเปิดไฟล์เสียงแล้ว Music ไม่เพียงเปิดอัตโนมัติ แต่ยังเอาไฟล์นั้นเข้า คลังเพลง ด้วย
จากนั้นก็ต้องมาลบเองพร้อมเลือก “เก็บไฟล์ไว้”
นานจนลืมไปเลยว่าค่าเริ่มต้นมันเป็นแอป Music ผมไม่คิดว่าการเล่นไฟล์หนึ่งไฟล์จะหมายความว่าอยากเอาไฟล์นั้นเข้าไลบรารี
.mp3แล้วเปิดดูข้อมูล เปลี่ยนแอปเริ่มต้นเป็นตัวที่คุณต้องการ แล้วกด “Change all...”ต้องทำแยกตามชนิดไฟล์ครั้งละหนึ่งรอบ แต่พอตั้งแล้วก็จบ
แค่เผลอคลิก AirPods ผิด แอปที่ไม่ใช้และไม่ต้องการก็เด้งขึ้นมาเอง น่ารำคาญมาก
ผมใช้ https://github.com/tombonez/noTunes
อีกอย่างที่ดีคือมันไม่ใช้ไอคอนบนแถบเมนู จึงช่วยประหยัดพื้นที่ที่มีจำกัดได้
ชอบแนวทางนี้มาก ฉลาดดี แต่โดยส่วนตัวแล้วผมชอบให้ Apple Music เปิดเมื่อกด ปุ่ม PLAY บนคีย์บอร์ด
เมื่อก่อนผมเคยค้นหาวิธีหยุดสิ่งนี้ แต่ไม่เจอผลลัพธ์ที่ดี เลยทำ Shortcut ให้ปิดแอป Music อีกครั้งเมื่อมันเปิดขึ้นมา
ในทางปฏิบัติมันทำงานได้ค่อนข้างดี แต่พอถึงเวลาที่ผมอยากใช้แอป Music จริง ๆ มันก็กลายเป็นปัญหา ซึ่งน่าหงุดหงิดเพราะเป็นประสบการณ์ผู้ใช้ที่ไม่ดีจาก Apple