Я пытаюсь заставить свой ноутбук переключать звук на HDMI, когда он подключен, и обратно на стандартный аналоговый, когда он удален.
Я установил правило udev для запуска сценария, чтобы выполнить переключение, однако у меня возникают проблемы с его работой:
- Похоже, что до тех пор, пока я не выберу выход HDMI Audio в настройках звука, он не будет распознан как доступный приемник, также после выбора выхода HDMI Audio аналоговый выход больше не отображается.
Смотрите ниже:
# HDMI plugged in, not selected in Sound settings.
$ pactl list short sinks
5 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
kingamajick@kingamajick-laptop: ~
# HDMI selected in sound settings
$ pactl list short sinks
7 alsa_output.pci-0000_00_1b.0.hdmi-stereo module-alsa-card.c s16le 2ch 48000Hz SUSPENDED
kingamajick@kingamajick-laptop: ~
# HDMI removed
$ pactl list short sinks
9 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 48000Hz SUSPENDED
Сценарий, который я использую для переключения вывода, выглядит следующим образом:
#!/bin/bash
HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
if [ $HDMI_STATUS = "connected" ]
then
pactl set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.hdmi-stereo &> /dev/null; done
else
pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.analog-stereo &> /dev/null; done-server $PULSE_SERVER set-card-profile 0 output:analog-stereo+input:analog-stereo
fi
Скрипт выдает ошибку об отсутствии такого приемника, когда я запускаю его, прежде чем выбрать HDMI в настройках звука.
sound
14.04
pulseaudio
hdmi
Kingamajick
источник
источник
Ответы:
Проверьте наличие доступных карт и профилей
Добавьте следующую команду в скрипт, чтобы сменить профиль перед установкой приемника по умолчанию и движущихся потоков.
(Так что нет необходимости переключать его вручную из настроек звука)
Ссылка:
pactl -h
&man pactl
источник
Основываясь на этой ссылке и этой ссылке ... я проверил и работает прекрасно Ubuntu 14.04
вы должны создать правило в
/etc/udev/rules.d/100-hdmi_sound.rules
с этим содержанием
затем создать
с вашим контентом
Я надеюсь, что может помочь .. извините за мой английский, я говорил по-испански
источник
У меня была небольшая проблема после этого. Я скопировал оригинальный скрипт и изменил его, как предложено, и теперь он работает.
Я включил это здесь, чтобы облегчить кому-то еще использование.
Теперь я просто хотел бы вызвать это с помощью udev, но я не знаю, как это сделать.
источник
Предоставленные мной скрипты не работали с udev из коробки на Ubuntu 14.04, я должен был добавить:
вначале преобразуйте две команды pacmd в pactl и, наконец, запустите скрипт, используя sudo -s -u (user) из правила udev.
источник
Ну, все предоставленные скрипты не работали для меня (Ubuntu 16.04), но я нашел этот индикатор приложения, который позволяет вам изменять вывод звука всего одним щелчком мыши:
https://github.com/lkettenb/sound-output-switcher
(примечание: вам необходимо установить пакет appindicator первым:
sudo apt-get install python-appindicator
)Просто подумал, что оставлю это здесь для тех, кто может оказаться в той же ситуации, что и я, хотя это альтернативное решение ... но оно делает его довольно простым и дискретным ;-)
источник
Опять же, другое решение (проверенное на работоспособность в 16.04), основанное на предыдущем, но с некоторыми улучшениями, которое работает, используя правильное
pactl
указание на нужный сервер (его можно улучшить, чтобы автоматически получать имена карт и профилей, см.pactl list
Илиpactl info
пока).Связанная суть здесь .
источник
card0
но однажды он переключился на,card1
поэтому я изменил сценарий, а на следующий день он изменился обратноcard0
. В конце концов я изменил код наcard*
и все хорошо с тех пор. Просто один на один, если что-то подобное случится с тобой.Сценарии Udev запускаются от имени пользователя root, но вы также должны знать, какой менеджер дисплея вы используете. Эти сценарии должны работать, но вы должны авторизовать этот менеджер дисплеев, чтобы сделать это.
Найдите DM, который вы используете:
Посмотрите опцию -auth, она покажет вам менеджер дисплея. Это может быть sddm ou lightdm в последних выпусках Ubuntu.
Эта строка должна быть экспортирована как переменная XAUTHORITY, например так:
например, это может быть действительный вывод:
/var/lib/mdm/:0.Xauth (будет использоваться сценарием)
Вот как должен выглядеть ваш скрипт:
Это позволит вашему дисплею диспетчера изменять выход HDMI. Следуйте инструкциям, чтобы создать файлы правил udev и сделать сценарий исполняемым.
источник