我想在拔下耳机后暂停播放,然后在重新插入耳机后恢复播放。
我当前的解决方案使用 ACPI 来检测插入/拔出,如下所示这里。要播放/暂停播放,我使用xdotool key XF86AudioPlay
。
这个解决方案在基本情况下工作正常:
- 音乐正在播放,耳机已插入
- 耳机拔出 -> 音乐暂停
- 耳机重新插入 -> 音乐继续播放。
然而,我确实不是如果未处于活动状态,则想要恢复播放什么时候耳机已拔掉。
想象一下这样的场景:
- 戴上耳机启动电脑,
- 播放音乐,
- 暂停音乐,
- 拔下耳机,
- 重新插入耳机。
问题就出在最后一点——虽然拔下耳机时播放功能并未处于活动状态,但重新插入耳机后播放会恢复。
此外,xdotool key XF86AudioPlay
只是切换播放,而xdotool key XF86AudioPause
什么也不做。这让事情变得更糟:
- 戴上耳机启动电脑,
- 播放音乐,
- 暂停音乐,
- 拔下耳机(音乐开始播放!)。
所以我需要的是检测播放/暂停/停止事件以及插入/拔出事件,以便能够在所有可能的情况下做出正确反应。
我想到的一个想法是重新绑定播放/暂停/停止的键盘快捷键以添加状态机逻辑。这样做的缺点是播放总是必须使用这些键盘快捷键来控制,而不是使用 Rhythmbox 按钮,因为后者有些不切实际。
另外,如果我在播放时关闭 Rhythmbox,状态机将保持状态playing
。当然,我可以有一个“守护进程”,它会等到 Rhythmbox 关闭,然后将状态设置为stopped
。但是,如果不是 Rhythmbox 播放音乐,例如 VLC 等,该怎么办?这种方法很丑陋,也不可靠,所以我想避免它。
我的问题:如何检测媒体播放何时暂停/恢复/停止?