我正在运行 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
接收器自然需要根据您的系统进行更新。
我不确定该脚本对于实际的多用户系统有多强大,但它对我有用。