我正在为 i3/Sway 编写自己的自定义状态以显示音量指示器,但遇到了障碍。
我想知道是否有一种标准方法,使用标准 Linux 工具(可能是 ALSA 或 sysfs)来检测耳机是否插入?我更愿意这样做,以防我想在任何时候从 Pipewire 切换到常规 JACK,或者其他什么。
我将发布我在网上找到的这个“半工作”解决方案的一个片段(抱歉,我不记得是谁发布的,所以我可以归功于那个人)。
has_headset() { grep -A4 -ri "Headphone Playback Switch" /proc/asound/card*/* | grep "Amp-Out vals.*\[0x00\]*" }
此功能has_headset()
有点用,但问题是如果耳机插入且静音,则无法使用。不确定“Amp-Out vals”的值是什么意思。似乎是[0x80] [0x80]
在拔下耳机时,然后[0x00] [0x00]
是插入耳机且未静音时。
我正在使用 POSIX sh,但也非常欢迎专门为 Bash 编写的解决方案!
对我来说,Debian trixie(测试)上的 alsa-utils 1.2.12 和音频设备:英特尔公司 7 系列/C216 芯片组系列高清晰度音频控制器(rev 04)可以正常工作。
如果名称与您的情况不同,另请参阅
amixer -c0 contents
查看卡 0 的所有控件。Headphone Jack
我测试的笔记本电脑有一个组合式耳机 + 麦克风 TRRS 插孔插座,但我仍然看到一个额外的
Mic Jack
控件,on
当我插入耳机但没有插入没有麦克风的耳机(TRS 插孔插头)时它会切换到该控件,因此对于检查has_headset
耳机和麦克风是否连接到同一张卡,您可以执行以下操作:请注意,在下
strace
,我看到amixer
正在执行:/proc
因此无法从nor获取信息/sys
。