选择默认声卡

选择默认声卡

我在 Chromebook(Acer C720)上运行 Lubuntu,但无法发出声音。

/etc/modprobe.d/alsa-base.conf似乎是 Ubuntu 的默认配置,据我所知,索引 0 的模块将被默认使用。

# autoloader aliases
install sound-slot-0 /sbin/modprobe snd-card-0
install sound-slot-1 /sbin/modprobe snd-card-1
install sound-slot-2 /sbin/modprobe snd-card-2
install sound-slot-3 /sbin/modprobe snd-card-3
install sound-slot-4 /sbin/modprobe snd-card-4
install sound-slot-5 /sbin/modprobe snd-card-5
install sound-slot-6 /sbin/modprobe snd-card-6
install sound-slot-7 /sbin/modprobe snd-card-7

# Cause optional modules to be loaded above generic modules
install snd /sbin/modprobe --ignore-install snd $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-ioctl32 ; /sbin/modprobe --quiet --use-blacklist snd-seq ; }
#
# Workaround at bug #499695 (reverted in Ubuntu see LP #319505)
install snd-pcm /sbin/modprobe --ignore-install snd-pcm $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-pcm-oss ; : ; }
install snd-mixer /sbin/modprobe --ignore-install snd-mixer $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-mixer-oss ; : ; }
install snd-seq /sbin/modprobe --ignore-install snd-seq $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq-midi ; /sbin/modprobe --quiet --use-blacklist snd-seq-oss ; : ; }
#
install snd-rawmidi /sbin/modprobe --ignore-install snd-rawmidi $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq-midi ; : ; }
# Cause optional modules to be loaded above sound card driver modules
install snd-emu10k1 /sbin/modprobe --ignore-install snd-emu10k1 $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-emu10k1-synth ; }
install snd-via82xx /sbin/modprobe --ignore-install snd-via82xx $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist snd-seq ; }

# Load saa7134-alsa instead of saa7134 (which gets dragged in by it anyway)
install saa7134 /sbin/modprobe --ignore-install saa7134 $CMDLINE_OPTS && { /sbin/modprobe --quiet --use-blacklist saa7134-alsa ; : ; }
# Prevent abnormal drivers from grabbing index 0
options bt87x index=-2
options cx88_alsa index=-2
options saa7134-alsa index=-2
options snd-atiixp-modem index=-2
options snd-intel8x0m index=-2
options snd-via82xx-modem index=-2
options snd-usb-audio index=-2
options snd-usb-caiaq index=-2
options snd-usb-ua101 index=-2
options snd-usb-us122l index=-2
options snd-usb-usx2y index=-2
# Ubuntu #62691, enable MPU for snd-cmipci
options snd-cmipci mpu_port=0x330 fm_port=0x388
# Keep snd-pcsp from being loaded as first soundcard
options snd-pcsp index=-2
# Keep snd-usb-audio from beeing loaded as first soundcard
options snd-usb-audio index=-2

如果我查看当前的卡片,/proc/asound/cards我可以看到两张可用的卡片。

0 [HDMI           ]: HDA-Intel - HDA Intel HDMI
                     HDA Intel HDMI at 0xe0510000 irq 44
1 [PCH            ]: HDA-Intel - HDA Intel PCH
                     HDA Intel PCH at 0xe0514000 irq 45

HDMI 声卡具有默认索引,这就是音频插孔和扬声器不工作的原因。

看看他们使用的模块,/proc/asound/modules

0 snd_hda_intel
1 snd_hda_intel

显示它们都使用相同的模块。如果两张卡都使用相同的模块,我如何使用alsa-base.conf来指定我想要默认使用 PCH 卡?

答案1

alsa.opensrc.org有一个简短的部分描述了与此问题类似的场景。

如果您有多个使用相同模块的声卡,您可能需要定义卡的顺序。这可以通过为正在加载的模块指定索引和 ID 选项来实现。例如,

选项 snd-usb-audio 索引=1,2 vid=0x0ccd,0x0d8c pid=0x0028,0x000c

这将定义 2 个 USB 声卡,第一个位于 index=1,vid=0x0ccd 和 pid=0x0028;第二个位于 index=2,vid=0x0d8c 和 pid=0x000c。这里的 vid 和 pid 是使用 lsusb 发现的。

这两个声卡都不是 USB 设备,因此您无法使用 获取模块字段lsusb,但是同一篇文章建议使用modinfo获取该模块的参数列表:

modinfo -p snd_hda_intel

index:Index value for Intel HD audio interface. (array of int)
id:ID string for Intel HD audio interface. (array of charp)
enable:Enable Intel HD audio interface. (array of bool)
model:Use the given board model. (array of charp)
position_fix:DMA pointer read method.(-1 = system default, 0 = auto, 1 = LPIB, 2 = POSBUF, 3 = VIACOMBO, 4 = COMBO). (array of int)
bdl_pos_adj:BDL position adjustment offset. (array of int)
probe_mask:Bitmask to probe codecs (default = -1). (array of int)
probe_only:Only probing and no codec initialization. (array of int)
jackpoll_ms:Ms between polling for jack events (default = 0, using unsol events only) (array of int)
single_cmd:Use single command to communicate with codecs (for debugging only). (bool)
enable_msi:Enable Message Signaled Interrupt (MSI) (bint)
patch:Patch file for Intel HD audio interface. (array of charp)
beep_mode:Select HDA Beep registration mode (0=off, 1=on) (default=1). (array of bool)
power_save:Automatic power-saving timeout (in second, 0 = disable). (xint)
power_save_controller:Reset controller in power save mode. (bool)
align_buffer_size:Force buffer and period sizes to be multiple of 128   bytes. (bint)
snoop:Enable/disable snooping (bint)

手册页modinfo显示使用-F带有字段名称的标志来打印字段值。我试过了,modinfo -F id snd_hda_intel但没有输出。

/proc/asound/有两张卡的文件夹(在card0和下card1)。这些文件夹又包含id文件。快速cat /proc/asound/card0/id结果是HDMI,同样对于 card1 也是PCH

作为一个盲目的尝试,我添加了以下几行到/etc/modprobe.d/alsa-base.conf

# fix ordering of HDMI and PCH soundcards on Chromebook
options snd_hda_intel index=0,1 id=PCH,HDMI

这个答案原本是问题的结束,但在系统重启后,这个更改已经alsa-base.conf解决了问题。

相关内容