Мой Linux орёт на меня! (+ решение проблемы)

Да, не самая приятная история, связанная с особенностями Pulseaudio. Но хорошо всё то, что хорошо кончается (или разрешимо для этого).

Проблема

Сижу я за работой, в фоне тихонько играет музыка. В какой-то момент отлаживаемое приложение подвисает, я пытаюсь отключить его соответствующей кнопкой окна. Разумеется, без ответа. Но кеды умные — подождут несколько секунд, а потом выплюнут окошко с вопросом «Приложение не отвечает на SIGTERM, прикончить его SIGKILL?». Окошко выплёвывается с характерным системным звуком.

И вот, кнопка завершения нажата, ждём эффекта. Тут из 40-ваттной акустики, подключенной к ноуту, раздаётся громкое «БР-Р-ЯМЦ», разрушая гармонию и покой одиночества в небольшой квартире, попутно заставив проснуться соседей. Ах да, это системный звук. С непривычки откладвается груда кирпичей, проклинается всё на свете и окошко закрывается.

Но как же так? Я же ставил Master volume в 20%, оно не могло издать такой громкий звук?

Смотрим в трей и видим, что Master volume теперь не 20%, а 100%. Чудеса!

Повторные эксперименты показывают, что Master volume действительно выкручивается в максимум в момент проигрывания системного звука.

Расследование

В Pulseaudio есть возможность регулировать общую громкость на выходном устройстве (Master volume), а также громкость каждого потока в отдельности (Playback streams). Контролы на клавиатуре — регулировка системной громкости — работает именно с Master volume.

Казалось бы, логичное поведение: если пользователь выставил Master volume в 20%, то как бы потоки ни старались, громче звук становиться не должен. (Если смотреть ситуацию, когда Master volume в значении 20%, потоки — все по 100%).

Но на деле настройки Pulseaudio по умолчанию заставляют работать систему по другой логике. Согласно ей, любой поток может увеличить Master volume, если его собственная громкость превзойдёт Master Volume. Поскольку новый поток с системным звуком был создан впервые, ему была назначена максимальная громкость. Et voila — Master volume становится 100%, акустика начинает верещать.

Решение

Тем не менее, решить эту проблему можно, поменяв настройки демона Pulseaudio.

Если в конфигурационном файле /etc/pulse/daemon.conf выставить параметр: flat-volumes = no , после перезагрузки X-сессии логика встанет примерно на свои места, и Linux должен перестать кричать без нужды.

Оставить комментарий