Bu soruya rastlayan insanların yararı için - Salem'in çözümü 13.04'te neredeyse benim için çalıştı, sonunda web'in her yerinden bitler ve parçalar topladım, sanırım benim için anlaşma kırıcısı PULSE_SERVER ortam değişkeninin eksikliği
İşte Salem'in çözümünü birkaç eksik parça ile tekrarlayan tam çözümüm. Ben de (Python sevgime rağmen) bir kabuk komut dosyası olarak redid çünkü ilk başta benim Python komut dosyası alma yolu sorunları çalışıyor korkuyorlardı:
(Salem'in cevabı ile aynı) /etc/udev/rules.d/hdmi_sound.rules
İçeriğe sahip root olarak bir dosya oluşturun :
SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/hdmi_sound_toggle"
/usr/local/bin/hdmi_sound_toggle
İçeriği ile kök olarak bir dosya oluşturun :
#!/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
Sonra ile çalıştırılabilir yapın chmod 0755 /usr/local/bin/hdmi_sound_toggle
Bu komut dosyasını olabildiğince genel yapmaya çalıştım, ancak yine de HDMI_STATUS dosya yolu veya kullanılan profiller gibi bazı satırları değiştirmeniz gerekebilir. pactl list cards
Profiller altında çalışıp bakarak profillerin bir listesini görebilirsiniz .
PULSE_SERVER ayarlarken "export" anahtar kelimesini kaldırdığımda komut dosyası benim için başarısız oldu, pactl env değişkenini arıyor düşünüyorum
Udev kurallarınızı yeniden yüklemeyi unutmayın: sudo udevadm control --reload-rules
Güncelleme Bu komut 14.04 güncellenir. Bundan önce, her yerde USER_ID yerine USER_NAME kullanırsınız