
背景:Debian / Ryzen 2200G、HDMIモニターを使用したASRock B450でテストされています。
/etc/pulse/default.pa 経由で、または以下を使用してデフォルトのオーディオシンクを手動で設定できます。 pacmd set-default-sink alsa_output.pci-0000_38_00.1.hdmi-stereo-extra1
ただし、モニターがスタンバイモードに入ると、デフォルト設定は内蔵HDaudioカードにリセットされ、ボリュームアプレットはHDMIボリュームを追跡しなくなり、代わりに内部オーディオカードを介してヘッドフォンとリアパネルジャックに電力を供給します。 HDMI「カード」が削除されたため、これが起こると思いますが、わかりません。
私もこれは別の質問ですしかし、それはうまくいきませんでした。ほとんどの問題はpulseaudioのデフォルト設定に関連しているようですが、うまくいきません。オーディオはまだHDMIモニターに正しくルーティングされますが、アプレットが間違ったボリュームを追跡しているだけです。上記のコマンドを使用してプライマリカードをリセットすると、次の待機まで正しい音量表示に戻ります。
どうすれば解決できますか?デフォルトでは、hdmiリスナーを再利用できるようになるとすぐに、「pacmd set-default-sink」を実行する必要があります。
流し台に関する新しい情報
- 待機前:カード0はHDMIで、カード1は内蔵されています。カード0はデフォルトで使用可能で、カード1も使用可能ですが、デフォルトではありません(詳細情報リンク:https://paste.scratchbook.ch/view/83c0e9a5)
- 待機中:HDMIが利用できず、内蔵カードがデフォルトで表示されます(詳細リンク:https://paste.scratchbook.ch/view/9e9ae422)
- 待機後:HDMIを再利用でき、内蔵カードはまだデフォルトです(詳細コンテンツリンク:https://paste.scratchbook.ch/view/9be5801a)
待機を中断した後、新しいプレーヤーを起動し、音楽がHDMIディスプレイから出てくることを確認できましたが、アプレットには線の付いたスピーカーが表示されました。
答え1
わかりました。状況は次のとおりです。
各ポート受信機のポート状態は「使用可能」で、HDMIモニターをスタンバイ状態にするとポートの状態が「使用不可」になります。
デフォルトの受信機は次のように考えることもできます。バックアップ受信機:これはPulseaudioが使用する受信機です。アプリケーションに有効なリスナーを割り当てるためにストリームキャッシュ(どのストリームがどのリスナーを使用しているかを覚えています)を使用する方法はありません。したがって、プライマリ受信機がこの目的で使用できないことを指すことはできません。これが、基本受信機が利用可能な他の受信機に切り替えられる理由です。
モニターがスタンバイモードで再起動すると、デフォルトの受信機はそのまま残り、再び切り替えられません(「デフォルト」のデフォルト受信機はありません)。
この問題を処理する最も簡単な方法は、設定変更を購読する簡単なPulseaudioアプリケーションを作成することです(参照:ここたとえば、HDMIレシーバーが再利用できるたびにデフォルトに設定します。
別のオプションはpactl subscribe
、を使用して、出力を解析し、シェルスクリプトで同じことを行うことです。
答え2
以下は、「pactl subscribe」出力を解析する方法の例です。
この例では、ヘッドセットが接続または切断されると、ジョブのトリガーは「カード#0のイベント変更」文字列です。
#!/bin/bash
function MySubscription() {
if [ "$1" != "Event change on card #0" ]; then
return 0
fi
#detect plug state
pactl list | grep "analog-output-headphones" | grep "not available" > /dev/null
STATE=$?
if [ $STATE -eq 0 ]; then
echo "headphones unplugged"
#YOUR COMMAND HERE
else
echo "headphones plugged"
#YOUR COMMAND HERE
fi
return 0
}
export -f MySubscription
pactl subscribe | xargs -I {} bash -c 'MySubscription "$@"' _ {}