我正在运行一个产生音频输出的脚本,我想根据耳机是否插入我的笔记本电脑来设置不同的音量级别。
我的脚本已经设置了不同的音量级别,并且我知道如果有东西插入音频输出,那就是耳机。还可以肯定的是,在脚本运行期间,插入/拔出状态不会改变。所以我真的只需要知道脚本启动时是否插入了某些东西。
我正在运行 Debian 测试,并且我的内核没有CONFIG_SND_HDA_INPUT_JACK
,但最好该方法适用于所有 *nix。
答案1
一个可能更短的脚本探寻所有卡片。
#!/bin/sh
# You can put the function below into /etc/profile.d/99-headset.sh
#
has_headset(){
grep -A4 -ri 'Headphone Playback Switch' /proc/asound/card*/* | \
grep "Amp-Out vals.*0x00 0x00" -q
}
has_headset
答案2
这对我在 Debian buster 上有效,尽管您可能需要调整该snd_card_num
值。最有可能的是应该是0
或1
。也许找出您需要的值的最简单方法是从 0 向上尝试。对我来说是的1
。
正如@dirkt 所提到的,您可能还需要调整node_num
.
外壳脚本检查耳机:
#!/bin/sh
# Check whether the headphones (or speakers) are plugged in or not.
# Usage:
# checkHeadphones > /dev/null
# if [ $? -eq 0 ]; then
# echo "Headphones are connected"
# else
# echo "Headphones are not connected"
# fi
snd_card_num=0
node_num="0x16"
snd_card_file="/proc/asound/card${snd_card_num}/codec#0"
# Run the check
cat "${snd_card_file}" \
| grep -A 4 'Node $node_num' \
| grep 'Amp-Out vals: \[0x00 0x00\]' \
> /dev/null
exit_state=$?
if [ $exit_state -eq 0 ]; then
state="connected"
else
state="disconnected"
fi
echo "$state"
exit $exit_state