Ubuntu 및 Xubuntu(14 및 16), Kubuntu 16, Ubuntu Studio(14 및 15), Elementary(0.32) 및 MINT(17.3 Cinnamon 및 MATE)를 사용하기 때문에 모든 배포판에서 내 노트북의 오디오 설정에 문제가 발생했습니다. 관련 문제 및 모든 배포판에는 로그인 후 HDMI만 작동하므로 아날로그 오디오와 관련된 문제가 표시됩니다(로그인 사운드가 있는 시스템에서는 로그인하면 사운드가 작동하지만 잠시 후 아날로그 사운드가 더 이상 작동하지 않습니다).
내 노트북은 AMD APU가 장착된 Acer E1 421입니다. 아날로그 및 HDMI 출력 모두 동일한 오디오 모듈을 사용하는 것으로 보이며 HDMI는 ALSA가 있는 0 카드이며 작동만 가능합니다.
내 거lspci audio
lspci | grep Audio
00:01.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Wrestler HDMI Audio
00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD] FCH Azalia Controller (rev 01)
내 거aplay -l
aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: Generic_1 [HD-Audio Generic], device 0: CX20584 Analog [CX20584 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
문제를 "수정"하기 위한 몇 가지 해결 방법도 찾았지만 "수정"은 일시적이거나 펄스 오디오를 삭제하고 작업 표시줄의 볼륨 아이콘이 사라지는 등 상황이 더 악화되었기 때문에 운이 없었습니다.
그렇다면 기기를 복원할 수 있는 방법은 없을까요? 시스템이 카드 0(HDMI)에 직접 오디오를 보내는 것 같습니다. 장치 순서를 복원할 수 있도록 이 문제를 해결하는 것이 가능합니까?
여기(Stackexchange에서) 장치 순서를 변경하는 스크립트도 찾았습니다. 사운드 카드와 HDMI 모두 Intel HDA 드라이버를 사용하는 경우 사운드가 작동하지 않습니다. 장치 로딩 순서를 바꾸는 방법은 무엇입니까?
그것은 다음과 같습니다
alias char-major-116 snd
alias snd-card-0 snd-hda-intel
alias snd-card-1 snd-hda-intel
options snd cards_limit=2
options snd-hda-intel id=SB index=0
options snd-hda-intel id=HDMI index=1
하지만 내 시나리오에서 어떻게 작동하는지 모르겠습니다. 순서를 복원하기 위해 스크립트를 사용하더라도 시뮬레이션된 오디오가 전혀 작동하지 않습니다.
사운드 구성에 표시되지만 테스트 결과 오디오가 표시되지 않으며 사운드 구성에 오디오 활동이 표시되지만 스피커에서 소리가 들리지 않습니다.
그렇지 않은 경우 HDMI 출력을 차단하는 방법이 있습니까? 두 출력 모두 동일한 모듈을 사용하므로 모듈 자체를 블랙리스트에 추가하는 것은 불가능합니다.
메뉴 구성을 변경하여 HDMI 지원 없이 커널을 다시 컴파일하는 것에 대해 이야기하는 사람을 보았습니다.
가능하다면 새 커널을 다시 컴파일하고 사용하기 위해 무엇을 할 수 있는지 알려주실 수 있습니까? 내가 가장 좋아하는 배포판인 Mint와 Elementary에서 적어도 다시 컴파일하는 방법은 무엇입니까?
터커스
답변1
기본 ALSA 사운드 장치를 변경해야 한다고 생각합니다.
얼마 전 Sound Blaster Audigy 2에서 비슷한 문제가 발생했습니다.
이것을 귀하 /etc/asound.conf
(또는 ~/.asoundrc
귀하의 사용자만을 위해)에 넣고 존재하지 않는 경우 파일을 작성하십시오.
pcm.!default {
type plug
slave.pcm {
@func getenv
vars [ ALSAPCM ]
default "hw:Generic_1"
}
}
이렇게 하면 두 번째 장치(이름이 에뮬레이션된 CX20584 Generic_1
)를 기본 장치로 설정해야 하며 장치 ID가 변경되더라도 변경되지 않는 해당 이름을 찾습니다.
ALSAPCM
또한 프로그램을 시작하기 전에 환경 변수를 설정하여 출력에 사용할 장치를 변경할 수도 있습니다.
답변2
나 자신도 /etc/modprobe.d/
기반 솔루션을 사용했지만 설정이 매우 까다롭고 업데이트 및 기타 구성 변경에 민감하다는 것을 알았습니다. 그러다가 더 좋은 방법을 찾았습니다.
둘 다 동일한 드라이버를 사용하는 경우에도 udev 규칙을 사용하여 사운드 장치를 주문할 수 있습니다. 필수 규칙은 다음과 같습니다.
# Make the HDMI audio the second sound device...
ACTION=="add", SUBSYSTEM=="sound", DRIVERS=="snd_hda_intel", KERNEL=="card*", KERNELS=="0000:00:01.1", ATTR{number}="1", ATTR{id}="HDMI"
# ... and the analog audio chip the first one.
ACTION=="add", SUBSYSTEM=="sound", DRIVERS=="snd_hda_intel", KERNEL=="card*", KERNELS=="0000:00:14.2", ATTR{number}="0", ATTR{id}="Analog"
ENV{PULSE_IGNORE}="1"
PulseAudio가 HDMI 오디오를 완전히 무시하도록 하려면 첫 번째 udev 규칙 끝에 쉼표와 를 추가하세요.
예를 들어 이러한 규칙을 넣은 /etc/udev/rules.d/51-local-sound.rules
다음 initramfs를 업데이트하고 sudo update-initramfs -u
재부팅하십시오. 이제 주문한 ALSA 사운드 장치를 찾을 수 있으므로 아날로그 오디오 칩은 장치 #0이 되며 aplay -l
목록에서 "Generic_1" 및 "Generic" 대신 "Analog" 및 "HDMI"로 이름이 지정되어야 합니다.