У меня на ноутбуке двойная настройка экрана (с использованием 12,04 LTS) с использованием дисплея, подключенного через HDMI. Все работает нормально, но каждый раз, когда я подключаю / отключаю кабель, приходится переходить в настройки звука и вручную менять устройство вывода звука.
Есть ли способ изменить устройство вывода звука при подключении / отключении кабеля, поэтому при подключении к моему дисплею вывод звука устанавливается на HDMI, а при отключении звука звук возвращается к динамикам ноутбука?
Ответы:
Для людей, которые наткнулись на этот вопрос - решение Салема почти сработало для меня в 13.04, я закончил сбором кусочков со всего интернета, я думаю, что преградой для меня было отсутствие переменной среды PULSE_SERVER
Вот мое полное решение, которое в основном повторяет решение Салема с несколькими недостающими частями. Я также переделал его как скрипт оболочки (несмотря на мою любовь к Python), потому что сначала боялся, что мой скрипт Python сталкивается с проблемами пути импорта:
(аналогично ответу Салема) Создайте файл
/etc/udev/rules.d/hdmi_sound.rules
с правами root с содержанием:Создайте файл
/usr/local/bin/hdmi_sound_toggle
как root с содержимым:Затем сделайте его исполняемым с
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
источник
| uniq
команду USER_NAME. Также обратите внимание, что настройки звука в Ubuntu могут быть обманчивы. Я не видел изменений на панели настроек звука, но когда я что-то проигрывал, звук плавно переключался назад и вперед, я также заметил, что после нескольких подключений и отключений HDMI сценарий перестал работать (возможно, некоторые ошибка в udev).| sort -u
к имени пользователя, потому что он говорил дополнительную опцию elemer elemer --- Мое имя пользователя. То же, что и решение FuegoFro в конце дня.| grep -v pts
, потому что у меня там тоже был «root» пользователь - из-за того, что я редактировал скрипт через kate, у которого был открыт корневой терминал.Мне наконец удалось сделать эту работу с помощью
udev
. Так что, если кто-то хочет такого же поведения, вот шаги:Сначала нам нужно создать файл
/etc/udev/rules.d/hdmi_sound.rules
со следующим содержимым:это заставит
udev
выполнять скриптhdmi_sound_toggle
каждый раз, когда происходит изменение в соединении HDMI. Этот сценарий должен иметь разрешение на выполнение, а его содержимое выглядит следующим образом:Возможно, это легко сделать в bash, но так как мой основной язык - python, я использовал его. Все работает, кроме уведомления: оно не появляется, я действительно не знаю почему. Если кто-то знает, как это исправить, скажите, пожалуйста.
Примечание: имена скриптов / правил udev могут быть изменены, но вам нужно использовать полный путь.
источник
Исходя из Салема «S ответить , и DANIEL ответ» ю.ш.
Я взял ответ Салема и ответ Дэниела и внес некоторые необходимые изменения, их решение не сработало для меня из коробки:
(похоже на ответ Салема).
Создайте файл
/etc/udev/rules.d/hdmi_sound.rules
как root с содержимым:Примечание
ACTION=="change",
отсутствует!Создайте файл
/usr/local/bin/hdmi_sound_toggle
как root с содержимым:Примечание. USER_NAME =
who | grep "(:0)" | cut -f 1 -d ' '| sort -u
Я добавил,| sort -u
потому что в противном случае он возвращался сelemer elemer elemer
--my username 3 раза.Затем сделайте его исполняемым с
chmod 0755 /usr/local/bin/hdmi_sound_toggle
Не забудьте перезагрузить ваши правила udev:
sudo udevadm control --reload-rules
Важно, этот скрипт обновлен до 14.04. До этого вы бы везде использовали USER_NAME вместо USER_ID
Кредиты: Салем и Даниил .
источник
Ubuntu 16.04 - 17.04 Ответ
Это работает для Ubuntu 16.04 - 17.04, в котором появилась ошибка с Pulse Audio 8. Создайте файл
hotplugtv
(или,hotplug-hdmi
если хотите) и скопируйте в следующие строки:ВАЖНО: Измените имя пользователя «rick» на ваше имя пользователя.
Чтобы вызвать этот сценарий
udev
во время событий горячей замены, создайте файл,/etc/udev/rules.d/99-hotplugtv.rules
содержащий:Перейдите
/home/rick/bin/
на путь, где вы разместилиhotplugtv
скрипт.источник