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, 출력을 구문 분석하고, 쉘 스크립트에서 동일한 작업을 수행하는 것입니다.

답변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 "$@"' _ {}

관련 정보