pulseaudio: 헤드폰이 연결되면 자동으로 수신기를 전환합니다

pulseaudio: 헤드폰이 연결되면 자동으로 수신기를 전환합니다

XUbuntu 16.04를 실행 중입니다. 이전에는 스피커를 아날로그 라인 출력에 연결했는데 연결하면 사운드가 자동으로 헤드폰으로 전환되었습니다. 이 모든 작업은 하나의 출력 장치(마더보드 오디오)에서 발생합니다.

이제 스피커가 내장된 새 모니터가 있지만 아날로그 연결은 없으므로 DisplayPort를 통해 Radeon R9 270에서 오디오를 얻을 수 있습니다. 헤드폰을 연결할 때 pulseaudio가 기존 및 새 스트림을 헤드폰 포트에서 마더보드 오디오로 전환하고, 헤드폰을 다시 뽑을 때 GPU 장치의 DP 오디오 포트로 다시 전환하기를 원합니다.

을 사용해 보았지만 pactl load-module module-switch-on-connect아무런 효과가 없는 것 같습니다. 아마도 헤드셋을 연결해도 새 수신기가 생성되지 않고 새 포트만 생성되기 때문일 것입니다.

다른 질문을 읽어보니 pactl/pacmd 호출을 통해 수동으로 이 작업을 수행할 수 있다는 것을 알고 있습니다. 필요한 경우에는 그렇게 하겠지만 자동으로 수행하는 것을 선호합니다. 이를 위해 스크립트를 작성해야 해도 상관없지만 전화를 받기 위해 헤드셋이 연결되거나 연결 해제될 때 가로채는 후크가 있습니까?

답변1

해결책을 찾았습니다. 감사합니다.이 토론그리고PA 스위치. 요약하면 acpid를 사용하여 헤드폰 플러그/플러그 해제 이벤트를 연결할 수 있습니다.

다음 파일을 만들었습니다.

/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

수신기는 당연히 시스템에 맞게 업데이트되어야 합니다.

이 스크립트가 실제 다중 사용자 시스템에 얼마나 강력한지는 잘 모르겠지만 제게는 효과가 있었습니다.

관련 정보