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
受信機は当然システムに合わせて更新する必要があります。
このスクリプトが実際のマルチユーザーシステムにどれほど強力であるかはわかりませんが、私はうまくいきました。