关于 ALSA

关于 ALSA

我的 Dell XPS 13 9350 笔记本电脑预装了 Ubuntu 14.04,从未出现过声音问题。自从升级到 Ubuntu 18.04 后,笔记本电脑就没有声音了,所以我尝试应用网上找到的各种修复方法,但可能弄乱了更多东西。

  • 在图形界面中,“设置 > 声音 > 输出”中唯一可用的设备是虚拟输出。 相同虚拟输出当我通过 F 键改变音量时会出现名称。

  • pulseaudio -k && sudo alsa force-reload卸载 ALSA 声音驱动程序然后重新加载它们,但这并不能恢复声音。

  • pacmd list-cards给出0 card(s) available.

关于 ALSA

另一方面,找到一个编号与 BIOS 中列出的aplay -l“音频控制器”匹配的声卡:RealTek ALC3246

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC3246 Analog [ALC3246 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

$ grep "Codec:" /proc/asound/card*/codec*
Codec: Realtek ALC3246

这与的行为一致alsamixer,显示 Realtex ALC3246 和一堆我可以改变的仪表,但没有影响。

由于 ALSA 一切正常,我尝试绕过pulseaudio。首先,speaker-test不会产生任何声音。接下来我尝试

aplay -D sysdefault ~/Downloads/file_example_WAV_1MG.wav

没有成功。选择此-vvv选项后,我可以看到指示条显示音量随音乐变化;仍然没有声音。在卸载 pulseaudio ( sudo apt-get purge pulseaudio) 的情况下重复实验没有帮助。

lsof、ps 和 lsmod

lsof /dev/snd/*根本没有任何输出(但根据ls目录/dev/snd包含:) by-path controlC0 hwC0D0 pcmC0D0c pcmC0D0p seq timer

$ ps -ef | grep pulse
gdm       2168  1827  0 19:53 ?        00:00:00 /usr/bin/pulseaudio --daemonize=no
bruno     2555     1  0 19:54 ?        00:00:00 /usr/bin/pulseaudio --start --log-target=syslog
bruno     4106  3923  0 20:11 pts/2    00:00:00 grep --color=auto pulse

$ lsmod | grep snd
snd_soc_skl           106496  0
snd_soc_hdac_hda       24576  1 snd_soc_skl
snd_hda_ext_core       28672  2 snd_soc_hdac_hda,snd_soc_skl
snd_soc_skl_ipc        65536  1 snd_soc_skl
snd_soc_sst_ipc        20480  1 snd_soc_skl_ipc
snd_soc_sst_dsp        36864  1 snd_soc_skl_ipc
snd_soc_acpi_intel_match    28672  1 snd_soc_skl
snd_soc_acpi           16384  2 snd_soc_acpi_intel_match,snd_soc_skl
snd_hda_codec_realtek   114688  1
snd_soc_core          233472  2 snd_soc_hdac_hda,snd_soc_skl
snd_hda_codec_generic    77824  1 snd_hda_codec_realtek
snd_compress           24576  1 snd_soc_core
ac97_bus               16384  1 snd_soc_core
snd_pcm_dmaengine      16384  1 snd_soc_core
snd_hda_intel          49152  0
snd_hda_codec         135168  4 snd_hda_codec_generic,snd_hda_intel,snd_hda_codec_realtek,snd_soc_hdac_hda
snd_hda_core           86016  7 snd_hda_codec_generic,snd_hda_intel,snd_hda_ext_core,snd_hda_codec,snd_hda_codec_realtek,snd_soc_hdac_hda,snd_soc_skl
snd_hwdep              20480  1 snd_hda_codec
snd_pcm               102400  7 snd_hda_intel,snd_hda_ext_core,snd_hda_codec,snd_soc_core,snd_soc_skl,snd_hda_core,snd_pcm_dmaengine
ledtrig_audio          16384  3 snd_hda_codec_generic,snd_hda_codec_realtek,dell_laptop
snd_seq_midi           20480  0
snd_seq_midi_event     16384  1 snd_seq_midi
snd_rawmidi            36864  1 snd_seq_midi
snd_seq                69632  2 snd_seq_midi,snd_seq_midi_event
snd_seq_device         16384  3 snd_seq,snd_seq_midi,snd_rawmidi
snd_timer              36864  2 snd_seq,snd_pcm
snd                    86016  12 snd_hda_codec_generic,snd_seq,snd_seq_device,snd_hwdep,snd_hda_intel,snd_hda_codec,snd_hda_codec_realtek,snd_timer,snd_compress,snd_soc_core,snd_pcm,snd_rawmidi
soundcore              16384  1 snd

脉冲音频-v

我刚刚终止并重新运行了 pulseaudio pulseaudio -k ; pulseaudio -v,有些消息看起来很有趣。

I: [pulseaudio] (alsa-lib)utils.c: could not open configuration file /usr/share/alsa/ucm/HDA Intel PCH at 0xdc328000 irq 133/HDA Intel PCH at 0xdc328000 irq 133.conf
I: [pulseaudio] (alsa-lib)parser.c: error: could not parse configuration for card HDA Intel PCH at 0xdc328000 irq 133
I: [pulseaudio] (alsa-lib)parser.c: uknown master file field pcm
I: [pulseaudio] (alsa-lib)parser.c: uknown master file field HDA-Intel
I: [pulseaudio] alsa-ucm.c: UCM available for card HDA Intel PCH
E: [pulseaudio] alsa-ucm.c: No UCM verb is valid for HDA Intel PCH
E: [pulseaudio] module-alsa-card.c: Failed to find a working profile.
E: [pulseaudio] module.c: Failed to load module "module-alsa-card" (argument: "device_id="0" name="pci-0000_00_1f.3" card_name="alsa_card.pci-0000_00_1f.3" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes card_properties="module-udev-detect.discovered=1""): initialization failed.
I: [pulseaudio] module-udev-detect.c: Card /devices/pci0000:00/0000:00:1f.3/sound/card0 (alsa_card.pci-0000_00_1f.3) failed to load module.
I: [pulseaudio] module-udev-detect.c: Found 1 cards.

答案1

有点令人失望的是,以下这些步骤完全解决了我的问题,每个步骤之间都需要两次冷重启(关机 + 手动重新打开电脑)。可能有些重启是没用的。

  • 将 Linux 内核从版本 4.15(?) 升级到版本 5.0.0

  • 通过以下方式卸载 ALSA 和 pulseaudio(以及我能找到的所有相关软件包):

    sudo apt-get --purge remove linux-sound-base alsa-base alsa-utils pulseaudio pavucontrol pulseaudio-utils
    
  • 重新安装这些软件包:

    sudo apt-get install linux-sound-base alsa-base alsa-utils pulseaudio pavucontrol pulseaudio-utils
    

答案2

对我来说也很有用 - 我已经超越了 Linux 5.0,所以我跳过了该步骤。XPS 13 9350 上的另一个提示 - 默认情况下,ubuntu 会发现内部 WiFi 卡。启用它 - 进入关于 -> 软件更新并启用优先驱动程序。在此处输入图片描述

答案3

在其他笔记本电脑上,甚至在较新的 Linux 内核(如 5.18)上,也报告了类似的 pulseaudio 错误,无法检测到 Realtek ALCxxx 卡;因此,在某些情况下有效的另一种替代方法是通过在 /etc/pulse/default.pa 配置文件中附加以下参数/选项来禁用 ucm(从 pulseaudio -v log 中可以看出已启用),例如:

load-module module-udev-detect use_ucm=no

当然,之后需要重新启动计算机,尽管重新启动 pulseaudio 就足够了:

pulseaudio -k

更多详情请见脉冲音频&自由桌面

相关内容