Vì lợi ích của những người vấp phải câu hỏi này - giải pháp của Salem gần như đã có hiệu quả với tôi vào ngày 13.04, tôi đã kết thúc việc thu thập các mẩu và mẩu từ khắp nơi trên web, tôi nghĩ rằng công cụ giải quyết cho tôi là thiếu biến môi trường PULSE_SERVER
Đây là giải pháp đầy đủ của tôi, về cơ bản là lặp lại giải pháp của Salem với một vài phần còn thiếu. Tôi cũng đã làm lại nó dưới dạng tập lệnh shell (mặc dù tôi yêu Python) vì ban đầu tôi sợ rằng tập lệnh Python của tôi đang gặp vấn đề về đường dẫn nhập:
(giống như câu trả lời của Salem) Tạo một tệp /etc/udev/rules.d/hdmi_sound.rules
với quyền root với nội dung:
SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/hdmi_sound_toggle"
Tạo một tệp /usr/local/bin/hdmi_sound_toggle
với quyền root với nội dung:
#!/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
Sau đó làm cho nó thực thi được với chmod 0755 /usr/local/bin/hdmi_sound_toggle
Tôi đã cố gắng tạo tập lệnh này chung chung nhất có thể, nhưng bạn vẫn có thể cần thay đổi một số dòng, chẳng hạn như đường dẫn tệp HDMI_STATUS hoặc các cấu hình được sử dụng. Bạn có thể xem danh sách các hồ sơ bằng cách chạy pactl list cards
và tìm trong Tiểu sử.
Lưu ý rằng tập lệnh thất bại đối với tôi khi tôi xóa từ khóa "export" khi đặt PULSE_SERVER, tôi nghĩ pactl đang tìm kiếm biến env
Đừng quên tải lại các quy tắc udev của bạn: sudo udevadm control --reload-rules
Cập nhật tập lệnh này được cập nhật cho 14.04. Trước đó, bạn sẽ sử dụng USER_NAME thay vì USER_ID ở mọi nơi