pulseaudio:ヘッドフォンが接続されると自動的に受信機を切り替えます

pulseaudio:ヘッドフォンが接続されると自動的に受信機を切り替えます

XUbuntu 16.04を実行しています。以前は、スピーカーをアナログライン出力に接続していましたが、接続すると自動的にサウンドがヘッドフォンに切り替わりました。これはすべて1つの出力デバイス(マザーボードオーディオ)で発生します。

これで、スピーカーを内蔵した新しいモニターがありますが、アナログ接続はありません。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

受信機は当然システムに合わせて更新する必要があります。

このスクリプトが実際のマルチユーザーシステムにどれほど強力であるかはわかりませんが、私はうまくいきました。

関連情報