데비안은 노트북 스피커를 헤드폰으로 전환하지만 HDMI를 헤드폰으로 전환하지는 않습니다. 오디오 출력이 자동으로 전환될 수 있습니까?

데비안은 노트북 스피커를 헤드폰으로 전환하지만 HDMI를 헤드폰으로 전환하지는 않습니다. 오디오 출력이 자동으로 전환될 수 있습니까?

노트북 스피커를 사용할 때 헤드폰을 연결하면 자동으로 스피커 출력이 헤드폰으로 전환되고, 플러그를 뽑으면 그 반대로 자동 전환됩니다. HDMI를 통해 모니터 스피커를 사용하는 경우 자동 전환이 없습니다.

헤드폰을 연결(연결 해제)하면 오디오 출력이 장치 간에 자동으로 전환될 수 있습니까?

Debian 12(bookworm), 커널 버전 6.7.9-2, 파이프와이어 1.0.5.

답변1

노트북 스피커와 아날로그 헤드폰 간의 오디오 자동 전환은 단일 오디오 칩의 서로 다른 출력 간에 발생합니다. 칩에 대한 일부 하드웨어 지원이 있을 수도 있습니다. HD 오디오 스타일 전면 패널 오디오 잭을 통해 사운드 칩 내에서 전환 가능한 기능을 통해 활성화되면 연결된 헤드폰을 감지할 때 자동으로 다른 출력을 음소거합니다.

(예를 들어 alsamixerPipewire에서 제공하는 단순화된 볼륨 제어 대신 사운드 칩의 실제 하드웨어 믹서를 선택하면 이를 스위치로 볼 수 있습니다 Auto-Mute.)

구형 AC97 스타일 전면 패널 오디오 잭의 경우 실제로는 헤드폰 잭이 연결될 때 스피커/라인 출력의 출력 신호를 차단하는 오디오 잭 자체 내의 기계식 스위치입니다.

HDMI와 모든 유형의 헤드폰 간 또는 노트북 스피커와 USB 헤드폰 간을 전환하는 경우 오디오 데이터 스트림을 다른 오디오 칩으로 전환해야 합니다. Pipewire는 이를 수행할 수 있지만 출력 싱크 우선순위가 올바르게 설정되고 자동 전환이 활성화된 경우에만 그렇게 합니다.

바라보다이 블로그 항목wireplumber: Debian 12에 포함된 0.4 시리즈에서 오디오 싱크 우선순위를 확인하고 조정하는 방법을 설명합니다 .버전 0.5 이상인 경우 wireplumber버전 0.5에서 구성 방법이 변경되었으므로 이 권장 사항이 직접 적용되지 않습니다.

간단히 말해서, 첫 번째 단계는 새 사운드 장치가 연결될 때 자동 전환을 활성화하는 것입니다. 를 실행하여 일시적으로 이 작업을 수행할 수 있습니다 pactl load-module module-switch-on-connect.

이 AskUbuntu.SE 질문또한 실행 권장 사항도 포함되어 있습니다 pactl load-module module-switch-on-port-available. 기존 오디오 장치에서 새 포트를 사용할 수 있게 되면 전환이 수행될 수 있다는 것을 이해합니다.

위 명령을 지속되게 만들려면 /usr/share/pipewire/pipewire-pulse.conf예제를 읽고 관련 부분을 디렉터리 *.conf의 파일 에 추가합니다 ~/.config/pipewire/pipewire-pulse.conf.d/(없는 경우 새로 만듭니다). 예를 들어:

pulse.cmd = [
    { cmd = "load-module" args = "module-always-sink" flags = [ ] } #default
    { cmd = "load-module" args = "module-switch-on-connect" } #uncommented
    { cmd = "load-module" args = "module-switch-on-port-available" }  #added
    #{ cmd = "load-module" args = "module-gsettings" flags = [ "nofail" ] }
]

두 번째 단계는 사운드 장치에 적절한 우선순위가 할당되었는지 확인하는 것입니다.

이를 사용하여 wpctl statusPipewire가 관리하는 모든 장치의 식별 번호를 확인한 다음 wpctl inspect <number> | grep -e node -e priority특정 오디오 장치의 이름, 설명 및 우선 순위를 볼 수 있습니다. 기본 우선순위가 원하는 것이 아닌 경우 다음 ~/.config/wireplumber/main.lua.d/60-*.lua과 유사한 파일을 생성하여 조정할 수 있습니다.

rule = {
  matches = {
    {
      { "node.name", "equals", "alsa_output.usb-MOTU_M4_M4MC0570FU-00.Direct__hw_M4__sink" },
    },
  },
  apply_properties = {
    ["priority.driver"] = 1050,
    ["priority.session"] = 1050,
  },
}

기본 사운드 장치의 "예상" 기본 우선순위는 약 1009여야 하므로 다른 사운드 장치에 더 높은 값을 할당하면 사용 pipewire가능한 다른 사운드 장치보다 우선순위를 부여할 수 있습니다. 하지만 1500보다 큰 값은 모니터링 장치용으로 예약되어 있으므로 할당하면 안 됩니다.

분명히 개별 포트에도 우선 순위 값이 있지만 불행히도 현재 이를 사용자 정의하는 방법을 모르겠습니다. pactl list cards출력이 상당히 길지만 볼 수 있습니다.

Pipewire 포트 우선순위를 조정하는 좋은 방법을 알고 있는 사람이 있다면 전체 답변을 직접 작성하고 싶지 않다면 자유롭게 편집하세요.

관련 정보