背景: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 sink 再次可用后立即运行“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 显示器,但小程序显示一个划掉的扬声器。
好的,会发生以下情况:
接收器的每个端口都有一个“可用”状态,将 HDMI 监视器置于待机状态会使端口状态变为“不可用”。
默认接收器也可以被认为是后备接收器:Pulseaudio 使用的接收器无法使用流缓存(它记住哪个流使用哪个接收器)将有效接收器分配给应用程序。所以它不能保持默认接收器指向不能用于此目的的东西,这就是为什么默认接收器切换到任何其他可用接收器的原因。
当监视器从待机状态恢复时,默认接收器会保留,并且不会切换回来(没有“首选”默认接收器)。
处理这个问题的最简单方法是编写一个简单的 Pulseaudio 应用程序来订阅配置更改(参见此处的示例),并且每当您的 HDMI 接收器再次可用时,将其设置为默认值。
另一种选择可能是使用
pactl subscribe
,解析输出,并在 shell 脚本中执行相同的操作。这是我如何解析“pactl subscribe”输出的示例。
在此示例中,当插入或拔出耳机时,操作的触发器是字符串“Event change on card #0”。