Вы знаете, как, когда вы подключаете наушники к разъему 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 и создаю изменение сценария для работы в ситуации. Я протестировал его, и это работает.
Мы создадим названный сценарий hotplugtv
какой udev звонит. Этот тот же сценарий можно назвать во многих местах все же. Например, во время тестирования я использовал его в lock-screen-timer
куда звук вернулся назад к Ноутбуку во время экранной блокировки.
cd /usr/local/bin
sudo touch hotplugtv
sudo chmod +x hotplugtv
gksu gedit hotplugtv
Когда редактор откроется пустым экраном, копией, и вставьте следующее в него:
#! /bin/bash
# NAME: hotplugtv
# PATH: /usr/local/bin
# DESC: Update pulseaudio output device when HDMI TV plugged / unplugged
# CALL: called from /etc/udev/rules.d/99-monitor-hotplug.rules
# DATE: Created Nov 26, 2016.
# NOTE: logs output using log-file
# UPDT: Dec 14, 2016 - Sometimes /sys/class/drm/card0 & sometimes /sys/class/drm/card1
# so use /sys/class/dmcard* instead.
if [[ $(cat /sys/class/drm/card*-HDMI-A-1/status | grep -Ec "^connected") -eq 1 ]]; then
# log-file "HDMI TV connected" ~/bin/log-hotplugtv;
/bin/sleep 2;
export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
sudo -u rick -E pacmd set-card-profile 0 output:hdmi-stereo;
else
# log-file "HDMI TV disconnected" ~/bin/log-hotplugtv;
export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
sudo -u rick -E pacmd set-card-profile 0 output:analog-stereo;
fi
exit 0
Необходимо будет заменить два случаев rick
с Вашим собственным идентификатором пользователя, т.е. UTF-8
, и т.д.
Я знаю, что это может быть более профессионально с именем пользователя автоматически набор к переменной удара, но я еще не настолько квалифицирован :( Так или иначе сохраните файл и выход gedit
.
udev следит за развитием событий замены в горячем режиме, когда Вы включаете и отключаете свой монитор HDMI. Введите следующее для создания нового правила.
cd /etc/udev/rules.d
sudo cp 70-persistent-net.rules 99-hotplugtv.rules
gksu gedit 99-hotplugtv.rules
Примечание: Если файл 70-persistent-net.rules
не существует в Вашей копии каталога никакой другой файл там. Нам не нужно содержание файла, просто полномочия файла гарантировать, что наши - то же.
Редактор покажет набор несоответствующего текста, выделить его и удалить его. Затем выделите код ниже и вставьте его в редактора:
# NAME: 99-hotplugtv.rules
# PATH: /etc/udev/rules.d
# DESC: Update pulseaudio output device when HDMI TV plugged / unplugged
# CALL: automatically called on system events
# DATE: Created Nov 26, 2016.
# NOTE: in future may requre systemd service hooks
ACTION=="change", SUBSYSTEM=="drm", ENV{HOTPLUG}=="1", RUN+="/usr/local/bin/hotplugtv"
Сохраните файл и выход.
Для включения правила (не перезагружая), мы должны перезагрузить udev:
sudo udevadm control --reload-rules
Теперь можно включить и отключить монитор HDMI / ТВ и звук переключаются соответственно.
В моей системе звук автоматически возвращается к Громкоговорителям переносного компьютера, когда HDMI отключается. В Вашей системе это не сделало. Дальнейшие улучшения к коду могут требоваться, если звук не переходит к Вашим Громкоговорителям переносного компьютера, когда HDMI отключается. Ответьте с помощью комментария ниже, как вещи работа / не удаются.
Можно быстро протестировать код на терминале при помощи:
export PULSE_RUNTIME_PATH="/run/user/1000/pulse/";
Переключитесь на HDMI / ТВ:
sudo -u rick -E pacmd set-card-profile 0 output:hdmi-stereo;
Переключитесь назад на созданный в динамиках:
sudo -u rick -E pacmd set-card-profile 0 output:analog-stereo;
Не забудьте заменять rick
с Вашим именем пользователя.
export
строка, вероятно, не необходима, но я включал ее только для сейфа. hdmi-stereo
тонкие настройки, очевидно, необходимы для обнаружения корректных параметров прежде, чем записать сценарий.Код ниже использует ту же команду дважды. Однажды, когда звук установлен на внешнее ТВ HDMI. Второй раз, когда звук установлен на Ноутбук, создал в динамиках. Каждый раз Вы видите имя использование PulseAudio:
$ pacmd list-sinks | grep -e 'name:' -e 'index'
* index: 28
name: <alsa_output.pci-0000_00_1b.0.hdmi-stereo>
───────────────────────────────────────────────────────────────────────────────
$ pacmd list-sinks | grep -e 'name:' -e 'index'
* index: 30
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
Используйте команду aplay -l
видеть, есть ли у Вас карты, больше, чем номер 0. Раз так необходимо будет использовать соответствующий номер карты в сценариях. Например:
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: 92HD91BXX Analog [92HD91BXX Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
Subdevices: 0/1
Subdevice #0: subdevice #0
В вышеупомянутом примере все номера карты 0 с различными выходными источниками. Если у Вас есть динамики USB, у них может быть другой номер карты, чем 0.
По некоторой неизвестной причине сценарий был поврежден сегодня. Выше кода, используемого для чтения: "$ (кошка/sys/class/drm/card0-HDMI-A-1/status", но я должен был измениться card0
кому: card1
и код выше был пересмотрен как таковой. Я не могу объяснить, что изменилось в моей системе кроме регулярных обновлений Ubuntu с 26 ноября 2016.
Выше кода должен был быть переключен снова назад на: "$ (кошка/sys/class/drm/card0-HDMI-A-1/status". Вместо того, чтобы пересмотреть код между card0
и card1
в зависимости от начальной загрузки пересмотрите программу к ссылке card*
получать оба сценария.
\s
, вероятно, только работы в GNU awk - если Вы имеетеmawk
, например (который был значением по умолчанию awk на некоторых предыдущих версиях Ubuntu) необходимо будет, вероятно, использовать что-то как/^[ \t]*[112]#47;
– steeldriver 6 September 2018 в 01:39