ヘッドフォン/スピーカーが接続されていることを確認する方法

ヘッドフォン/スピーカーが接続されていることを確認する方法

オーディオ出力を生成するスクリプトを実行しており、ヘッドフォンがノートパソコンに接続されているかどうかに応じて異なる音量レベルを設定したいと思います。

私のスクリプトはすでにさまざまな音量レベルを設定しており、オーディオ出力に何かが接続されている場合はヘッドフォンであることを知っています。また、スクリプトの実行中はプラグ/プラグ解除状態は変わりません。したがって、スクリプトの起動時に何かが挿入されたかどうかを知る必要があります。

私は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

関連情報