HN精选|优雅阻止音乐App自启

MusicDecoy冒名顶替阻止音乐App自启,559星

一个让数百万Mac用户抓狂的”功能”

你正在工作,伸手按下键盘上的播放键——只是想切首歌或者单纯误触——Apple Music弹了出来。你挂断一个电话,蓝牙耳机从通话模式切回音乐模式,Apple Music又弹了出来。你插上蓝牙音箱,Apple Music再次不请自来。如果你是macOS用户,以上场景一定不陌生。这个”功能”长期以来是无数Mac用户的痛点:即使你从未主动打开过Apple Music,它也会在各种场景下自动启动。

MusicDecoy:一个几乎没有代码的优雅方案

开发者 bobbiechen 在Hacker News上分享的 MusicDecoy 项目以559分和223条评论高居榜单第二。这个工具的巧妙之处在于它几乎不执行任何代码——它通过”冒名顶替”的方式解决了问题。MusicDecoy注册了与系统Music应用完全相同的Bundle Identifier,当macOS试图启动Music时,系统实际上启动的是MusicDecoy,而这个应用什么也不做,静静地”占据”了这个位置。

深入macOS的媒体控制机制

问题的根源在于macOS中一个名为 rcd(Remote Control Daemon)的守护进程。当播放事件发生时,rcd会检查当前是否有应用正在播放音频。如果有,它将播放命令发送给该应用;如果没有,它就启动系统的Music应用。这解释了为什么Apple Music会在三种场景下自动启动:按下键盘的▶播放键且无其他应用播放音频时;蓝牙耳机连接并发送播放命令时;通话结束后蓝牙耳机从通话模式切换到音乐模式时。

传统的解决方案是直接禁用rcd守护进程,但这会导致键盘媒体控制完全失效。另一个替代方案是noTunes,它会持续监听并杀死Music进程,但这种方式会在后台持续消耗CPU资源。MusicDecoy的思路截然不同:不需要禁用任何系统服务,不需要后台轮询,它仅仅通过”存在”就完成了任务。

HN社区的高度赞赏

Hacker News社区对这个项目给予了极高的评价。用户 jxmorris12 的评论获得了广泛认同:”这个应用在后台完全不执行任何工作。它的工作原理仅仅是作为一个运行中的进程存在,得益于它拥有与Music应用相同的bundle identifier。我喜欢这种巧妙、低代码甚至零代码的工程方案。要达到这种程度的优雅,你通常需要对系统有非常深入的理解——在这个案例中,需要精确理解按下播放键时macOS内部发生了什么,以及bundle identifier的机制。”

用户 NobodyNada 分享了一个实际应用场景:”几个月前我就需要这样的工具。我用MacBook来运行我的(音乐)键盘设备进行现场演出,同时使用低延迟无线耳机进行监听。耳机的发射器加密狗插在笔记本上,如果我按了耳机上的按钮,它就会发送播放/暂停命令……导致Music启动并开始通过默认输出设备播放音频。它甚至不关心我的耳机发射器是否被选为默认输出设备。”

v1.1版本之后,MusicDecoy还支持将播放事件重定向到其他应用(如Spotify),通过一行简单的终端命令即可配置:defaults write com.lowtechguys.MusicDecoy mediaAppPath /Applications/Spotify.app

社区中也有一些不同的声音。用户 riazrizvi 批评道:”看到Apple使用这种低级的微软式策略,强迫用户启动他们那糟糕的产品,这本质上是品牌的自相残杀。”用户 vachina 则给出了最激进的方案:”直接删除Music应用……零进程。”

原文链接:Music Decoy

HN讨论:Hacker News 讨论区

Leave a Reply

Your email address will not be published. Required fields are marked *