如何在 PulseAudio 中删除 Nvidia HDMI 音频输出?

如何在 PulseAudio 中删除 Nvidia HDMI 音频输出?

每次重启时,PulseAudio 都会将接收器(在我的情况下为“HDMI 音频输出”)设置为默认值。

因此,每次重新启动时,我都听不到任何声音,并且每次都需要将默认接收器重新配置为“模拟输出”。

如何移除/禁用特定接收器(例如 HDMI),或设置覆盖现有接收器的默认接收器?

答案1

只需将声卡的配置文件设置为“关闭”,例如:

pactl set-card-profile alsa_card.usb-Generic_ThinkPad_Dock_USB_Audio-00 off

pavucontrol您可以在其“配置”选项卡中很好地完成此操作:

在此处输入图片描述

另一种方法是完全禁用 pulseaudio 中的任何自动连接功能,但是对于我的蓝牙耳机,我喜欢此功能。使用上述解决方案,您可以以细粒度的方式禁用声卡。

答案2

在 18.10 中我修复了这个问题

文件/etc/modprobe.d/黑名单.conf
添加

blacklist snd_hda_codec_hdmi

答案3

1.删​​除用户设置

编辑之前的另一种方法默认.pa可以将隐藏目录重命名~/.pulseaudio为类似于~/.pulseaudio.000/home 目录的名称。这是存储用户定义设置的位置。如果删除或重命名,它将立即从/etc/pulse/默认.pa设置。

2. 编辑默认值

只有当这对您的系统没有影响时,udev 才可能会将 HDMI 接口加载为默认接收器。然后一种方法可能是,正如前面提到的哈格纳尔斯DotNu编辑 default.pa。请记得备份当前的 default.pa。查找这个非常不言自明的部分(请注意,hal-detect 在 Ubuntu >10.04 中不起作用)。

### Load audio drivers statically (it's probably better to not load
### these drivers manually, but instead use module-hal-detect --
### see below -- for doing this automatically)
#load-module module-alsa-sink
#load-module module-alsa-source device=hw:1,0
#load-module module-oss device="/dev/dsp" sink_name=output source_name=input
#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input
#load-module module-null-sink
#load-module module-pipe-sink
#
### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect
.else
### Alternatively use the static hardware detection module (for systems that
### lack udev support)
load-module module-detect
.endif

3. 优雅的方式

使音频正常工作的另一种更优雅的方法是启用“同步输出”帕普雷夫如图所示:

帕普雷夫

这将启用内部音频和 HDMI 接口上的音频输出。将此虚拟输出设备设为默认设备,您就可以使用所有选项。

答案4

找到了更好的选择

如下所述使用 systemd 在启动时有效,但在将设备插入已经运行的系统时无效。

热插拔时忽略音频在启动时,udev 规则是更好的选择。

改编自告诉 PulseAudio 使用 udev 忽略 USB 设备

  1. 用于lsusb识别您想要忽略的设备的供应商/产品 ID

    $ lsusb
    Bus 006 Device 003: ID 17e9:4307 DisplayLink LAPDOCK
    # <other devices I don't care about>
    

    ID部分为我们提供了神奇的数字

  2. 创建一个 udev 规则文件,例如/etc/udev/rules.d/80-ignore-audio-cards.rules为脉冲音频设置环境变量。

    对我来说,这看起来像:

    ATTRS{idVendor}=="17e9", ATTRS{idProduct}=="4307", ENV{PULSE_IGNORE}="1"
    

    80-随意选择了文件名的前缀。如果你有任何与 pulseaudio 相关的规则,请确保你的新文件以较低的数字开头

  3. 重新启动以确保其生效

有了 udev 规则,pulseaudio 会完全忽略该设备。


先前的答案:

遇到了同样的问题,给出的答案在重启后对我不起作用。我认为我的问题是卡检测延迟;当 pulseaudio 启动时,它没有看到所有的卡,并且一些组合module-switch-on-connectmodule-switch-on-port-available总是重新设定我的选择。

我通过制作一个解决了这个问题systemd 用户单元pactl set_card_profile "$MY_CARD_NAME" off当我登录时运行。

  1. 找到你不想要的卡的名称;希望这个名字足以告诉你是哪一个:

    $ pactl list cards | grep -E '(Card|Name:)'
    Card #0
        Name: alsa_card.usb-DisplayLink_LAPDOCK_U3D2338486250-02
    Card #1
        Name: alsa_card.pci-0000_01_00.1
    Card #2
        Name: alsa_card.usb-Plantronics_Plantronics_Blackwire_5220_Series_2961D11C621649939CED8BF57E910BA5-00
    Card #3
        Name: alsa_card.usb-HD_Web_Camera_HD_Web_Camera_Ucamera001-02
    Card #4
        Name: alsa_card.pci-0000_00_1f.3
    

    对我来说,“LAPDOCK”一直在窃取我的音频。

  2. 创建 systemd 单元,调用pactl并禁用该卡:

    $ mkdir -p ~/.config/systemd/user
    $ nano ~/.config/systemd/user/disable-cards.service
    

    添加这些内容,更改行ExecStart以引用您想要丢弃的卡片:

    [Unit]
    Description=Disable card
    
    [Service]
    Type=simple
    Restart=on-failure
    ExecStart=pactl set-card-profile "alsa_card.usb-DisplayLink_LAPDOCK_U3D2338486250-02" off
    
    [Install]
    WantedBy=default.target
    
  3. 启用服务:systemctl --user enable disable-cards

现在,当您重新启动时,systemd 将继续尝试断开该卡,直到成功为止。systemd在插入显示器后,可能有更好的配置来运行它;每个设备都显示为一个“单元”(例如在 的输出中systemctl --user),因此可以改进它以在您插入/拔出东西时工作。

另一种选择是将您的更改/etc/pulse/default.pa为使用module-switch-on-connect blacklist="REGEX_MATCHING_THE_CARD_NAME",但这对我来说不起作用;没有办法自定义module-switch-on-port-available,我认为这就是我选择它的原因。

相关内容