如何固定USB音频设备编号并将其设为系统默认音频设备?
稳定设置USB音频为系统默认设备的方法
方法1:通过设备名称配置asound.conf(推荐)
设备编号会随加载顺序变化,但设备名称是固定的,直接用名称指定默认设备更可靠:
- 先查看USB音频设备的名称,执行命令:
cat /proc/asound/cards
输出示例类似:
0 [bcm2835HDMI1 ]: bcm2835_hdmi - bcm2835 HDMI 1 bcm2835 HDMI 1 1 [bcm2835HDMI2 ]: bcm2835_hdmi - bcm2835 HDMI 2 bcm2835 HDMI 2 2 [bcm2835Headph]: bcm2835_headpho - bcm2835 Headphones bcm2835 Headphones 3 [Device ]: USB-Audio - USB Audio Device Generic USB Audio Device at usb-3f980000.usb-1.2, full speed
这里USB设备的名称是Device(请替换为你实际看到的设备名称)。
- 修改
/etc/asound.conf,替换原有的编号配置为设备名称:
defaults.pcm.card "Device" defaults.ctl.card "Device"
保存后重启音频服务或系统即可生效。
方法2:用udev规则固定USB音频的索引
通过udev规则给指定USB音频设备分配固定索引,彻底解决编号随机问题:
查看USB音频设备的厂商ID和产品ID,执行命令:
lsusb
输出示例类似:Bus 001 Device 004: ID 0d8c:0014 C-Media Electronics, Inc. Audio Adapter
这里0d8c是idVendor,0014是idProduct。创建udev规则文件
/etc/udev/rules.d/90-usb-audio.rules,写入以下内容(替换对应的idVendor和idProduct):
SUBSYSTEM=="sound", ATTRS{idVendor}=="0d8c", ATTRS{idProduct}=="0014", ENV{SOUND_CLASS}="0", ATTR{index}="0"
- 重启udev服务或系统,此时USB音频设备会被固定为索引0,再修改
/etc/asound.conf为:
defaults.pcm.card 0 defaults.ctl.card 0
方法3:调整模块加载顺序强制分配索引
通过modprobe配置强制给各音频模块分配固定索引,避免编号混乱:
- 创建
/etc/modprobe.d/snd-audio-order.conf文件,写入以下内容:
# 给内置音频模块分配较高索引 options snd_bcm2835 index=1 options vc4 index=2,3 # 给USB音频模块分配优先索引0 options snd-usb-audio index=0
- 保存后重启系统,此时USB音频会稳定占用索引0,再配合
/etc/asound.conf的索引0配置即可。
为什么之前的index=-2配置无效?
index=-2是让内核自动分配最低可用的索引,但如果内置音频模块(如snd_bcm2835、vc4)先于USB音频模块加载,会先占用低索引,导致USB音频只能分配更高的随机编号,因此无法稳定固定。
内容的提问来源于stack exchange,提问作者Naveen
相关产品推荐
相关产品推荐

