2 คะแนน โดย GN⁺ 4 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 เปิดอยู่แล้ว
  • การตั้งค่า

    • ตั้งแต่ 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

เงื่อนไขการเปิดอัตโนมัติ, สาเหตุ, และทางเลือก

  • 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 ความคิดเห็น

 
GN⁺ 4 시간 전
ความคิดเห็นจาก Hacker News
  • ฉลาดมากที่มันทำงานได้เพียงแค่คงอยู่เป็นโปรเซสที่กำลังรันด้วย bundle identifier เดียวกับแอป Music โดยไม่ได้ทำอะไรเลยในเบื้องหลัง
    วิธีแก้แบบโลว์โค้ด/โนโค้ดลักษณะนี้มีความงามที่เกิดขึ้นได้ก็ต่อเมื่อเข้าใจระบบอย่างลึกมาก ต้องรู้ว่าเวลากดปุ่มเล่นบน macOS นั้นเกิดอะไรขึ้นกันแน่ และ bundle identifier ทำงานอย่างไร ผลลัพธ์สุดท้ายกลับเป็นแค่ “การชนกัน” ที่แทบไม่มีโค้ดเลย ซึ่งสวยมาก
    พูดนอกเรื่องหน่อย เอเจนต์เขียนโค้ดมักอ่อนกับปัญหาแบบนี้ ถ้าเป็น Codex ตอนนี้ก็น่าจะทำแอปเกินความจำเป็นที่คอยเฝ้าดูการเปิด Music แล้วคอยฆ่ามันในลูป

    • กลับกัน ผมว่ามันดูเหมือนตัวอย่างสมมุติที่ดีของการใช้เอเจนต์เขียนโค้ดให้มีประสิทธิภาพ
      ถ้าสั่งว่า “ช่วยทำให้ Apple Music เปิดไม่ได้” ก็น่าจะลงเอยด้วยวิธีเฝ้าดูแล้วปิดทิ้งแบบที่คนส่วนใหญ่ทำ แต่ถ้าสั่งว่า “ช่วยสืบหน่อยว่าทำไม Apple Music ถึงเปิดขึ้นมา” ผู้ใช้ก็น่าจะหาข้อสรุปได้เร็วจากผลการสืบสวนว่า ทางออกที่ดีที่สุดคือสร้าง แอปแบบไม่ต้องเขียนโค้ด ที่ชนกับ Music
    • ตอนอยู่มัธยม พ่อผมใช้ Apple ScreenTime จำกัดเวลาเล่นเกม แต่ผมเลี่ยงมันด้วยการแก้ BundleIdentifier ใน info.plist ของเกมเป็น com.apple.systempreferences แล้วเซ็น .app ใหม่ด้วยใบรับรองนักพัฒนาของตัวเอง
      สนุกดีอยู่พักหนึ่งก่อนจะโดนจับได้
  • จนถึงตอนนี้ผมก็ยังไม่อยากเชื่อว่า Apple เอา iTunes ออกไปแล้ว
    แต่ก่อนผมเก็บคลังเพลงดิจิทัลทั้งหมดไว้ใน iTunes ส่วนใหญ่เป็นเพลงที่ริปจาก CD เอง แต่ก็มีอัลบั้มและรายการทีวีที่ซื้อจาก iTunes ด้วย ตอนที่ Apple ทิ้ง iTunes ทั้งก้อนแล้วลบมันออกจาก Mac OS ไปแทนด้วยอะไรอย่าง Apple Music ผมก็ตั้งใจเลยว่าจะไม่ไว้ใจอีกแล้ว
    ช่วงหนึ่งก็หาตัวเล่น MP3 ดี ๆ และลองใช้ AIMP แต่ตอนนี้กำลังคิดจะใช้ AI ทำเพลเยอร์แบบไฟล์โลคัลที่มีอินเทอร์เฟซตามใจตัวเอง ไม่ต้องการสตรีมมิงและไม่ได้อยากได้ด้วย ผมอาจจะยังซื้ออัลบั้มใน iTunes ต่อก็ได้ แต่ตอนนี้ซื้อเป็น CD น่าจะดีกว่า

    • คุณปิด บริการคลาวด์ ใน Apple Music แล้วยังใช้แทร็กโลคัลกับเพลงที่ดาวน์โหลดจาก iTunes Music Store ได้ตามปกติ
      ปีที่แล้วผมใช้แบบนั้นเกือบทั้งปี ปิดความสามารถฝั่งคลาวด์ไว้ เอาเพลงโลคัลทั้งหมดใส่ Apple Music แล้วซิงก์เข้า iPhone ด้วยสายเหมือน iPod สมัยก่อน ซึ่งยังทำงานได้ดี
    • แอป Music อ่านไลบรารีเดียวกับ iTunes และฟังก์ชันหลักด้านเพลงก็แทบเหมือนกันทั้งหมด สิ่งที่น่าเสียดายอยู่ที่ อินเทอร์เฟซ มากกว่าหรือเปล่า?
    • ยังมี ตัวจัดการไลบรารี/เพลเยอร์ ที่ทำอย่างประณีตด้วยมืออย่าง https://www.strawberrymusicplayer.org
    • foobar ดีที่สุด: https://www.foobar2000.org/mac
    • ผมไม่ค่อยเห็นความต่างนะ ทุกวันนี้ก็ยังใช้แอป Music และมันทำงานเหมือนเดิมทุกอย่างตั้งแต่ก่อนเปลี่ยนชื่อ
      ถึงจะไม่ได้สมัคร 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” ทำเอาขำ เพราะพออ่านวิธีแก้แล้ว ความคิดแรกของผมกลับเป็น “นี่มันวิธีแบบ Apple มาก ๆ”
    • Apple หมกมุ่นกับการฆ่า Spotify มาก เลยดูเหมือนจะทำอะไรที่เป็นปฏิปักษ์กับลูกค้าแบบไม่เป็น Apple เท่าไร
      คล้ายกับภาพ Microsoft ปะทะ Netscape ในอดีต
    • พฤติกรรมแบบนี้ส่งผลย้อนกลับแรงมาก ผมไม่อยากใช้ผลิตภัณฑ์ใด ๆ ที่เกี่ยวกับ Apple Music เลย
      ผมไม่เข้าใจว่าทำไมถึงไม่มีวิธีง่าย ๆ ในการปิดพฤติกรรมก้าวร้าวนี้ มันดูเหมือนถูกออกแบบมาให้บังคับและน่ารำคาญโดยตั้งใจ และถ้าไม่ตัดทิ้งตั้งแต่ต้น สุดท้ายมันจะลุกลามมากขึ้นแล้วบีบคอผู้ใช้ภายหลัง
      ไม่ใช่แค่ปัญหาของ Apple แต่เป็นเรื่องที่นักออกแบบผลิตภัณฑ์หลายคนรับเอา ท่าทีหยิ่งผยอง แบบนี้ไปใช้
    • ถ้าคุณพยายามเล่นเพลงแล้วเครื่องเล่นเพลงที่มากับระบบปฏิบัติการเปิดขึ้นมา ผมว่ามันก็ยากจะเรียกว่า “ถูกบังคับลากไป” นะ
  • ผมไม่ชอบที่พอเปิดไฟล์เสียงแล้ว Music ไม่เพียงเปิดอัตโนมัติ แต่ยังเอาไฟล์นั้นเข้า คลังเพลง ด้วย
    จากนั้นก็ต้องมาลบเองพร้อมเลือก “เก็บไฟล์ไว้”

    • นานมากแล้ว ตั้งแต่ตอนที่แอป Music ยังเป็น iTunes ผมตั้งให้ไฟล์เพลงทั้งหมดเปิดด้วย QuickTime Player
      นานจนลืมไปเลยว่าค่าเริ่มต้นมันเป็นแอป Music ผมไม่คิดว่าการเล่นไฟล์หนึ่งไฟล์จะหมายความว่าอยากเอาไฟล์นั้นเข้าไลบรารี
    • เพราะแบบนี้ เสียงที่เกี่ยวกับงานเด้งขึ้นมาในเพลย์ลิสต์จนทำให้ตกใจมาหลายครั้ง
    • มันน่าหงุดหงิดก็จริง แต่แก้ค่อนข้างง่าย คลิกขวาไฟล์อย่าง .mp3 แล้วเปิดดูข้อมูล เปลี่ยนแอปเริ่มต้นเป็นตัวที่คุณต้องการ แล้วกด “Change all...”
      ต้องทำแยกตามชนิดไฟล์ครั้งละหนึ่งรอบ แต่พอตั้งแล้วก็จบ
  • แค่เผลอคลิก AirPods ผิด แอปที่ไม่ใช้และไม่ต้องการก็เด้งขึ้นมาเอง น่ารำคาญมาก

    • ผมไม่ใช่แฟน Apple แต่ถ้าเป็นแอปที่ไม่ต้องการ แล้วทำไมไม่ลบมันทิ้งล่ะ?
    • ผมก็เจอปัญหาเดียวกัน แถมในโมดัลแบบบล็อกที่เด้งขึ้นมา ยังไม่มีปุ่มปิดที่มองเห็นชัดอีกด้วย จนให้ความรู้สึกเหมือน dark pattern
  • ผมใช้ https://github.com/tombonez/noTunes

    • ผมเคยใช้ noTunes บน Mac เครื่องเก่า แต่ข้อดีของวิธีนี้คือมันไม่ได้ตรวจจับแล้วฆ่าแอปหลังเปิดขึ้นมา แต่ป้องกันไม่ให้เปิดได้ตั้งแต่แรก ซึ่งมีระบุไว้ชัดเจนบนหน้าเพจ
      อีกอย่างที่ดีคือมันไม่ใช้ไอคอนบนแถบเมนู จึงช่วยประหยัดพื้นที่ที่มีจำกัดได้
  • ชอบแนวทางนี้มาก ฉลาดดี แต่โดยส่วนตัวแล้วผมชอบให้ Apple Music เปิดเมื่อกด ปุ่ม PLAY บนคีย์บอร์ด

  • เมื่อก่อนผมเคยค้นหาวิธีหยุดสิ่งนี้ แต่ไม่เจอผลลัพธ์ที่ดี เลยทำ Shortcut ให้ปิดแอป Music อีกครั้งเมื่อมันเปิดขึ้นมา
    ในทางปฏิบัติมันทำงานได้ค่อนข้างดี แต่พอถึงเวลาที่ผมอยากใช้แอป Music จริง ๆ มันก็กลายเป็นปัญหา ซึ่งน่าหงุดหงิดเพราะเป็นประสบการณ์ผู้ใช้ที่ไม่ดีจาก Apple