HDMI显示器待机后重新设置xfce4-pulseaudio-plugin默认值

HDMI显示器待机后重新设置xfce4-pulseaudio-plugin默认值

背景: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”。

有关水槽的新信息

  1. 待机前:卡0为hdmi,卡1为内置;卡 0 是默认且可用的,卡 1 也可用但不是默认的(详细信息链接:https://paste.scratchbook.ch/view/83c0e9a5
  2. 待机期间:hdmi 不可用,内置卡被标记为默认(详细信息链接:https://paste.scratchbook.ch/view/9e9ae422
  3. 待机后: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 "$@"' _ {}

相关内容