Для людей, которые наткнулись на этот вопрос - решение Салема почти сработало для меня в 13.04, я закончил сбором кусочков со всего интернета, я думаю, что преградой для меня было отсутствие переменной среды PULSE_SERVER
Вот мое полное решение, которое в основном повторяет решение Салема с несколькими недостающими частями. Я также переделал его как скрипт оболочки (несмотря на мою любовь к Python), потому что сначала боялся, что мой скрипт Python сталкивается с проблемами пути импорта:
(аналогично ответу Салема) Создайте файл /etc/udev/rules.d/hdmi_sound.rules
с правами root с содержанием:
SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/hdmi_sound_toggle"
Создайте файл /usr/local/bin/hdmi_sound_toggle
как root с содержимым:
#!/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