我注意到系统日志中的以下几行:
pulseaudio[353168]:找不到工作配置文件。
pulseaudio[353168]:无法加载模块“module-alsa-card”(参数:“device_id =“3”name =“platform-snd_virmidi.0”card_name =“alsa_card.platform-snd_virmidi.0”namereg_fail = false tsched =是的fixed_latency_range =否ignore_dB =否deferred_volume =是use_ucm =是避免_重新采样=否card_properties =“module-udev-detect.discovered = 1”“):初始化失败。
有一种方法使用类似于以下 UDEV 规则的内容强制 PulseAudio 忽略硬件声卡:
ATTRS{idVendor}=="1852", ATTRS{idProduct}=="5110", ENV{PULSE_IGNORE}="1"
但所讨论的声卡是虚拟声卡,它是在加载 snd-virmidi.ko 内核模块时创建的。
$ cat /proc/asound/cards
...
3 [VirMIDI ]: VirMIDI - VirMIDI
Virtual MIDI Card 1
不幸的是,这个模块是我的系统中的内置模块(用于插孔目的),并且无法删除它。
那么如何强制PulseAudio忽略这个设备呢?
答案1
道路是对的。 PulseAudio 用于udev
检测声卡。
要忽略给定的卡,我们需要添加 udev 规则。
我猜udev
你添加的规则不正确,所以它不起作用。
例如, 忽略名为sound-ds
检查卡ID,在
2
这里$ cat /proc/asound/cards ... 2 [soundds ]: sound-ds - sound-ds sound-ds
获取
udev
信息卡2在/sys/class/sound/
$ udevadm info -a -p /sys/class/sound/card2 looking at device '/devices/platform/sound-ds/sound/card2': KERNEL=="card2" SUBSYSTEM=="sound" DRIVER=="" ATTR{id}=="soundds" ATTR{number}=="2" ATTR{power/async}=="disabled" ATTR{power/control}=="auto" ATTR{power/runtime_active_kids}=="0" ATTR{power/runtime_active_time}=="0" ATTR{power/runtime_enabled}=="disabled" ATTR{power/runtime_status}=="unsupported" ATTR{power/runtime_suspended_time}=="0" ATTR{power/runtime_usage}=="0"
添加
udev
规则
您的系统应该已经在/lib/udev/rules.d
目录中定义了 udev 规则,例如90-pulseaudio.rules
.还应该有一个/etc/udev/rules.d
目录,您可以在其中定义自己的规则。中的文件
/etc/udev/rules.d
具有最高优先级,确保修改正确的文件。ATTR{id}
info中的属性udev
,我们将用它来匹配卡片,
规则如下ATTR{id}=="soundds", ENV{PULSE_IGNORE}="1"
它的意思是
if ATTR{id} == "soundds" then ENV{PULSE_IGNORE}="1" endif
PulseAudio 将检查环境变量
PULSE_IGNORE
加载卡片时。如果设置为true
,则该卡将被忽略。重新启动系统并检查
如果幸运的话,该卡应该已经进入 PulseAudio 了。在 PulseAudio 详细日志中,我们应该看到如下所示的内容,它表明规则已生效。
[pulseaudio] module-udev-detect.c: Ignoring /devices/platform/sound-ds/sound/card2, because marked so.