pulseaudio:连接耳机时自动切换接收器

pulseaudio:连接耳机时自动切换接收器

我正在运行 XUbuntu 16.04。以前,我将扬声器连接到模拟线路输出,插入耳机时声音会自动切换到耳机。这一切都发生在一个输出设备(主板音频)上。

我现在有了一台带有内置扬声器的新显示器,但没有模拟连接,因此我可以通过 DisplayPort 从 Radeon R9 270 获取音频。我希望pulseaudio 将现有流和新流切换到耳机端口当我插入耳机时,主板音频,当我再次拔掉耳机时,又回到GPU设备上的DP音频端口。

我尝试过使用pactl load-module module-switch-on-connect,但它似乎没有任何效果,大概是因为插入耳机不会创建新的接收器,只会创建新的端口。

通过阅读其他问题,我知道我可以通过 pactl/pacmd 调用手动执行此操作,如果必须的话我会执行此操作,但我更希望自动执行此操作。我不介意是否必须编写一些脚本来完成此操作,但是是否有一个钩子可以在连接或断开耳机时拦截以接听电话?

答案1

我找到了一个解决方案,感谢这次讨论帕开关。综上所述,acpid可以用来hook耳机插/拔事件。

我创建了以下文件:

/etc/acpi/events/耳机插孔:

event=jack/headphone
action=/etc/acpi/headphone-jack.sh %e

/etc/acpi/headphone-jack.sh(记住使其可执行):

#!/bin/bash
set -e -u

if [ "$1" = "jack/headphone" -a "$2" = "HEADPHONE" ]; then
    case "$3" in
        plug)
            sink=alsa_output.pci-0000_00_1b.0.analog-stereo
            ;;
        *)
            sink=alsa_output.pci-0000_01_00.1.hdmi-stereo
            ;;
    esac
    for userdir in /run/user/*; do
        uid="$(basename $userdir)"
        user="$(id -un $uid)"
        if [ -f "$userdir/pulse/pid" ]; then
            PULSE_RUNTIME_PATH="$userdir/pulse" su "$user" -c "paswitch $sink"
        fi
    done
fi

接收器自然需要根据您的系统进行更新。

我不确定该脚本对于实际的多用户系统有多强大,但它对我有用。

相关内容