デフォルトのサウンドカードの選択

デフォルトのサウンドカードの選択

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利用可能なカードが 2 枚あることがわかります。

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.confPCH カードをデフォルトで使用することを指定するには、 をどのように使用すればよいですか?

答え1

alsa.opensrc.orgこの問題に似たシナリオを説明する短いセクションがあります。

同じモジュールを使用するサウンド カードが複数ある場合は、カードの順序を定義する必要があります。これは、ロードするモジュールにインデックスと ID オプションを指定することによって実行できます。たとえば、

オプション snd-usb-audio インデックス=1,2 vid=0x0ccd,0x0d8c pid=0x0028,0x000c

これにより、2 つの USB サウンド カードが定義されます。最初のカードはインデックス = 1、vid = 0x0ccd、pid = 0x0028 です。2 番目のカードはインデックス = 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問題が解決しました。

関連情報