싱크가 하나만 있는 경우 기본 오디오 출력 설정

싱크가 하나만 있는 경우 기본 오디오 출력 설정

Ubuntu 22.04.1 LTS를 새로 설치했습니다(이전에 18.04를 사용한 후). 사운드 구성 메뉴에는 이러한 출력 선택 사항이 있으며 그 중 두 번째 선택(S/PDIF)이 제가 사용하는 것이며 이를 선택하면 오디오가 제대로 작동합니다.

오디오 출력 메뉴

하지만 재부팅할 때마다 오디오 출력이 HDMI 출력으로 재설정되므로 기본적으로 S/PDIF로 설정해야 합니다. 내가 찾은(그리고 이전 설치에서 사용한) 솔루션에는 Pulseaudio에 적합한 싱크를 선택하는 것이 포함되어 있지만 지금은 싱크가 하나만 있는 것 같습니다! 출력은 다음과 pactl list short sinks같습니다.

6   alsa_output.pci-0000_00_0e.0.hdmi-stereo    module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED

출력에는 aplay -lS/PDIF의 흔적이 없는 것 같습니다.

**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC283 Analog [ALC283 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC283 Digital [ALC283 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 10: HDMI 4 [HDMI 4]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

그럼 어디야?! 대체 메뉴는 어디에서 나오나요? S/PDIF를 기본값으로 어떻게 설정할 수 있나요?

답변1

더 깊이 파고들어 두 가지 효과적인 솔루션을 찾았으며 그 중 2번에 완전히 만족했습니다.

해결 방법 1: 명시적 alsa-sink

에 나열된 처음 두 하위 장치는 aplay -l둘 다 실제로 S/PDIF라는 것을 깨달았습니다. 왜냐하면 Java에서 사운드를 재생하기 때문입니다(제가 에서 하는 것처럼).나만의 뮤직 플레이어)은 샘플 속도에 따라 적절하게 변경되는 DAC의 LED와 함께 plughw:0,0또는 으로 설정된 출력 장치에서 작동합니다 .plughw:0,1

그 중 하나를 기본적으로 선택하려면 다음을 추가하세요.

load-module module-alsa-sink
load-module module-alsa-source device=hw:0,1

~/.config/pulse/default.pa(에서 복사 /etc/pulse/). 이렇게 하면 기본적으로 선택되는 사운드 출력 메뉴에 '내장 오디오' 옵션이 추가됩니다. 이는 사실상 S/PDIF 옵션의 별칭입니다(이 솔루션에서는 이것이 약간 짜증나는 부분입니다).

해결 방법 2: 카드 프로필 설정

펄스오디오 명령목록 카드흥미로운 정보를 공개합니다. 출력 에는 다음과 같은 pacmd list-cards이름의 카드가 나열됩니다. alsa_card.pci-0000_00_0e.0포트다음 줄이 포함된 섹션:

iec958-stereo-output: Digital Output (S/PDIF) (priority 0, latency offset 0 usec, available: unknown)

이는 에 의해 생성되며 module-udev-detect사운드 설정이 S/PDIF로 나열되는 출력에 대한 정보를 가져오는 곳이어야 합니다. 을 살펴보면목록 카드사운드 설정 메뉴에서 다른 출력 선택으로 출력해 보니 "활성 프로필"로 설정한 내용에 차이가 있는 것으로 나타났습니다. 이것,나는 찾았다, 로 변경할 수 있습니다 set-card-profile. 첨가

set-card-profile alsa_card.pci-0000_00_0e.0 output:iec958-stereo+input:analog-stereo

~/.config/pulse/default.pa후에 S/PDIF 출력을 얻을 수 있다는 의미에서 작동했지만 재부팅 pulsaudio -k하고 로그인한 후에는 사운드 출력이아직HDMI로 설정하세요. (분명히 Pulseaudio 초기화 이외의 다른 요인으로 인해 카드 프로필 설정이 변경됩니다.) 대신 로컬을 default.pa다시 삭제하고 명령을 추가했습니다.

pacmd set-card-profile alsa_card.pci-0000_00_0e.0 output:iec958-stereo+input:analog-stereo

로서시작 응용 프로그램. 화면 보호기가 시작될 때까지 그 트릭을 수행한 것 같습니다… 화면 보호기에서 화면이 깨어나면 카드 프로필은 다음과 같습니다.다시다른걸로 바꿨어요! 이에 대해 제가 찾은 해결책은 화면 보호기 이벤트를 수신하고, 화면 보호기가 활성화될 때 카드 프로필 설정을 확인하고, 화면 보호기가 꺼지면 다시 설정하는 스크립트를 만드는 것이었습니다. 스크립트는 다음의 스크립트를 수정한 버전입니다.이 답변(카드 프로필이 아닌 싱크 설정을 다룹니다), 다음과 같습니다.

#!/bin/bash
    
my_card="alsa_card.pci-0000_00_0e.0"
watch="type=signal,interface=org.gnome.ScreenSaver"
screen_locked_signal="boolean true"
screen_unlocked_signal="boolean false"

_get_active_profile() {
    pacmd list-cards | sed -n 's/^\s*[Aa]ctive\s\s*[Pp]rofile:\s*<\([^>]*\)>/\1/p'
}

last_profile=$(_get_active_profile)

# Watch for screensaver D-Bus signals
dbus-monitor --session "$watch" | ( \
    while read signal; do
        if [[ "$signal" =~ "$screen_locked_signal" ]]; then
            # Screen locked: remember the current profile
            last_profile=$(_get_active_profile)
        elif [[ "$signal" =~ "$screen_unlocked_signal" ]]; then
            # Screen unlocked: restore the last profile
            pacmd set-card-profile "$my_card $last_profile"
        fi
    done)

이 스크립트를 시작 응용 프로그램에도 추가하면 화면 보호기 문제가 제거됩니다.

관련 정보