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 -l
S/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)
이 스크립트를 시작 응용 프로그램에도 추가하면 화면 보호기 문제가 제거됩니다.