เพื่อประโยชน์ของผู้คนที่สะดุดกับคำถามนี้ - โซลูชันของ Salem ทำงานได้ดีสำหรับฉันใน 13.04 ฉันสิ้นสุดการรวบรวมบิตและชิ้นส่วนจากทั่วเว็บฉันคิดว่าตัวจัดการข้อตกลงสำหรับฉันคือการขาดตัวแปรสภาพแวดล้อม PULSE_SERVER
นี่คือคำตอบแบบเต็มของฉันซึ่งโดยทั่วไปแล้วการทำซ้ำโซลูชันของเซเลมกับชิ้นส่วนที่ขาดหายไปบางส่วน ฉันยังเปลี่ยนเป็นเชลล์สคริปต์ (แม้ฉันจะชอบ Python) เพราะฉันกลัวในตอนแรกว่าสคริปต์ Python ของฉันกำลังทำงานในปัญหาการนำเข้าพา ธ :
(เช่นเดียวกับคำตอบของ Salem) สร้างไฟล์/etc/udev/rules.d/hdmi_sound.rules
ตามรูทด้วยเนื้อหา:
SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/hdmi_sound_toggle"
สร้างไฟล์/usr/local/bin/hdmi_sound_toggle
เป็นรูทด้วยเนื้อหา:
#!/bin/sh
USER_NAME=`who | grep "(:0)" | cut -f 1 -d ' '`
USER_ID=`id -u $USER_NAME`
HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
export PULSE_SERVER="unix:/run/user/"$USER_ID"/pulse/native"
if [ $HDMI_STATUS = "connected" ]
then
sudo -u $USER_NAME pactl --server $PULSE_SERVER set-card-profile 0 output:hdmi-stereo+input:analog-stereo
else
sudo -u $USER_NAME pactl --server $PULSE_SERVER set-card-profile 0 output:analog-stereo+input:analog-stereo
fi
จากนั้นทำให้สามารถเรียกใช้งานได้ด้วย chmod 0755 /usr/local/bin/hdmi_sound_toggle
ฉันพยายามทำให้สคริปต์นี้เป็นทั่วไปที่สุด แต่คุณยังอาจต้องเปลี่ยนบางบรรทัดเช่นเส้นทางไฟล์ HDMI_STATUS หรือโปรไฟล์ที่ใช้ คุณสามารถดูรายการโปรไฟล์ได้โดยเรียกใช้pactl list cards
และดูใต้โปรไฟล์
โปรดทราบว่าสคริปต์ล้มเหลวสำหรับฉันเมื่อฉันลบคำหลัก "ส่งออก" เมื่อตั้งค่า PULSE_SERVER ฉันคิดว่า pactl กำลังมองหาตัวแปร env
อย่าลืมโหลดกฎ udev ของคุณ: sudo udevadm control --reload-rules
อัปเดตสคริปต์นี้ได้รับการอัพเดตสำหรับ 14.04 ก่อนหน้านั้นคุณจะใช้ USER_NAME แทน USER_ID ทุกที่