2 điểm bởi GN⁺ 4 ngày trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Music Decoy là một ứng dụng tồn tại dưới dạng tiến trình đang chạy, giúp ngăn ứng dụng Music của hệ thống mở lên khi vô tình nhấn ▶ Play
  • Ứng dụng không làm gì cả ở chế độ nền, mà dùng cùng bundle identifier với ứng dụng Music để hệ thống nhận diện rằng Music đã chạy sẵn
  • Từ v1.1, có thể cấu hình bằng thiết lập mediaAppPath để khi nhấn ▶ Play sẽ mở ứng dụng khác như Spotify
  • Việc Music tự chạy xảy ra khi nhấn ▶ Play trên bàn phím, gửi lệnh phát sau khi kết nối tai nghe Bluetooth, hoặc khi tai nghe chuyển từ chế độ cuộc gọi sang chế độ nhạc sau khi kết thúc cuộc gọi
  • rcd khi có sự kiện phát sẽ gửi lệnh đến ứng dụng đang phát âm thanh nếu có, còn nếu không thì sẽ mở ứng dụng Music của hệ thống; việc vô hiệu hóa daemon này cũng sẽ tắt luôn điều khiển phát media bằng bàn phím

Music Decoy

  • Tải xuống, Xem mã nguồn, có cung cấp lệnh cài đặt $brew install music-decoy

  • Ngăn ứng dụng Music khởi chạy

    • Khi Music Decoy đang chạy, dù vô tình nhấn ▶ Play thì ứng dụng Music của hệ thống cũng sẽ không mở
    • Ứng dụng hoàn toàn không làm gì ở chế độ nền, mà chỉ tồn tại như một tiến trình đang chạy với cùng bundle identifier như ứng dụng Music
  • Cách hoạt động

    • Dùng bundle identifier com.apple.Music để khiến hệ thống cho rằng ứng dụng Music đã chạy sẵn
  • Cấu hình

    • Từ v1.1, có thể cấu hình Music Decoy để mở ứng dụng khác khi nhấn nút ▶ Play
    • Lệnh cấu hình ví dụ cho Spotify:
      defaults write com.lowtechguys.MusicDecoy mediaAppPath /Applications/Spotify.app
      
    • Lệnh đặt lại cấu hình:
      defaults delete com.lowtechguys.MusicDecoy mediaAppPath
      
  • Cách thoát

    • Vì không có biểu tượng trên Dock hay thanh menu, cần thoát bằng một trong các cách sau
      • Mở Activity Monitor, tìm Music Decoy rồi chọn nút ❌ ở phía trên
      • Chạy killall 'Music Decoy' trong Terminal

Điều kiện tự khởi chạy, nguyên nhân và giải pháp thay thế

  • Khi nào Music tự chạy?

    • Xảy ra khi nhấn phím ▶ Play trên bàn phím mà không có ứng dụng nào khác đang phát âm thanh
    • Xảy ra khi tai nghe Bluetooth được kết nối và gửi lệnh phát
    • Xảy ra khi tai nghe Bluetooth chuyển từ chế độ cuộc gọi sang chế độ nhạc do cuộc gọi kết thúc
  • Vì sao điều này xảy ra?

    • rcd là viết tắt của Remote Control Daemon, daemon phụ trách xử lý các phím media
    • Khi có sự kiện phát, rcd sẽ kiểm tra xem hiện có ứng dụng nào đang phát âm thanh hay không
    • Nếu có ứng dụng phát âm thanh, nó sẽ gửi lệnh phát đến ứng dụng đó; nếu không, nó sẽ mở ứng dụng Music của hệ thống
    • Có cách vô hiệu hóa daemon này, nhưng đồng thời cũng sẽ vô hiệu hóa luôn tính năng điều khiển phát media bằng bàn phím
  • Giải pháp thay thế

    • Theo câu trả lời trên StackExchange, có một vài cách để đạt hiệu quả tương tự
    • launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist
      • Vấn đề: vô hiệu hóa hoàn toàn nút Play
    • noTunes dùng cách phát hiện ứng dụng đã chạy và đóng Music ngay khi nó khởi chạy
      • Vấn đề: có dùng một lượng CPU rất nhỏ ở chế độ nền, nhưng việc phát hiện ứng dụng đang chạy là tác vụ rất nhẹ

1 bình luận

 
Ý kiến trên Hacker News
  • Thật sự rất thông minh ở chỗ ứng dụng này hoạt động chỉ bằng cách tồn tại như một tiến trình đang chạy có bundle identifier giống với app Music, mà không làm gì cả ở chế độ nền
    Kiểu giải pháp low-code/no-code này có một sự thanh nhã chỉ có thể xuất hiện khi bạn hiểu hệ thống ở mức rất sâu. Phải biết chính xác điều gì xảy ra trên macOS khi nhấn nút phát, bundle identifier hoạt động ra sao, và kết quả cuối cùng lại đẹp ở chỗ gần như chỉ là một “xung đột” không có mấy dòng mã
    Nói thêm thì các coding agent lại khá yếu với kiểu vấn đề này. Codex hiện tại nhiều khả năng sẽ tạo ra một ứng dụng quá tay, cứ giám sát vòng lặp rồi giết app Music mỗi khi nó chạy lên

    • Ngược lại, đây có vẻ là một ví dụ giả định rất hay về cách dùng coding agent hiệu quả
      Nếu bảo nó “hãy chặn app Apple Music chạy lên”, nhiều khả năng nó sẽ làm theo cách mà đa số con người cũng nghĩ tới: giám sát rồi tắt. Nhưng nếu bảo “hãy điều tra vì sao Apple Music lại chạy”, thì từ kết quả điều tra, người dùng có thể nhanh chóng đi đến kết luận rằng cách tốt nhất là tạo một ứng dụng không cần code xung đột với Music
    • Hồi học cấp ba, bố tôi dùng Apple ScreenTime để giới hạn thời gian chơi game, nhưng tôi đã lách bằng cách đổi BundleIdentifier trong info.plist của game thành com.apple.systempreferences rồi ký .app bằng chứng chỉ nhà phát triển của mình
      Khá vui cho tới khi bị phát hiện
  • Tôi vẫn không thể tin là Apple đã khai tử iTunes
    Ngày trước tôi để cả thư viện nhạc số của mình trong iTunes, phần lớn là nhạc rip trực tiếp từ CD, nhưng cũng có album và chương trình TV mua từ iTunes. Khi Apple vứt bỏ hoàn toàn iTunes, xóa nó khỏi Mac OS và thay bằng thứ như Apple Music, tôi đã nghĩ là sẽ không bao giờ tin họ nữa
    Tôi đã tìm một MP3 player tử tế một thời gian, cũng từng dùng AIMP, nhưng giờ đang nghĩ tới việc tự làm một trình phát dựa trên file cục bộ với giao diện của riêng mình bằng AI. Tôi không cần và cũng không muốn streaming. Có lẽ tôi đã tiếp tục mua album trên iTunes, nhưng giờ mua CD còn tốt hơn

    • Trong Apple Music, bạn vẫn có thể tắt dịch vụ đám mây mà vẫn dùng các track cục bộ cùng nhạc tải từ iTunes Music Store như bình thường
      Tôi đã dùng như vậy trong phần lớn năm ngoái, tắt hết tính năng cloud, nạp toàn bộ nhạc cục bộ vào Apple Music rồi đồng bộ sang iPhone bằng cáp như thời iPod cũ, và nó vẫn hoạt động tốt
    • App Music vẫn đọc cùng một thư viện như iTunes và các tính năng âm nhạc cốt lõi cũng gần như giống hệt. Có phải điều đáng tiếc nằm ở giao diện không?
    • Cũng có những trình quản lý thư viện/trình phát được làm thủ công rất tốt như https://www.strawberrymusicplayer.org
    • foobar là đỉnh nhất: https://www.foobar2000.org/mac
    • Tôi không thấy khác biệt nhiều. Tôi vẫn dùng app Music và nó hoạt động y hệt như trước khi đổi tên
      Dù không đăng ký Apple Music, tôi vẫn để toàn bộ thư viện nhạc số của mình trong iTunes/Music và dùng như ngày xưa
  • Tôi dùng tiện ích tích hợp hidutil để remap các phím F3~F9 thành những phím mình muốn
    Tôi đổi F3/F4 thành chỉnh độ sáng đèn nền bàn phím, còn F5~F9 thành các phím chức năng thông thường. Bài này có nhiều thông tin hữu ích: https://news.ycombinator.com/item?id=35555475
    Trên M1 MacBook, cách làm là dùng hidutil property --set với UserKeyMapping để chỉ định các giá trị HIDKeyboardModifierMappingSrc/HIDKeyboardModifierMappingDst

  • Tôi từng cần thứ như thế này vài tháng trước. Tôi chạy keyboard rig bằng MacBook trong một buổi diễn live và dùng tai nghe không dây độ trễ thấp để monitor
    Tôi cắm dongle phát của tai nghe vào laptop, và khi nhấn nút trên tai nghe thì dongle gửi lệnh “play/pause”, khiến Music chạy lên và bắt đầu phát âm thanh qua thiết bị xuất mặc định. Nó thậm chí còn không quan tâm xem bộ phát tai nghe có đang được chọn làm đầu ra mặc định hay không, nên trong cấu hình đa thiết bị phức tạp, âm thanh hoàn toàn có thể phát ra từ một thiết bị khác
    Nếu lỡ bấm nhầm giữa buổi diễn mà mặc định đang là interface nối với hệ thống P.A., thì một bài nhạc ngẫu nhiên có thể nổ ra khắp cả venue ở âm lượng tối đa
    Giờ thì tôi đã đổi cấu hình phần cứng để cắm dongle vào audio interface thay vì laptop, nên trước mắt không còn là vấn đề nữa, nhưng việc ngăn kiểu kích hoạt lỗi này cũng là một phần lý do tôi phải cấu hình lại. Một hành vi không thể cấu hình như thế này quá không phù hợp với môi trường biểu diễn live đối với một thiết bị premium dành cho giới sáng tạo chuyên nghiệp

  • Thật chán khi thấy Apple dùng những chiêu trò kiểu Microsoft cấp thấp như thế. Cưỡng ép người dùng sang sản phẩm khác là tự ăn mòn thương hiệu

    • Tại sao việc nhấn nút phát khi không có media session lại khiến trình phát nhạc đi kèm hệ điều hành mở ra là điều bất thường?
    • Cụm “chiêu trò kiểu Microsoft cấp thấp” làm tôi bật cười, vì khi đọc giải pháp thì suy nghĩ đầu tiên của tôi lại là “đúng là kiểu Apple thật”
    • Apple đang ám ảnh với việc triệt Spotify. Vì vậy họ có vẻ làm những chuyện thù địch với khách hàng theo cách không giống Apple
      Nó khá giống thế đối đầu Microsoft và Netscape ngày xưa
    • Kiểu hành xử này phản tác dụng rất mạnh. Tôi tuyệt đối không muốn dùng bất kỳ sản phẩm nào liên quan đến Apple Music
      Tôi không hiểu vì sao lại không có một cách đơn giản để tắt hành vi hung hăng này. Nó trông như được cố ý thiết kế để ép buộc và gây khó chịu, và nếu không cắt từ sớm thì sau này nó sẽ lan rộng hơn nữa để siết người dùng
      Không chỉ riêng Apple, rất nhiều product designer đang chấp nhận kiểu thái độ ngạo mạn này
    • Khó mà gọi việc mở trình phát nhạc đi kèm hệ điều hành khi bạn cố phát nhạc là “bị ép chuyển hướng”
  • Tôi ghét việc mở file âm thanh không chỉ làm Music tự chạy mà còn thêm luôn file đó vào thư viện nhạc
    Sau đó lại phải tự tay xóa đi và chọn “giữ lại file”

    • Từ rất lâu rồi, khi app Music còn là iTunes, tôi đã đặt mọi file nhạc mở bằng QuickTime Player
      Lâu đến mức tôi còn quên mất mặc định vốn là app Music. Việc phát một file không có nghĩa là tôi muốn thêm nó vào thư viện
    • Vì chuyện này mà tôi đã nhiều lần giật mình khi audio liên quan đến công việc bất ngờ xuất hiện trong playlist
    • Phiền thật, nhưng sửa cũng khá dễ. Chỉ cần nhấp phải vào file như .mp3, mở Get Info, đổi ứng dụng mặc định sang app bạn muốn rồi nhấn “Change all...”
      Phải làm một lần cho mỗi định dạng file, nhưng xong một lần là xong
  • Việc bấm nhầm AirPods rồi một app mình không dùng cũng không muốn dùng đột nhiên bật lên thật sự rất khó chịu

    • Tôi không phải fan Apple, nhưng nếu là ứng dụng không cần thì sao không gỡ nó đi?
    • Tôi cũng gặp y hệt. Ngay cả hộp thoại modal chặn ở phía trên cũng không có nút đóng nổi bật, nên tôi thấy nó giống dark pattern
  • Tôi dùng https://github.com/tombonez/noTunes

    • Tôi từng dùng noTunes trên máy Mac cũ. Điểm hay của cách này là như trang đó ghi rõ, nó không phát hiện app chạy rồi giết, mà chặn ngay từ đầu không cho nó chạy
      Tôi cũng thích việc nó không dùng icon trên thanh menu, giúp tiết kiệm không gian vốn đã hạn chế
  • Tôi thật sự thích cách tiếp cận này. Rất thông minh. Tuy vậy cá nhân tôi lại thích việc nhấn nút PLAY trên bàn phím thì Apple Music mở ra

  • Trước đây tôi từng tìm cách chặn chuyện này nhưng không ra kết quả tốt, nên đã tạo một Shortcut để đóng lại app Music mỗi khi nó mở
    Thực tế nó hoạt động khá ổn, nhưng lại thành vấn đề khi tôi thực sự muốn dùng app Music. Xét về trải nghiệm người dùng của Apple thì khá tệ và gây bực mình