如何强制 PulseAudio 忽略虚拟声卡 (VirMIDI)?

如何强制 PulseAudio 忽略虚拟声卡 (VirMIDI)?

我注意到系统日志中的以下几行:

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

  1. 检查卡ID,在2这里

    $ cat /proc/asound/cards
    ...
     2 [soundds        ]: sound-ds - sound-ds
                          sound-ds
    
  2. 获取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"
    
  3. 添加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,则该卡将被忽略。

  4. 重新启动系统并检查

如果幸运的话,该卡应该已经进入 PulseAudio 了。在 PulseAudio 详细日志中,我们应该看到如下所示的内容,它表明规则已生效。

[pulseaudio] module-udev-detect.c: Ignoring /devices/platform/sound-ds/sound/card2, because marked so.

相关内容