背景: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
,解析输出,并在 shell 脚本中执行相同的操作。
答案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 "$@"' _ {}