Общая информация о HD-Audio кодеке
HD-audio — это новый стандарт встроенного аудиокомпонента на современных ПК после AC97. Хотя Linux уже давно поддерживает HD-audio, с новыми машинами часто возникают проблемы. Часть проблемы — сломанный BIOS, остальное — реализация драйвера. В этом документе объясняются краткие методы устранения неполадок и отладки оборудования HD-audio.
Компонент HD-audio состоит из двух частей: микросхемы контроллера и микросхем кодека на шине HD-audio. Linux предоставляет один драйвер для всех контроллеров, snd-hda-intel. Хотя в названии драйвера содержится слово известного производителя оборудования, оно относится не только к нему, а ко всем микросхемам контроллеров, в том числе и других компаний. Поскольку предполагается, что контроллеры HD-аудио совместимы, в большинстве случаев должен работать один драйвер snd-hda. Но, что неудивительно, существуют известные ошибки и проблемы, характерные для каждого типа контроллера. В драйвере snd-hda-intel есть несколько способов их исправить, они описаны ниже.
У контроллера может быть несколько кодеков. Обычно у вас есть один аудиокодек и, возможно, один модемный кодек. Теоретически может быть несколько аудиокодеков, например для аналоговых и цифровых выходов, и драйвер может работать неправильно из-за конфликта элементов микшера. Это должно быть исправлено в будущем, если такое оборудование действительно существует.
Драйвер snd-hda-intel имеет несколько различных парсеров кодеков в зависимости от кодека. В качестве запасного варианта у него есть общий синтаксический анализатор, но до сих пор эта функциональность довольно ограничена. Вместо общего синтаксического анализатора обычно используется синтаксический анализатор кодека (закодированный в patch_*.c) для реализаций, зависящих от кодека.
Опции модели для кодека HD-Audio
Наиболее частая проблема с драйвером HD-audio — это неподдерживаемые функции кодека или несоответствующая конфигурация устройства. Большая часть кода, специфичного для кодеков, имеет несколько предустановленных моделей, чтобы либо переопределить настройку BIOS, либо предоставить более полные функции.
Драйвер проверяет идентификатор SSID PCI и просматривает таблицу статической конфигурации, пока не будет найдена соответствующая запись. Если у вас новый компьютер, вы можете увидеть сообщение, подобное приведённому ниже:
hda_codec: ALC880: BIOS auto-probing.
Между тем, в более ранних версиях вы бы увидели такое сообщение:
hda_codec: Unknown model for ALC880, trying auto-probe from BIOS...
Для просмотра записей системного журнала связанных с snd-hda-intel используйте команду:
journalctl -b | grep hda_codec
Даже если вы видите такое сообщение, не надо паниковать. Прежде всего, это информационное сообщение, без предупреждения и без ошибки. Это означает, что PCI SSID вашего устройства не указан в списке известных предустановленных моделей (белом списке). Но это не значит, что драйвер сломан. Многие драйверы кодеков предоставляют механизм автоматической настройки на основе настроек BIOS.
Аудиокодек HD обычно имеет виджеты «контактов», а BIOS устанавливает конфигурацию каждого контакта по умолчанию, которая указывает местоположение, тип подключения, цвет разъёма и т. д. Драйвер HD-аудио может угадать правильное соединение, исходя из этих значений конфигурации по умолчанию. Однако некоторые коды поддержки кодеков, такие как patch_analog.c, не поддерживают автоматическое зондирование. И BIOS часто, да, довольно часто ломается. Он устанавливает неправильные значения и портит поведение драйвера.
Модель пресетов (недавно названная «исправлением») предназначена в основном для преодоления такой ситуации. Когда соответствующая модель пресета найдена в белом списке, драйвер предполагает статическую конфигурацию этой предустановки с правильной установкой контактов и т. д. Таким образом, если у вас есть более новая машина с немного другим SSID PCI (или SSID кодека) от существующий, у вас может быть хороший шанс повторно использовать ту же модель. Вы можете передать параметр модели, чтобы указать предустановленную модель вместо поиска SSID PCI (и кодека).
Доступные значения параметров модели зависят от микросхемы кодека. Проверьте свою микросхему кодека в файле proc кодека.
cat /proc/asound/card*/codec* | grep Codec Codec: Realtek ALC295 Codec: Intel Kabylake HDMI
Он покажет название производителя/продукта вашего чипа кодека. Затем смотрите файл HD-Audio Codec-Specific Models, раздел HD-audio driver. Вы можете найти список кодеков и вариантов моделей, принадлежащих каждому кодеку. Например, для чипа кодека Realtek ALC262 укажите model=ultra для устройств, совместимых с Samsung Q1 Ultra.
Сделайте резервную копию файла, если он уже существует:
sudo cp /etc/modprobe.d/alsa-base.conf /etc/modprobe.d/alsa-base.conf.bak
Для исправления достаточно добавить строку в файл /etc/modprobe.d/alsa-base.conf:
sudo gedit /etc/modprobe.d/alsa-base.conf
со следующим содержимым
options snd-hda-intel model=МОДЕЛЬ
Вместо слово МОДЕЛЬ нужно вписать значение, которое вы найдёте для модели вашего ноутбука на странице HD-Audio Codec-Specific Models.
Причём там не обязательно будет точное название модели — просто найдите то, что ближе всего к ней. Например, модель моего ноутбука ASUS GL703GE, самое похожее, что я смог найти, это «asus-g73jw», тогда строка, которую я добавил в файл /etc/modprobe.d/alsa-base.conf, следующая:
options snd-hda-intel model=asus-g73jw
Сохраните этот файл и перезагрузитесь — после этого проблема должна исчезнуть.
Вместо перезагрузки вы можете перезапустить модуль драйвера — это особенно удобно, если вы хотите попробовать несколько значений.
sudo modprobe -r snd-hda-intel sudo modprobe snd-hda-intel
Таким образом, первое, что вы можете сделать для любого совершенно нового, неподдерживаемого и неработающего оборудования для HD-аудио, — это проверить HD-аудиокодек и несколько различных значений параметров модели. Если вам повезёт, некоторые из них могут хорошо подойти к вашему устройству.
Есть несколько специальных значений опций модели:
- когда передаётся «nofixup», специфичные для устройства исправления в анализаторе кодеков пропускаются.
- когда передаётся «generic» синтаксический анализатор кодека пропускается, и используется только общий синтаксический анализатор.
Вывод на динамик и наушники
Одна из наиболее частых (и очевидных) ошибок с HD-аудио — это бесшумный вывод звука через встроенный динамик или разъем для наушников или их обоих. В общем, сначала стоит попробовать выход на наушники. Для выхода динамика часто требуются дополнительные элементы управления, такие как биты внешнего усилителя. Таким образом, выход на наушники имеет немного больше шансов.
Перед отправкой отчёта об ошибке ещё раз проверьте, правильно ли настроен микшер. Последняя версия драйвера snd-hda-intel обеспечивает в основном «Master» регулятор громкости, а также «Front» (где Front указывает передние каналы). Кроме того, могут быть отдельные элементы управления «Наушники» и «Динамик».
То же самое и для выхода на динамик. На некоторых кодеках может быть переключатель «Внешний усилитель». Включите это, если есть.
Ещё одна проблема, связанная с этим, — это автоматическое отключение звука на динамиках при подключении наушников. Эта функция реализована в большинстве случаев, но не для каждой предустановленной модели или кода поддержки кодеков.
В любом случае попробуйте другой вариант модели, если у вас есть такая проблема. Некоторые другие модели могут подходить лучше и предоставлять вам больше возможностей для соответствия.
Смотрите также: Не работает микрофон в Linux (РЕШЕНО)
Связанные статьи:
- Не работает микрофон в Linux (РЕШЕНО) (100%)
- Решение проблемы «чёрного экрана» после установки Catalyst 15.9 (несовместимость с GDM3, Cinnamon, GNOME) (50.6%)
- Как исправить ошибку ‘No Space Left on Device’ (на устройстве не осталось места) на Linux, когда свободное место на самом деле есть (50.6%)
- Диск Windows монтируется только для чтения (РЕШЕНО) (50.6%)
- Как исправить «Windows is hibernated, refused to mount» (РЕШЕНО) (50.6%)
- Как использовать команду fsck для исправления ошибок файловой системы в Linux (RANDOM - 0.6%)