Вы знаете, как, когда вы подключаете наушники к разъему aux вашего ноутбука, внутренние динамики автоматически отключаются, и из наушников издается звук? Я хочу именно это для HDMI.
Я иногда подключаю к ноутбуку монитор со встроенными динамиками для просмотра видео. Это очень странно, когда видео находится на мониторе (который находится в 3 метрах от моего стола), но звук исходит из внутренних динамиков моего ноутбука (ноутбук сидит на столе).
Конечно, я могу просто зайти в настройки звука и переключить выходной канал на HDMI. Но потом, когда я несколько часов назад отсоединял кабель HDMI и, возможно, даже находился в совершенно другом месте, звук не воспроизводился, потому что звуковой сервер все еще пытается воспроизвести его через HDMI, но к нему ничего не подключено. ,
Автоматическое переключение обратно на внутренние динамики, когда ни одно устройство не подключено через HDMI, является более важным, но переключение на вывод звука через HDMI, когда устройство подключено, все равно было бы очень приятно.
Это очевидно работало с 11.10, но не работало с 16.04.
Ответы:
Фон
У меня была похожая проблема во время приостановки / возобновления, когда звук переключался с телевизора HDMI на динамики ноутбука. После возобновления звучание будет оставаться на динамиках ноутбука, и мне придется вручную сбросить устройство вывода на ТВ в
System Settings
->Sound
.Это был мой первый раздражающий опыт обновления с Ubuntu 14.04 до 16.04, и рут был обновлением до PulseAudio 8, который поставляется с 16.04 LTS
После долгих поисков я создал скрипт под названием
TV-sound
. Хотя я не подключаю и не отключаю телевизор, как вы, я провел несколько поисков в Google и создал вариант сценария для работы в вашей ситуации. Я проверил это, и это работает.Шаг 1: Создать скрипт для переключения аудио между подключенными устройствами
Мы создадим скрипт,
hotplugtv
который называется udev. Этот же скрипт может быть вызван во многих местах. Например, во время тестирования я использовал егоlock-screen-timer
там, где звук возвращался к ноутбуку во время блокировки экрана.Когда редактор откроется с пустым экраном, скопируйте и вставьте в него следующее:
Вам нужно будет заменить два вхождения
rick
своим собственным идентификатором пользователя, т. Е. И т.UTF-8
Д.Я знаю, что это может быть более профессионально с именем пользователя, автоматически устанавливающим переменную bash, но я еще не настолько опытен :( В любом случае, сохраните файл и выйдите
gedit
.Шаг 2: Создание правил udev
udev отслеживает события горячего подключения, когда вы подключаете и отключаете монитор HDMI. Введите следующее, чтобы создать новое правило.
ПРИМЕЧАНИЕ. Если файл
70-persistent-net.rules
не существует в вашем каталоге, скопируйте туда любой другой файл. Нам не нужно содержимое файла, только права доступа к файлу, чтобы гарантировать, что наши совпадают.Редактор покажет кучу неактуального текста, выделит и удалит его. Затем выделите приведенный ниже код и вставьте его в редактор:
Сохраните файл и выйдите.
Чтобы включить правило (без перезагрузки), нам нужно перезагрузить udev:
Теперь вы можете подключать и отключать монитор HDMI / телевизор, и звук переключается соответствующим образом.
Предостережение
В моей системе звук автоматически возвращается к динамикам ноутбука, когда HDMI отключен. На вашей системе это не так. Дальнейшие улучшения кода могут потребоваться, если звук не поступает на динамики ноутбука, когда HDMI отключен. Пожалуйста, ответьте через комментарий ниже, как все работает / не работает.
Быстрое тестирование в CLI
Вы можете быстро проверить код в терминале, используя:
Переключиться на HDMI / TV:
Вернитесь к встроенным динамикам:
Не забудьте заменить
rick
на ваше имя пользователя.export
строка, вероятно, не нужна, но я включил ее просто для безопасности.hdmi-stereo
твиков, очевидно, необходимо выяснить правильные параметры перед написанием вашего скрипта.Расшифровка имени вашего устройства в PulseAudio
Код ниже использует одну и ту же команду дважды. Один раз, когда звук установлен на внешний HDMI ТВ. Второй раз, когда звук установлен на встроенные динамики ноутбука. Каждый раз, когда вы видите имя, которое использует PulseAudio:
Когда у вас есть несколько звуковых карт
Используйте команду,
aplay -l
чтобы увидеть, есть ли у вас карты больше нуля. Если это так, вам нужно будет использовать соответствующий номер карты в ваших сценариях. Например:В приведенном выше примере все номера карт равны 0 с разными источниками вывода. Если у вас есть USB-динамики, они могут иметь номер карты, отличный от 0.
Редактировать 2 декабря 2016 г.
По неизвестной причине сценарий был сломан сегодня. Приведенный выше код гласил: «$ (cat / sys / class / drm / card0-HDMI-A-1 / status»), но мне пришлось изменить
card0
его,card1
и приведенный выше код был изменен как таковой. Я не могу объяснить, что изменилось в моей системе, кроме регулярных обновлений Ubuntu с 26 ноября 2016 года.Редактировать 14 декабря 2016 г.
Приведенный выше код необходимо снова переключить обратно на: «$ (cat / sys / class / drm / card0-HDMI-A-1 / status»). Вместо того, чтобы изменять код между загрузкой
card0
и вcard1
зависимости от нее, измените программу на ссылку,card*
чтобы захватить оба сценария. ,источник
70-persistent-net.rules
потому что он не существует./etc/udev/rules.d
содержит только один файл с именем39-smfp_samsung.rules
.cat /sys/class/drm/card0-HDMI-A-1/status
показывает правильный статус (пробовал несколько раз).output:analog-stereo
: pastebin.com/n5bHyhCm Это делает его еще более странным, потому что тогда я ожидаю, что звук всегда будет воспроизводиться через HDMI. Скриншоты моих настроек звука, когда HDMI подключен и когда HDMI не подключен . Изменить: я уже пробовал это, но мне понадобилось еще несколько минут, чтобы опубликовать этот комментарий, потому что мне пришлось загружать скриншоты.