Demi kepentingan orang-orang yang menemukan pertanyaan ini - solusi Salem hampir bekerja untuk saya pada 13,04, saya akhirnya mengumpulkan potongan-potongan dari seluruh web, saya pikir pemecah kesepakatan bagi saya adalah kurangnya variabel lingkungan PULSE_SERVER
Inilah solusi lengkap saya, yang pada dasarnya mengulangi solusi Salem dengan beberapa bagian yang hilang. Saya juga menyebutnya sebagai skrip shell (terlepas dari kecintaan saya pada Python) karena pada awalnya saya takut skrip Python saya mengalami masalah jalur impor:
(Sama seperti jawaban Salem) Buat file /etc/udev/rules.d/hdmi_sound.rules
sebagai root dengan konten:
SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/hdmi_sound_toggle"
Buat file /usr/local/bin/hdmi_sound_toggle
sebagai root dengan konten:
#!/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
Kemudian membuatnya bisa dieksekusi dengan chmod 0755 /usr/local/bin/hdmi_sound_toggle
Saya mencoba membuat skrip ini se-generik mungkin, tetapi Anda mungkin masih perlu mengubah beberapa baris, seperti jalur file HDMI_STATUS atau profil yang digunakan. Anda dapat melihat daftar profil dengan menjalankan pactl list cards
dan melihat di bawah Profil.
Perhatikan bahwa skrip gagal untuk saya ketika saya menghapus kata kunci "ekspor" ketika mengatur PULSE_SERVER, saya pikir pactl sedang mencari variabel env
Jangan lupa memuat ulang aturan udev Anda: sudo udevadm control --reload-rules
Perbarui skrip ini diperbarui untuk 14,04. Sebelum itu, Anda akan menggunakan USER_NAME alih-alih USER_ID di mana-mana