ฉันพยายามให้แล็ปท็อปเปลี่ยนเสียงเป็น HDMI เมื่อเสียบปลั๊กและกลับไปเป็นอะนาล็อกมาตรฐานเมื่อถอดออก
ฉันตั้งค่ากฎ udev เพื่อเรียกสคริปต์เพื่อทำการสลับ แต่ฉันมีปัญหาในการทำให้มันทำงาน:
- ปรากฏว่าจนกว่าฉันจะเลือกสัญญาณเสียง HDMI ในการตั้งค่าเสียงจะไม่ได้รับการยอมรับว่าเป็นอ่างล้างมือที่มีอยู่เช่นกันเมื่อเลือกสัญญาณเสียง HDMI แล้วสัญญาณอะนาล็อกจะไม่ปรากฏอีกต่อไป
ดูด้านล่าง:
# HDMI plugged in, not selected in Sound settings.
$ pactl list short sinks
5 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
kingamajick@kingamajick-laptop: ~
# HDMI selected in sound settings
$ pactl list short sinks
7 alsa_output.pci-0000_00_1b.0.hdmi-stereo module-alsa-card.c s16le 2ch 48000Hz SUSPENDED
kingamajick@kingamajick-laptop: ~
# HDMI removed
$ pactl list short sinks
9 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 48000Hz SUSPENDED
สคริปต์ที่ฉันใช้สลับผลลัพธ์เป็นดังนี้:
#!/bin/bash
HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
if [ $HDMI_STATUS = "connected" ]
then
pactl set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.hdmi-stereo &> /dev/null; done
else
pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.analog-stereo &> /dev/null; done-server $PULSE_SERVER set-card-profile 0 output:analog-stereo+input:analog-stereo
fi
สคริปต์ให้ข้อผิดพลาดเกี่ยวกับการไม่จมเมื่อฉันเรียกใช้ก่อนที่ฉันจะเลือก HDMI ในการตั้งค่าเสียง