Разбираться будем на примере отсутствия звука при установке Xubuntu на ноутбук HUAWEI MateBook D 15. Модель, которую не назовешь очень свежей. Тем не менее, при установке последнего, на момент написания статьи, LTS релиза 22.04 (Jammy Jellyfish), звука не было.
Поиск по марке ноутбука не дал ничего определенного, кроме советов задать dsp_driver=1 (т.е. legacy) для модуля snd-intel-dspcfg, что в данном случае не поможет. Поэтому, перезагрузив ноутбук в Windows (она предустановлена), где звук есть, я посмотрел устройство для вывода звука:
ESAuDriver Device
ACPI\VEN_ESSX&DEV_8336&SUBSYS_152D125F
ACPI\ESSX8336\1
Тем, кто без Windows уже снес, посмотреть устройства ACPI в Linux можно так:
find /sys/bus/acpi/devices/*/modalias -exec cat '{}' \;
Если в списке есть строка "acpi:ESSX8336:ESSX8336:", то это наш случай. Встречаем, Everest-Semi Low Power Audio CODEC ES8336.
На случай, если моя статья уже устарела, посмотрим есть ли поддержка этого кодека в ядре, которым вы сейчас пользуетесь:
cat /boot/config-`uname -r` |grep 8336
если поддержка есть, то увидим:
CONFIG_SND_SOC_INTEL_SOF_ES8336_MACH=m
Нет? Для этого я и пишу это руководство. Не все знают, что разработчики Ubuntu предлагают возможность установки так называемого HWE ядра (еще есть и xserver). Специально для тех, кто использует достаточно новое оборудование, поддержки которого в текущем ядре LTS релиза нет. Его портируют «обратно» (backports) из более свежих короткоживущих релизов. На момент написания статьи в дистрибутиве используется ядро версии 5.15.0, а установить можно HWE версии 6.2.0 и вероятность того, что с ним оборудование заработает заметно выше.
1. Устанавливаем HWE ядро
sudo apt install linux-image-generic-hwe-22.04
"04" замените на свою версию дистрибутива, если отличается. После установки, при использовании grub в качестве загрузчика, hwe ядро станет текущим, а в «Advanced options» будет добавлено используемое сейчас. Так что особо переживать нечего. Проверим? Да, да, перезагружаем компьютер.
И.. Звука все еще нет.
Проверяем, есть ли поддержка кодека в ядре (см. выше). Есть. Тогда Смотрим логи:
journalctl --boot=0 |egrep -i 'sof-|audio|8336'
kernel: sof-audio-pci-intel-cnl 0000:00:1f.3: error: tplg request firmware intel/sof-tplg/sof-cml-es8336-dmic2ch-ssp0.tplg failed err: -2
kernel: sof-audio-pci-intel-cnl 0000:00:1f.3: you may need to download the firmware from https://github.com/thesofproject/sof-bin/
kernel: sof-audio-pci-intel-cnl 0000:00:1f.3: error: failed to load DSP topology -2
2. Загружаем недостающее sound open firmware (sof)
"You may need to download the firmware". Ядро поставили новое, а firmware где? Но нет смысла качать с github не подписанное. Мы возьмем его там же где и ядро. Со свежего не LTS релиза. https://packages.ubuntu.com/search?keywords=firmware-sof-signed и берем самое свежее. Скачали?
mkdir /tmp/sof-signed
dpkg -X /куда/скачали/firmware-sof-signed_2.2.6-1_all.deb /tmp/sof-signed/
sudo cp -v /tmp/sof-signed/lib/firmware/intel/sof-tplg/sof-tgl-es8336* /lib/firmware/intel/sof-tplg/
rm -rf /tmp/sof-signed
Еще раз перезагрузка. И? Звука так и нет. В логах уже все нормально, firmware загружено. Что еще не так? Миксер!
3. Настраиваем аудио
Посмотрим аудиоустройства:aplay -l
карта 0: sofessx8336 [sof-essx8336], устройство 0: ES8336 (*) []
есть в списке, отлично.
Глушим все, кроме ALSA (advanced linux sound architecture).
pulseaudio -k
systemctl --user stop pipewire.socket && systemctl --user stop pipewire.service
systemctl --user stop pulseaudio.socket && systemctl --user stop pulseaudio.service
Запустим проверку звукаspeaker-test -c2
Если ничего не слышноalsamixer
и меняем настройки пока не появится звук в speaker-test.
Как же ласкает слух этот «розовый шум»!
Когда все заработало, сохраняемся.sudo alsactl store
Опять перезагрузка? И это на Linux? Не хотите, тогда:
systemctl --user start pulseaudio.service && systemctl --user start pulseaudio.socket
systemctl --user start pipewire.service && systemctl --user start pipewire.socket
Проверяем конфигурацию и настройки миксера в pavucontrol
.
Из замеченных проблем — не всегда есть звук после выхода из ждущего/спящего режима. Лечится в alsamixer переключением Speaker (mute/unmute). Конечно можно добавить скрипт при выходе из ждущего/спящего режима. Но это уже сделаю и выложу если будет интерес к статье.
Комментарии (7)
joffer
14.10.2023 10:05у меня 22 убунту месяц назад внезапно перестала на ноутбуке адекватно распознавать аналоговые наушники - если воткнуть науники в 3.5 мини-джек, то пока идёт звуковой поток от чего-либо - всё относительно нормально играет и звучит. Если же звук не выводится, через несколько секунд в наушниках появляется белый шум и по громкости быстро наростает в громкий ШУМ из наушников.
перепробовал всё, что нашёл и мог из интернетов - ничего не помогло, максимум смог отключить вывод на 3.5 вывод. В итоге так и не исправил этот момент, наушники подсоединены через внешнюю usb-звуковую карту
самое странное, что раньше всё работало нормально, но в один из дней что-то поломалось, непонятно почему - ничего не делал со звуком и не настраивал ничего. Просто в какой-то момент отключил наушники, подключил другие - и появился этот эффект(
Andvari
14.10.2023 10:05С появлением snap убунта научилась обновлять компоненты не привлекая внимания пользователя. )))
VADemon
14.10.2023 10:05Это очень похоже на режим энергосбережения Bluetooth гарнитуры. Нет сигнала - отключается DAC. Тут возможно та же история, только звуковуха из "спящего" режима не включается обратно. Если раньше не было, есть смысл попробывать старые/новые live CD ради разных версий ядер.
Johan_Palych
14.10.2023 10:05Да, с этим Device-ом есть проблемы. В поиске будет много результатов:
Device-1: Intel Tiger Lake-LP Smart Sound Audio
Midnight Commander открывает .deb пакет без распаковки.
Самый свежий бинарный firmware-sof-signed:
https://github.com/thesofproject/sof-bin
https://github.com/thesofproject/sof-bin/releases/tag/v2023.09
cthtuf
14.10.2023 10:05в ядро 6.7 вроде как обещали завезти https://lore.kernel.org/alsa-devel/169447665042.2387538.16679409837029670258.b4-ty@kernel.org/
maikuss
В принципе, отсутствие звука можно обнаружить ещё до установки Убунты, выбрав пункт Try. И потом, выйдя в экспертный режим установки, сразу выбрать ядро hwe. Интересно, как бы в этом случае повела себя система, подхватила бы firmware сама или все равно пришлось бы выполнять шаманский ритуал? Не хотите провести эксперимент?