
オーディオ出力を生成するスクリプトを実行しており、ヘッドフォンがノートパソコンに接続されているかどうかに応じて異なる音量レベルを設定したいと思います。
私のスクリプトはすでにさまざまな音量レベルを設定しており、オーディオ出力に何かが接続されている場合はヘッドフォンであることを知っています。また、スクリプトの実行中はプラグ/プラグ解除状態は変わりません。したがって、スクリプトの起動時に何かが挿入されたかどうかを知る必要があります。
私は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
snd_card_num
この値を調整する必要がありますが、これはDebianバスターで機能します。ほとんどは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