В Ubuntu нет звука после перехода в спящий режим

Обновлено: 02.07.2024

Если вы не слышите никаких звуков на своем компьютере, например, когда пытаетесь воспроизвести музыку, следуйте приведенным ниже советам по устранению неполадок.

Убедитесь, что звук не отключен

Откройте системное меню и убедитесь, что звук не отключен и не выключен.

На клавиатуре некоторых ноутбуков есть переключатели или клавиши отключения звука. Попробуйте нажать эту клавишу, чтобы проверить, не включится ли звук.

Также следует убедиться, что вы не отключили звук в приложении, которое используете для воспроизведения звука (например, в музыкальном проигрывателе или проигрывателе фильмов). Приложение может иметь кнопку отключения звука или громкости в главном окне, поэтому проверьте это.

Кроме того, вы можете проверить ползунок громкости на панели "Звук":

Откройте обзор действий и начните вводить звук .

Нажмите "Звук", чтобы открыть панель.

В разделе «Уровни громкости» убедитесь, что звук вашего приложения не отключен. Кнопка в конце ползунка громкости включает и выключает звук.

Убедитесь, что динамики включены и правильно подключены

Если на вашем компьютере есть внешние динамики, убедитесь, что они включены и громкость увеличена. Убедитесь, что кабель динамика надежно подключен к «выходному» аудиоразъему на вашем компьютере. Эта розетка обычно светло-зеленого цвета.

Некоторые звуковые карты могут переключаться между разъемом, который они используют для вывода (на динамики), и разъемом для входа (например, от микрофона). Выходной сокет может отличаться при работе с Linux, Windows или Mac OS. Попробуйте подключить кабель динамика к другому аудиоразъему на компьютере.

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

Убедитесь, что выбрано правильное звуковое устройство

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

Откройте обзор действий и начните вводить звук .

Нажмите "Звук", чтобы открыть панель.

В разделе «Вывод» выберите устройство вывода и нажмите кнопку «Проверить», чтобы проверить, работает ли оно.

Возможно, вам придется попробовать каждое доступное устройство.

Проверьте правильность определения звуковой карты

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

Выполните команду lspci в Терминале, чтобы узнать, какая у вас звуковая карта:

Перейдите к обзору действий и откройте терминал.

Запустите lspci от имени суперпользователя; либо введите sudo lspci и введите свой пароль, либо введите su , введите пароль root (административный), затем введите lspci .

Проверьте, есть ли в списке аудиоконтроллер или аудиоустройство: в этом случае вы должны увидеть марку и номер модели звуковой карты. Кроме того, lspci -v показывает список с более подробной информацией.

Возможно, вам удастся найти и установить драйверы для вашей карты. Лучше всего запросить инструкции на форумах поддержки (или иным образом) для вашего дистрибутива Linux.

Если вы не можете получить драйверы для своей звуковой карты, вы можете купить новую звуковую карту. Вы можете приобрести звуковые карты, которые можно установить внутрь компьютера, и внешние звуковые карты USB.

У меня никогда не было проблем со звуком. Звук только что заработал.

И у меня остался фиктивный вывод. Я не менял ничего, связанного с alsa/pulse. Кстати, я использую не Nvidia hdmi, а Realtek.

Последний раз редактировалось maboleth (2020-01-17 10:12:52)

Хорошо, каким-то образом мой pulseaudio в /.config был поврежден, поэтому я удалил весь каталог, переустановил и снова установил громкость в настройках gnome. Теперь он работает после приостановки, как обычно.

Последний раз редактировалось maboleth (2020-01-09 22:28:10)

На самом деле нет. Все еще происходит после приостановки.

- Это происходит, когда проигрывалась музыка и была нажата или инициирована функция Suspend (без предварительной остановки музыки).
- После пробуждения отображается фиктивный вывод, звук не слышен.
- Звук работает обычно, если ПК был приостановлен во время молчания (нет музыки, нет потокового онлайн-радио).

pacmd list-cards показывает 0 карточек, приемника нет.

pulseaudio -k исправляет это, и через несколько секунд pacmd list-cards показывает карту и работает звук. Однако это нежелательное исправление. Я хочу добраться до корня проблемы.

Проблема в том, что это происходит не постоянно! Но в 1 из 3. Достаточно, чтобы сильно раздражать, но недостаточно, чтобы точно определить проблему самостоятельно. Пробовал переустановить pulseaudio 13, но безрезультатно. То же самое происходит.

P.S. вышеупомянутые результаты в журнале НЕ были связаны с этой проблемой. Речь шла о HDMI на карте Nvidia, а не на этом Realtek.

Последний раз редактировалось maboleth (2020-01-13 00:50:58)

список пактов

Некоторое время у меня были похожие проблемы. Это начало происходить только с определенной версией ядра. Это было исправлено в более поздней версии.

Возможно, ваша проблема также связана с определенной версией ядра? Если вы помните, когда впервые появилась ваша проблема, попробуйте просмотреть файл журнала pacman (он находится в «/var/log/pacman.log»). Следующее фильтрует файл только по интересующим строкам:

Несмотря на то, что у меня были эти проблемы, выполнение "pulseaudio -k" не помогло мне исправить звук. Мне пришлось сделать это с помощью следующего скрипта, который сначала «отключает» аудиоустройство, а затем через секунду запускает его снова:

Эта часть сценария "0000:00:1b.0" должна быть настроена для другого компьютера. Этот идентификатор отображается в выводе "lspci -D".

Последний раз редактировалось Ropid (2020-01-13 01:43:43)

Спасибо, Ропид. Я точно не помню, но, кажется, это началось, когда была установлена ​​версия 5.4.10.

Однако я могу ошибаться, потому что это происходит, когда звук воспроизводится, а компьютер приостанавливается. Возможно, я приостановил свой компьютер раньше без звука, так что все выглядело хорошо, хотя, возможно, у меня уже была эта проблема (я относительно новый пользователь Linux)

Кроме того, это происходит не каждый раз, даже сейчас (обычно между приостановкой -> пробуждение должно пройти какое-то время. Если я сделаю это слишком рано, звук продолжится нормально).

Последний раз редактировалось maboleth (2020-01-13 02:09:52)

Держу пальцы скрещенными, но звуки, кажется, работают после комментирования этого в default.pa

Пока рано говорить. может быть просто совпадением.

Обновление: нет, после 6-й приостановки мне снова выдали Манекен. ох.

Последний раз редактировалось maboleth (2020-01-13 02:24:10)

Надеялся, что в новейшем ядре это исправлено, но нет.

Может ли кто-нибудь помочь мне, можно ли явно сказать pulseaudio, чтобы он не терял/изменял/любой приемник по умолчанию? А это моя карта с чипом Realtek.

Проверьте dmesg после приостановки, по какой-то причине ваше устройство не становится доступным сразу. Посмотрите

Может быть, вы также протестируете большую разницу в ядре, проверьте, например, можете ли вы воспроизвести на linux-lts. Было довольно много отчетов о различных проблемах с приостановкой работы в серии 5.4.

Также удалите НЕ решено из заголовка.

Последний раз редактировалось V1del (2020-01-13 13:31:25)

Онлайн

Я сделаю dmesg после сбоя и опубликую результаты здесь, а если ничего не поможет, попробую lts. Спасибо!

Я почему-то думаю, что эти модули с комментариями помогают. Если вчера 6-й приостановка снова была глухой, то сегодня я прокомментировал еще один модуль и пока все хорошо после многочисленных пробуждений.

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

Должны быть оба плацебо, module-rescue-streams предназначен для того, чтобы гарантировать, что вы не отключите звук полностью, если вы удалите устройство (не имеет значения в вашем случае, но если у вас есть, например, USB-карта, которая не сталкивается с этой проблемой, ваш звук по крайней мере будет воспроизводиться оттуда и возвращаться назад, когда устройство восстанавливается), что гарантированно не имеет отношения к этой проблеме.

module-suspend-on-idle «может» иметь эффект, но если это только когда вы приостанавливаетесь с активным воспроизведением звука, то это также не должно иметь значения, поскольку ваши приемники не приостанавливаются при активном воспроизведении. Это может иметь небольшое значение, потому что импульс удерживает блокировку карты, и если есть какие-то помехи от другого источника, которые могут вырвать карту из-под импульса, импульс должен удерживать ее. Кстати, что вы используете для воспроизведения? Может случиться так, что то, что вы здесь используете, видит карту перед пульсом, продолжает воспроизведение без пульса, пульс не может запросить карту, когда узнает, пульс генерирует фиктивное устройство.

Онлайн

Должны быть оба плацебо, module-rescue-streams предназначен для того, чтобы гарантировать, что вы не отключите звук полностью, если вы удалите устройство (не имеет значения в вашем случае, но если у вас есть, например, USB-карта, которая не сталкивается с этой проблемой, ваш звук по крайней мере будет воспроизводиться оттуда и возвращаться назад, когда устройство восстанавливается), что гарантирует отсутствие отношения к этой проблеме.

module-suspend-on-idle «может» иметь эффект, но если это только когда вы приостанавливаетесь при активном воспроизведении звука, это также не должно иметь значения, поскольку ваши приемники не приостанавливаются при активном воспроизведении. Это может иметь небольшое значение, потому что импульс удерживает блокировку карты, и если есть какие-то помехи от другого источника, которые могут вырвать карту из-под импульса, импульс должен удерживать ее. Кстати, что вы используете для воспроизведения? Может случиться так, что то, что вы здесь используете, видит карту перед пульсом, продолжает воспроизведение без пульса, пульс не может запросить карту, когда узнает, пульс генерирует фиктивное устройство.

Вынужден с вами согласиться. Тот факт, что это не всегда помогает, делает его довольно сомнительным.Тем не менее, я нахожу всю проблему довольно странной, так как не могу сказать - эй, у моей машины нет звука после приостановки. Скорее так - иногда получается, иногда нет. И при определенных обстоятельствах. Поэтому я надеялся на какую-то настройку, а не на баг ядра. Я ни в коем случае не эксперт в этом, но это похоже на какую-то временную проблему.

Что касается воспроизведения, я использую Lollypop для своих домашних альбомов и Firefox для онлайн-радио. Это происходит на обоих.

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

Поддерживаются только те выпуски Ubuntu, которые НЕ являются конечными (EOL) в следующей таблице:

Пожалуйста, соблюдайте осторожность при выполнении этих команд! Внимательно прочитайте и поймите, что они делают. Например, команда sudo apt-get install включает весь рабочий стол Ubuntu. Это, вероятно, создаст проблемы для пользователей других разновидностей Ubuntu — пользователь Kubuntu не захочет устанавливать интерфейс Unity. Хотя результат выполнения предложенной ниже командной строки действительно может исправить некоторые проблемы со звуком, имейте в виду, что это очень грубый подход и может привести к непредвиденным последствиям.

подождите десять секунд, затем запустите это:

Подождите 10 секунд, затем перезагрузите компьютер (перевести компьютер в спящий режим недостаточно — полностью выключите его, а затем снова включите). Обязательно сначала сохраните свою работу.

Если вы используете Ubuntu 20.04 LTS, выполните эту команду и перезагрузитесь:

Что касается выпусков Ubuntu, отличных от Ubuntu 18.04 LTS или Ubuntu 20.04 LTS, прочтите это:

Если вы используете интерфейс Gnome, откройте консоль терминала через "Приложения->Стандартные->Терминал"

Если вы используете интерфейс Unity, самый простой способ открыть Терминал – воспользоваться функцией поиска на панели инструментов. Или вы можете нажать кнопку «Дополнительные приложения», нажать «Просмотреть дополнительные результаты» в разделе установленных и найти его в этом списке приложений. Третий способ, доступный после того, как вы нажмете кнопку «Другие приложения», — это перейти к строке поиска и увидеть, что в ее дальнем правом конце указано «Все приложения». Затем вы нажимаете на это, и вы увидите полный список. После этого вы можете перейти в «Стандартные» > «Терминал».

Нажмите комбинацию клавиш CTRL-ALT-T.

Тире > Поиск терминала

Dash > Другие приложения > "Показать больше результатов" > Терминал

Dash > Дополнительные приложения > Аксессуары > Терминал

Перезагрузите компьютер. Затем выполните следующие две диагностические команды.

Совет. Если у вас мышь с колесиком или трехкнопочная мышь, вам не нужно вводить команды в терминал. Вместо этого скопируйте команды с этой веб-страницы и вставьте их в терминал. Для этого наведите курсор мыши на начало команды, написанной на веб-странице. Затем нажмите левую кнопку мыши и перетащите мышь до конца команды, чтобы выделить всю команду; затем отпустите кнопку мыши. Затем нажмите среднюю кнопку мыши или колесико мыши в любом месте Терминала. Теперь команда должна быть напечатана в Терминале без ошибок. Теперь нажмите, чтобы выполнить команду.

После фактического запуска сценария опубликуйте полный вывод терминала, создав новый вопрос на панели запуска, а затем скопируйте и вставьте вывод терминала в только что созданный вопрос. Внимательно проверьте выходные данные терминала информационного сценария ALSA, созданного предыдущей диагностической командой

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

Вывод терминала после запуска информационного скрипта ALSA должен содержать что-то вроде этого:

Если номера версий библиотеки и утилит не совпадают, возможно, это связано с одной или несколькими из следующих проблем:

<р>1. Один из компонентов ALSA не был успешно обновлен на шаге 1 этой процедуры

<р>2. ALSA была правильно установлена ​​или обновлена, но было загружено неправильное/старое ядро ​​вместо самой последней версии ядра. В этом случае загрузите новейшую версию ядра (которая доступна в стандартных/стандартных репозиториях Ubuntu) и повторно протестируйте звук.

Например: если вы установили Ubuntu 16.04 LTS (Xenial) или обновили ее до Ubuntu 16.04 LTS (Xenial), убедитесь, что используется версия ядра 4.4.0-62-generic или выше. Иначе не будет работать вывод/ввод звука!

Вы можете проверить текущую версию ядра, выполнив эту команду:

Если номер версии драйвера ALSA в выходных данных терминала вообще ничего не содержит, выполните следующие команды, затем перезагрузите компьютер и повторно протестируйте вывод звука с использованием наушников и динамиков:

Затем перезагрузите компьютер и повторно проверьте вывод звука.

Совет. Если у вас мышь с колесиком или трехкнопочная мышь, вам не нужно вводить команды в терминал.Вместо этого скопируйте команды с этой веб-страницы и вставьте их в терминал. Для этого наведите курсор мыши на начало команды, написанной на веб-странице. Затем нажмите левую кнопку мыши и перетащите мышь до конца команды, чтобы выделить всю команду; затем отпустите кнопку мыши. Затем нажмите среднюю кнопку мыши или колесико мыши в любом месте Терминала. Теперь команда должна быть напечатана в Терминале без ошибок. Теперь нажмите, чтобы выполнить команду.

Перезагрузите и повторно протестируйте звук, используя наушники и динамики. Не запускайте сеанс Gnome в режиме «Gnome Failsafe»; динамики отключены в режиме "Gnome Failsafe".

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

затем запустите программу pavucontrol из терминала или нажав Alt-F2 и набрав

в появившемся окне.

В этом приложении — PulseAudio Volume Control — просмотрите вкладки и посмотрите, отключено ли устройство ввода или вывода. Вы можете сказать, выглядит ли маленький значок отключения звука нажатым или нет. Вам также может потребоваться изменить настройку штекера ALSA с «Встроенный аудио-аналоговый стереофонический» на альтернативное аудиоустройство, указанное там. Перейдите на вкладку "Воспроизведение" и увеличьте громкость системных звуков до 100%.

Выполните следующую команду в Терминале:

В этом приложении убедитесь, что все каналы установлены на высокий уровень громкости. Убедитесь, что разные динамики (особенно «Фронт», «Главный» и «PCM») НЕ отключены и НЕ установлены на низкие уровни громкости в alsamixer. Двигайтесь левой и правой клавишами на клавиатуре, пока не появится элемент «Главный». выделены (красным). Если под шкалой громкости отображаются буквы «MM», нажмите «M», чтобы включить звук. Повторите с «Master Mono», «Headphone», «PCM», «Front», «Surround», Элементы "Центр" и "LFE". Когда закончите, нажмите Esc.

Если выход HDMI перестал работать, отключение и повторное включение звука выхода SPDIF в alsamixer может привести к возобновлению работы звука

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

На некоторых моделях ноутбуков Toshiba (T40, T43p, . R51e . ) звук отключается, если в alsamixer НЕ отключены наушники или линейный разъем. См. также FAQ по ALSA Wiki [1]. Кроме того, если включен контроль наушников или контроль линейного разъема, звук отсутствует (R52, X40). По умолчанию настройки Sense не отображаются в GNOME. Канал отключается в alsamixer, если под этим конкретным каналом/полосой громкости стоит значок «ММ».

На некоторых моделях ноутбуков Toshiba установка громкости канала PCM выше 70 % в alsamixer может привести к клиппингу (например, очень "резкому" и искаженному звуку как на внутренних динамиках, так и на штекере наушников), независимо от Главный канал.

Ноутбуки HP серий dv5, dv6, dv7 и некоторые нетбуки HP Mini имеют странную проблему в Ubuntu. Когда вы подключаете наушники, вы одновременно слышите звук через наушники и динамики. Следующая ссылка должна предоставить обходной путь для этой проблемы:

На HP Compaq nx8220 вы можете решить проблему одновременного выхода динамика/наушников, включив параметр Headphone Jack Sense в приложении alsamixer.

Сообщите, если вы не слышите звук через динамики, наушники или не слышите звук в обоих случаях.

Если вы используете систему с двойной загрузкой (даже если Windows и Ubuntu установлены на разных разделах), убедитесь, что громкость звука в Windows установлена ​​на высокий уровень, прежде чем загружать Ubuntu. Также не забудьте использовать специальные функциональные клавиши в Windows, чтобы убедиться, что громкоговорители физически включены и правильно работают в Windows, прежде чем устанавливать и тестировать Ubuntu. Этот шаг необходим для некоторых ноутбуков Toshiba Tecra.

Выполните команду gnome-volume-control и установите звуковую тему на «Без звука». Инструмент «Звуковая тема» также доступен через «Система» > «Настройки» > «Звук»

.

Попробуйте подключить наушники к другим аудиоразъемам/портам на задней панели звуковой карты, пока не услышите звук. Обязательно проверьте ВСЕ аудиоразъемы/порты на передней и задней панелях ПК.

Если звук не работает ни в Windows, ни в Ubuntu, обратитесь к руководству по материнской плате, чтобы узнать, не установлены ли неправильно или отсутствуют какие-либо перемычки. На некоторых материнских платах необходимо добавить или перенастроить перемычки на материнской плате, чтобы звуковые соединения на задней панели заработали.

Если вы используете ноутбук, также возможно, что разъем для наушников сломан. Попробуйте ткнуть зубочисткой в ​​разъем для наушников, чтобы проверить, поможет ли это воспроизвести звук через динамики.

Если ALSA по-прежнему не загружает драйвер для вашей звуковой карты (например, карты Soundblaster Audigy PCI) после обновления до новейшей версии ALSA, попробуйте переустановить звуковую карту PCI в другой разъем PCI на материнской плате вашего ПК.< /p>

Укажите точную модель и марку вашего ПК (если возможно) в новой теме, которую вы создали на форуме Launchpad Answers.

Если вы хотите включить аудиовыход S/PDIF, включите звук и увеличьте громкость на каналах воспроизведения S/PDIF и S/PDIF в приложении alsamixer. Используйте клавишу M для переключения между отключенным звуком (MM) и включенным (00) состоянием.

Альтернативный способ автоматического включения вывода SPDIF при входе в систему (проверено на SoundBlaster Audigy): добавьте следующие строки в /etc/rc.local:

Вы можете увидеть название цифрового выхода вашей карты с помощью:

Если оптический/коаксиальный цифровой выход вашей материнской платы/звуковой карты не работает или перестал работать, а вы уже включили и включили его в alsamixer, запустите

Вы также можете поместить эту команду в /etc/rc.local , так как она может перестать работать после перезагрузки.

В BIOS сбросьте значения BIOS до значений по умолчанию.

Если такой параметр существует, измените настройку встроенного звука в BIOS с «авто» на «включено».

Если такой параметр существует, убедитесь, что для параметра BIOS "Динамики и наушники" установлено значение "включено"

Если на вашем компьютере установлены две звуковые карты, одна встроена в материнскую плату, например: аудиочип hda-intel, а другая вставлена ​​в разъем PCI, попробуйте удалить звуковую карту PCI, перезагрузите компьютер. ПК и повторно протестируйте звук, используя только встроенный аудиочип материнской платы.

Если вам абсолютно необходимо, чтобы аудиокарта PCI заработала, попробуйте отключить встроенный аудиочип материнской платы через BIOS. Затем повторно протестируйте звук в Ubuntu.

Сохраните изменения в BIOS и перезагрузите компьютер.

Если это не помогло, обновите BIOS до последней версии и повторите проверку вывода звука.

Может помочь обновление BIOS.

Запрос устройств воспроизведения:

Теперь, когда у нас есть информация об устройстве HDMI, попробуйте проверить. В приведенном ниже примере 0 – это номер карты, а 3 – номер устройства.

Если aplay не выдает никаких ошибок, но по-прежнему не слышно звука, "перезагрузите" ресивер, монитор или телевизор. Поскольку интерфейс HDMI выполняет рукопожатие при подключении, он мог раньше заметить, что не было встроенного аудиопотока, и отключить декодирование звука.

Если тест прошел успешно, отредактируйте/создайте /etc/asound.conf, чтобы установить HDMI в качестве аудиоустройства по умолчанию, перезагрузите компьютер, и теперь звук должен работать. (Есть ли лучший способ сделать это?)

  • pcm.!default <
    • тип plug slave.pcm <
      • введите аппаратную карту 0 устройство 3

      Выполните поиск в Google VendorID и ProductID звуковой карты, чтобы попытаться выяснить, какие версии ядра Linux начали поддерживать звуковую карту. Возможно, ваша звуковая карта не работает, потому что текущая установленная версия ядра Linux слишком старая для вашей звуковой карты.

      Пример допустимого поискового запроса Google: 8086 a170 LKDDB

      Значит, ядро ​​GNU/Linux версии 3.18 или новее поддерживает эту звуковую карту.

      Следующую строку конфигурации необходимо добавить в файл /etc/modprobe.d/alsa-base.conf

      Действительные названия моделей (которые заменяют параметр модели «авто») в зависимости от чипа кодека можно найти в «Документации HD-Audio ALSA» и в «Документации HD-Audio ALSA 2»

      !!Проверяйте ТОЛЬКО одну опцию модели за раз в файле /etc/modprobe.d/alsa-base.conf!!

      Сначала попробуйте добавить строку конфигурации

      в файл /etc/modprobe.d/alsa-base.conf. Затем перезагрузите компьютер и повторите проверку звука.

      Вы можете найти имя чипа аудиокодека, выполнив следующую команду Терминала:

      Попробуйте вместо этого следующую команду, если предыдущая команда не показывает имя микросхемы аудиокодека:

      Вы можете узнать имя своего аудио-МИКСЕРА, запустив эту команду Терминала:

      Вы можете найти имя своего аудиоустройства, выполнив эту команду Терминала:

      Каждая комбинация аудиокодека, аудиомикшера и имени аудиоустройства требует особой конфигурации в файле alsa-base.conf, если аудиочипсет не работает по умолчанию.

      Чтобы увидеть, есть ли на вашем пути более одного исполняемого файла alsactl, и удалить неправильный/самый старый, скопируйте и вставьте следующую команду в Терминал и нажмите клавишу:

      Наличие более одного alsactl может привести к отключению звука во время каждой загрузки системы Ubuntu.

      Чтобы понять различные ошибки, связанные с hda_intel, которые могут быть упомянуты в конце выходных данных сценария ALSA Information, которые были загружены на веб-сайт Pastebin, прочтите следующую документацию:

      Также сравните идентификатор подсистемы PCI (например: 1028:0510) в выходных данных терминала ALSA со значениями SND_PCI_QUIRK (например: SND_PCI_QUIRK(0x1028, 0x0510, "Dell Vostro", CXT5066_IDEAPAD) в приведенной ниже ссылке, чтобы чтобы определить правильный вариант модели для использования (например, model=ideapad) в файле /etc/modprobe.d/alsa-base.conf:

      Также найдите VendorID (например: 0x111d7695) кодека вашей звуковой карты, введя, например, условие поиска

      в Google, чтобы узнать, поддерживает ли новейшее ядро ​​Linux этот конкретный аудиокодек.

      !!Проверяйте ТОЛЬКО одну опцию модели за раз в файле /etc/modprobe.d/alsa-base.conf!!

      Вы можете загрузить и скомпилировать новейшие версии alsa-lib, alsa-utils, alsa-tools, alsa-plugins, alsa-python здесь, используя "git clone":

      Обязательно скомпилируйте и протестируйте инструмент hdajackretask, входящий в состав alsa-tools. Очень удобный инструмент для исправления, если драйвер ALSA неправильно назначает задачи обработки звука выводам hda для аудиокодека вашей звуковой карты.

      Der Geist der Maschine
      Quidquid Latin dictum sit altum viditur

      После приостановки из памяти звук не работает.

      На моей машине (Manjaro ARM XFCE 20.06, ядро ​​5.7) звуковому драйверу snd_soc_es8316 необходимо сбросить звуковой чип. Проблема в том, что ядро ​​препятствует выгрузке и перезагрузке звукового драйвера snd_soc_es8316.


      Моей первой попыткой была инициализация звукового чипа из оболочки, имитирующая действия драйвера es8316 в его функции probe:

      Big Grin

      У меня появился статический шум, заставляющий меня поверить, что я говорю с правильным устройством. Это не помогло.


      Драйвер es8316 нельзя удалить и перезагрузить, но можно отменить и восстановить. Выполните эту строку после выхода из режима приостановки:

      Сломать ядро ​​очень просто. Я подозреваю, что к звуковому драйверу не следует обращаться в доли секунды между его отвязкой и привязкой. До сих пор я видел только сбои ядра при выполнении команды unbind/bind во время воспроизведения музыки. В остальном я не видел сбоев ядра. Никогда не знаешь, что происходит в фоновом режиме в современном Linux, так что YMMV.

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

      Сёнык
      Пайн Адепт

      Мне удалось сбросить звук (в Ubuntu 20.04, ядро ​​mainline 5.7) после глубокого сна следующим образом:


      Я считаю, что он выполняет аналогичные функции. С другой стороны, это не работает, если что-то пытается воспроизвести музыку, но и не приводит к сбою ядра.

      Der Geist der Maschine
      Quidquid Latin dictum sit altum viditur

      (16-06-2020, 09:05) Syonyk Написал: Мне удалось сбросить звук (в Ubuntu 20.04, основное ядро ​​5.7) после глубокого сна с помощью следующего:


      Я считаю, что он выполняет аналогичные функции. С другой стороны, это не работает, если что-то пытается воспроизвести музыку, но и не приводит к сбою ядра.

      Сценарий alsa Ubuntu выгружает, а затем перезагружает все драйверы, связанные со звуком. У меня это не работает на стоковой версии Manjaro 20.06.

      Здорово, что скрипт alsa работает на вас. Я предполагаю, что Ubuntu использует systemd , поэтому вам следует запускать не pulseaudio -k, а что-то в этом роде

      $ systemctl --user stop pulseaudio.socket
      $ sudo alsa force-reload
      $ systemctl --user start pulseaudio

      Вы можете проверить с помощью lsof, используется ли звуковое устройство (может быть, есть лучший способ?)

      $ lsof /dev/snd/*
      КОМАНДА PID ПОЛЬЗОВАТЕЛЬ FD ТИП УСТРОЙСТВО РАЗМЕР/ВЫКЛ ИМЯ УЗЛА
      pulseaudi 73457 manjaro mem CHR 116,2 478461 /dev/snd/pcmC0D0p
      pulseaudi 73457 manjaro 20u CHR 116,4 0t0 478465 /dev/snd/controlC0
      pulseaudi 73457 manjaro 21r CHR 116,33 0t0 47 /dev/snd/timer
      pulseaudi 73457 manjaro 22u CHR 116,2 0t0 478461 / dev/snd/pcmC0D0p
      pulseaudi 73457 manjaro 37u CHR 116,4 0t0 478465 /dev/snd/controlC0

      Ваша команда pulseaudio -k убивает pulseaudio, но systemd отслеживает ее и перезапускает. Так что, возможно, ваша команда alsa иногда слишком медленная. Попробуйте мои команды systemd. Я ожидаю, что нет необходимости останавливать воспроизведение звука. Команды systemd позаботятся об этом и прекратят воспроизведение звука.

      Сёнык
      Пайн Адепт

      Спасибо, это полезно - я поковыряюсь с этим.

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

      луноходцы
      Сосновый ученый

      Сегодня мне немного надоел звук, который не работает после глубокого сна, поэтому, пока сам драйвер не способен справиться со сном, я придумал обходной путь, который, кажется, работает достаточно хорошо. Я еще не упаковывал его или что-то еще, но хотел поделиться с сообществом тем, что у меня получилось.

      Сейчас у меня две штуки. Во-первых, это скрипт:

      $ cat /etc/systemd/system/pinebookpro-sleep.service
      [Unit]
      Descript=Восстановление звука после сна
      After=suspend.target hibernate.target hybrid-sleep. target suspend-then-hibernate.target

      [Установить]
      WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

      Убедитесь, что скрипт является исполняемым и сервисный модуль включен.

      Как это работает:
      Сервисный модуль подключается к запуску скрипта после приостановки. Я думаю, что смогу удалить из него `hibernate.target`, но я решил оставить его на всякий случай. Суть в самом скрипте, и вот что он делает:
      1. он удаляет все права доступа к файлам /dev/snd/pcm*, таким образом гарантируя, что ни один новый процесс не сможет их открыть.
      2. он входит в цикл, в котором, пока вышеуказанные файлы все еще открыты, он будет отправлять сообщение всем активным сеансам, намекая, что нужно сделать, чтобы восстановить воспроизведение звука. Указанное сообщение будет активным в течение 10 секунд и отправляется каждые 11 секунд. Цикл повторяется каждую секунду.
      3. как только все, что удерживает вышеуказанные файлы открытыми, останавливается, цикл заканчивается. Если кто-то использует PulseAudio, он также должен закрыть эти файлы, если ни одно приложение не пытается воспроизвести какой-либо звук. Поскольку для файлов установлены разрешения 000, ни один новый процесс, включая PulseAudio, не сможет открыть их снова.
      4. устройство повторно инициализируется
      5. наконец, после небольшой задержки, восстановите asound.state, чтобы увеличить громкость в микшере ALSA - без этого громкость звука может быть слишком низкой.

      Обратите внимание, что этот сценарий не требует остановки PulseAudio каким-либо образом, ему нужно только, чтобы ничто не пыталось воспроизвести звук.

      Наконец, об asound.state. Я использовал файл из Manjaro в качестве основы, но я: а) отредактировал его, установив для обоих экземпляров «Громкость воспроизведения в наушниках» и обоих экземпляров «Громкость микшера наушников» максимальное значение (3 и 11) - всего четыре места для переодевания; и б) установить неизменяемый флаг для файла после его копирования в /var/lib/alsa/asound.state - в противном случае он был сброшен до значений меньше максимального объема. Что-то я до сих пор не понял - как вызвать `alsactl restore` автоматически в нужный момент при загрузке, потому что если его вызвать слишком рано - громкость не восстановится должным образом, и звук будет зависать, будучи очень тихим. Пока что лучшее, что мне удалось сделать, это вызвать его с помощью системного таймера `OnBootSec=1min`.

      луноходцы
      Сосновый ученый

      Хорошо, прошло пару дней и две перезагрузки, после того, как я выяснил проблему, о которой я сообщал ранее, когда ОС работает без звуковой карты (остаточная конфигурация от одного из предыдущих экспериментов), пока все работает хорошо. . У меня есть звук после загрузки, и у меня есть звук после глубокого сна. Если ноутбук перешел в спящий режим во время воспроизведения некоторых звуков, он не сбрасывается до тех пор, пока воспроизведение не остановится, но как только он останавливается, он сбрасывается в течение нескольких секунд. Возможно, со временем я даже смогу обойти этот блок, но пока это не беспокоит меня настолько, чтобы тратить на это больше времени.

      Der Geist der Maschine
      Quidquid Latin dictum sit altum viditur

      луноходцы
      Сосновый ученый

      K, с некоторыми дополнительными изменениями я смог заставить скрипт работать довольно хорошо с циклами сна/возобновления, с той лишь оговоркой, что приложения, использующие звук, могут либо закрыться/вылететь, либо пропасть звук до перезапуска, либо просто приостановить воспроизведение - точное поведение зависит от конкретного приложения. Вот обновленный скрипт:

      Сёнык
      Пайн Адепт

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

      Мой набор патчей не очень хорош, я уверен, что он не совсем правильный. но это работает (в основном).

      diff --git a/sound/soc/codecs/es8316.cb/sound/soc/codecs/es8316.c
      index b303ebbd5..d9e33214a 100644
      --- a/sound/soc /codecs/es8316.c
      +++ b/sound/soc/codecs/es8316.c
      @@ -32,6 +32,8 @@ static const unsigned int support_mclk_lrck_ratios[] = 256, 384, 400, 512, 768, 1024
      >;

      +static void dump_es8316_config(struct snd_soc_component *component) + int i;
      + uint32_t значение;
      +
      + for (i = 0; i config_save[i] = (uint8_t)snd_soc_component_read32(component, i);
      + >
      +>
      + < br />+static void restore_es8316_config(struct snd_soc_component *component, struct es8316_priv *es8316) + int i;
      +
      + for (i = 0; i config_save[i]);
      + >
      +>
      +
      +
      static int es8316_probe(struct snd_soc_component *component)
      struct es8316_priv *es8316 = snd_soc_component_get_drvdata(component);
      int ret ;

      + printk(KERN_INFO "es8316_probe\n");
      +
      es8316->компонент = компонент;

      + dump_es8316_config(компонент);
      +
      + вернуть 0;
      +>
      +
      +static int es8316_suspend(struct snd_soc_component *component)
      + + struct es8316_priv *es8316 = snd_soc_component_get_drvdata(component);
      +
      + printk(KERN_INFO "In es8316_suspend\n");
      + dump_es8316_config(компонент);
      + save_es8316_config(компонент, es8316);
      возврат 0;
      >

      +static int es8316_resume(struct snd_soc_component *component)
      + + struct es8316_priv *es8316 = snd_soc_component_get_drvdata(component);
      + printk(KERN_INFO "In es8316_resume\n");
      +
      + restore_es8316_config(компонент, es8316);
      + dump_es8316_config(компонент);
      +
      + вернуть 0;
      +>
      +
      +
      static void es8316_remove(struct snd_soc_component *component)
      struct es8316_priv *es8316 = snd_soc_component_get_drvdata(component);
      @@ -761,6 +816,8 @@ static void es8316_remove(struct snd_soc_component *component)
      static const struct snd_soc_component_driver soc_component_dev_es8316 = .probe = es8316_probe,
      .remove = es8316_remove, < br />+ .suspend = es8316_suspend,
      + .resume = es8316_resume,
      .set_jack = es8316_set_jack,
      .controls = es8316_snd_controls,
      .num_controls = ARRAY_SIZE(es8316_snd_controls), < br />@@ -797,11 +854,15 @@ static int es8316_i2c_probe(struct i2c_client *i2c_client,
      struct es8316_priv *es8316;
      int ret;

      + printk(KERN_INFO "i2c_probe es8316 = %llx\n", (uint64_t)es8316);
      +
      i2c_set_clientdata(i2c_client, es8316);

      es8316->regmap = devm_regmap_init_i2c(i2c_client, &es8316_regmap);
      @@ -845,11 +906,57 @@ static const struct acpi_device_id es8316_acpi_match[] = >;
      MODULE_DEVICE_TABLE(acpi, es8316_acpi_match);

      +static int es8316_i2c_suspend(struct device *dev) +
      + printk(KERN_INFO "es8316_i2c_suspend\n");
      +
      + вернуть 0;
      +>
      +
      +static int es8316_i2c_resume(struct device *dev) + struct es8316_priv *es8316 = dev_get_drvdata(dev);
      + инт рет;
      +
      + printk(KERN_INFO "es8316_i2c_resume\n");
      +
      + printk(KERN_INFO "i2c_resume es8316 = %llx\n", (uint64_t)es8316);
      +
      + //es8316->regmap = devm_regmap_init_i2c(i2c_client, &es8316_regmap);
      + //if (IS_ERR(es8316->regmap))
      + // return PTR_ERR(es8316->regmap);
      +
      + //es8316->irq = i2c_client->irq;
      + //mutex_init(&es8316->lock);
      +
      + ret = devm_request_threaded_irq(dev, es8316->irq, NULL, es8316_irq,
      + IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
      + "es8316", es8316);
      + if (ret == 0) + /* Повторно включается с помощью es8316_set_jack() */
      + disable_irq(es8316->irq);
      + > else + dev_warn(dev, "Не удалось получить IRQ %d: %d\n", es8316->irq, ret);
      + es8316->irq = -ENXIO;
      + >
      +
      + //возврат devm_snd_soc_register_component(&i2c_client->dev,
      + // &soc_component_dev_es8316,
      + // &es8316_dai, 1);
      + вернуть 0;
      +>
      +
      +
      +const struct dev_pm_ops es8316_pm_ops = + SET_SYSTEM_SLEEP_PM_OPS(es8316_i2c_suspend, es8316_i2c_resume)
      +>;
      +
      +
      статическая структура i2c_driver es8316_i2c_driver = .driver = .name = "es8316",
      .acpi_match_table = ACPI_PTR(es8316_acpi_match),
      .of_match_table = of_match_ptr( es8316_of_match),
      + .pm = &es8316_pm_ops,
      >,
      .probe = es8316_i2c_probe,
      .id_table = es8316_i2c_id,

      Читайте также: