我在 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
解决了问题。