如何在连接时自动将 PulseAudio 输入切换到耳机?

如何在连接时自动将 PulseAudio 输入切换到耳机?

使用 Xubuntu 18.04,我连接了一个耳机,它有自己的麦克风输入。每次连接时,我都必须启动pavucontrol,单击“输入设备”选项卡,然后在“端口”下拉菜单中选择“耳机麦克风”(而不是“内置麦克风”)。

每当我断开耳机时,“端口”就会切换回“内置麦克风”,因此下次连接耳机时我必须重复该过程。

有没有办法可以自动完成此操作,或者只需我​​付出很少的努力?

我在网上搜索并看到了确保 PulseAudio 已加载的建议module-switch-on-connect,但我检查后pactl list short modules发现它似乎已经加载了。

答案1

我几乎用这种方法在运行 Debian 10 的笔记本电脑上修复了这个问题:

  1. 拔下耳机。
  2. 編輯/etc/pulse/daemon.conf— 設定log-level = debug
  3. 重新启动 pulseaudio:pulseaudio -k
  4. journalctl --follow在单独的终端/tmux 窗口中运行
  5. 插入耳机,观察会发生什么。module-alsa-card.c: Jack 'Headphone Mic Jack' is now plugged in显示检测到哪个插孔
  6. 编辑/usr/share/pulseaudio/alsa-mixer/paths/analog-input-headset-mic.conf,找到[Jack Headphone Mic]部分并将state.plugged从更改unknownyes

我说“几乎”,因为

  1. 麦克风增益未恢复
  2. 它不会区分外部扬声器(TRS 插孔)和耳机(TRRS 插孔)并切换输入源,所以我听到的是静电噪音而不是内部麦克风音频。

博客文章引导我朝这个方向发展。

答案2

上面发送的解决方案适用于某些 PC,但并非适用于所有 PC。我测试了文档或论坛上能找到的解决方案很长时间,这是唯一有效的解决方案。

所以这里有一个我创建的脚本,您可以在启动会话时添加它(不幸的是,它不适用于整个计算机,因为 PulseAudio 是一个为每个用户独立运行的服务)。

#!/bin/bash
index=$(pacmd list-sources | egrep 'index|ports|analog-input-headset-mic' | egrep '\*\sindex:\s+[0-9]'  | cut -d':' -f2);

acpi_listen | while IFS= read -r line;
do
    if [ "$line" = "jack/headphone HEADPHONE plug" ]
    then
       pacmd set-source-port $index analog-input-headset-mic;
    elif [ "$line" = "jack/headphone HEADPHONE unplug" ]
    then
       pacmd set-source-port $index analog-input-internal-mic;
    fi
done

这个主题是我的资料的一部分,这里是另一个帮助我进行研究和开发脚本的链接:

相关内容