इस प्रश्न पर ठोकर खाने वाले लोगों के लाभ के लिए - सलेम के समाधान ने लगभग 13.04 में मेरे लिए काम किया, मैंने वेब के चारों ओर से बिट्स और टुकड़ों को इकट्ठा किया, मुझे लगता है कि मेरे लिए डील ब्रेकर पर्यावरण चर PULSE_SVERVER की कमी थी
यहाँ मेरा पूरा समाधान है, जो मूल रूप से कुछ गायब टुकड़ों के साथ सलेम के समाधान को दोहरा रहा है। मैंने इसे एक शेल स्क्रिप्ट (पायथन के लिए अपने प्यार के बावजूद) के रूप में भी भुनाया क्योंकि मुझे पहले से डर था कि मेरी पायथन स्क्रिप्ट आयात पथ मुद्दों में चल रही है:
(सलेम के जवाब के समान) /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 वैरिएबल की तलाश में है
अपने udv नियमों को पुनः लोड करना न भूलें: sudo udevadm control --reload-rules
अद्यतन इस स्क्रिप्ट 14.04 के लिए अद्यतन किया जाता है। इससे पहले, आप हर जगह USER_ID के बजाय USER_NAME का उपयोग करेंगे