オーディオ出力を生成するスクリプトを実行していますが、ヘッドフォンがノートブックに接続されているかどうかに応じて、異なる音量レベルを設定したいと思います。
私のスクリプトはすでにさまざまな音量レベルを設定しており、オーディオ出力に何かが接続されている場合、それはヘッドフォンであることを知っています。また、スクリプトの実行時にプラグ/アンプラグの状態が変化しないことも確実です。したがって、スクリプトの開始時に何かが接続されているかどうかを知る必要があるだけです。
Debianテストを実行していて、カーネルにCONFIG_SND_HDA_INPUT_JACK
がありませんが、このメソッドはすべての* nixで機能することが望ましいです。
おそらく短いスクリプトがすべてのカードに釣り込まれます。
#!/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
これはDebianバスターで私にとってはうまくいきますが、snd_card_num
値を調整する必要があるかもしれません。ほとんどの場合、0
または1
である必要があります。おそらく、必要な値を見つける最も簡単な方法は、0から上に向かって試すことです。私にとっては1
です。
@dirktで述べたように、node_num
も調整する必要がある場合があります。
シェルスクリプトcheckHeadphones:
#!/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