每次重启时,PulseAudio 都会将接收器(在我的情况下为“HDMI 音频输出”)设置为默认值。
因此,每次重新启动时,我都听不到任何声音,并且每次都需要将默认接收器重新配置为“模拟输出”。
如何移除/禁用特定接收器(例如 HDMI),或设置覆盖现有接收器的默认接收器?
答案1
答案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 设备:
用于
lsusb
识别您想要忽略的设备的供应商/产品 ID$ lsusb Bus 006 Device 003: ID 17e9:4307 DisplayLink LAPDOCK # <other devices I don't care about>
该
ID
部分为我们提供了神奇的数字创建一个 udev 规则文件,例如
/etc/udev/rules.d/80-ignore-audio-cards.rules
为脉冲音频设置环境变量。对我来说,这看起来像:
ATTRS{idVendor}=="17e9", ATTRS{idProduct}=="4307", ENV{PULSE_IGNORE}="1"
我
80-
随意选择了文件名的前缀。如果你有任何与 pulseaudio 相关的规则,请确保你的新文件以较低的数字开头重新启动以确保其生效
有了 udev 规则,pulseaudio 会完全忽略该设备。
先前的答案:
遇到了同样的问题,给出的答案在重启后对我不起作用。我认为我的问题是卡检测延迟;当 pulseaudio 启动时,它没有看到所有的卡,并且一些组合module-switch-on-connect
和module-switch-on-port-available
总是重新设定我的选择。
我通过制作一个解决了这个问题systemd 用户单元pactl set_card_profile "$MY_CARD_NAME" off
当我登录时运行。
找到你不想要的卡的名称;希望这个名字足以告诉你是哪一个:
$ 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”一直在窃取我的音频。
创建 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
启用服务:
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
,我认为这就是我选择它的原因。