Из скрипта bash воспроизводите звук через внутренние динамики, в противном случае оставляя их фактически отключенными

Из скрипта bash воспроизводите звук через внутренние динамики, в противном случае оставляя их фактически отключенными

Я уже задавал похожий вопрос, но Камил Мациоровски правильно и мудро указал, что, как я уже писал, это была не единственная проблема, а совокупность трех. Поэтому я удалил сломанную систему и вопрос. Я начинаю заново с новой установки Lubuntu, текущей. Из коробки, если я включаю наушники Bluetooth, звук воспроизводится через них, а не через внутренние динамики. Если я выключаю наушники, звук автоматически воспроизводится через динамики.

Я бы предпочел, чтобы звук никогда не отправлялся на динамики, если я явно не направлю на них вывод определенной команды. Например, псевдокод: aplay /path/fire-alarm.wav -o speakersи чтобы все остальные звуки воспроизводились через наушники, если они доступны, а в противном случае просто не воспроизводились вообще.

Если нет прямого положения для такого рода политики, интересно, есть ли способ обмануть систему, чтобы она видела /dev/null как всегда работающий и всегда доступный аудиоприемник, который находится вторым в очереди после наушников и перед внутренними динамиками. Это, в сочетании с командой «воспроизвести этот звук через динамики», должно это сделать.

Если ни один из этих вариантов невозможен, команды на отключение и включение динамиков без влияния на работу наушников и без повторного входа в систему будут служить этой цели почти так же хорошо, если только что-то в запутанной звуковой архитектуре Linux не решит спонтанно: «О, у вас отключены динамики, я это исправлю».

Это не то же самое, что просто сказать, что наушники Bluetooth должны быть по умолчанию. Так оно и есть сейчас. Если я смотрю «Debbie Does Dubai» и наушники выходят из зоны действия, или у них заканчивается заряд, или я просто шарю по ним пальцем, пытаясь отрегулировать их физическое положение, я не хочу, чтобы звук автоматически переключался и начинал выходить из динамиков.

Мне нужна политика, которая ничего не отправляет на динамики, пока я явно не укажу ей отправить туда определенный поток, а затем отправляет только его, или, если это не удается, скриптовый способ отключения и включения динамиков без повторной регистрации.

решение1

PULSE_SINK=<имя_приемника> некоторая_программа

Список доступных «sink_name» можно получить здесь:

LANG=C pactl list | grep -A2 'Sink #' | grep Name: | cut -d" " -f2

Связанный контент