На користь людям, які натрапляють на це питання - рішення Салема майже спрацювало для мене в 13.04, я закінчив збирати шматочки та шматки з усієї мережі, я думаю, що для мене було уникнути угоди, це було відсутністю змінної середовища PULSE_SERVER
Ось моє повне рішення, яке в основному повторює рішення Салема з кількома відсутніми фрагментами. Я також повторно повторював його як сценарій оболонки (незважаючи на свою любов до Python), оскільки спершу я побоювався, що мій скрипт Python зіткнеться з проблемами шляху імпорту:
(те саме, що відповідь Салема) Створіть файл /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 скрізь