Вопрос или проблема
У меня есть ноутбук Xioami notebook pro на Ubuntu 20.04 (та же проблема и на 18.04).
После того как ноутбук переходит в режим сна/гибернации, звука из динамиков не слышно. Системные настройки (настройки>звуки) определяют, что музыка проигрывается, и наушники работают нормально после сна. Проблема касается только встроенных в ноутбук динамиков. В качестве быстрого решения мне нужно перезагрузить, чтобы динамики снова заработали.
Я попробовал следующие варианты без успеха:
- Открыть alsamixer и не вижу никаких “заглушенных динамиков”
- Ввести в терминале:
sudo alsa force-reload
- Настроить скрипт, который перезагружает alsa после сна, как указано на странице помощи Ubuntu
pavucontrol
также установлен на моем ноутбуке- Попробовал остановить и перезапустить pulseaudio
Дайте мне знать, если у вас есть идеи по решению проблемы.
Я считаю, что это связано с драйверами, но не знаю, как это решить.
Ниже вы найдете информацию, указанную о железе.
aplay -l
:
**** Список ВЫПОЛНЯЕМЫХ аппаратных устройств ****
карта 0: PCH [HDA Intel PCH], устройство 0: ALC256 Analog [ALC256 Analog]
Подустройства: 1/1
Подустройство #0: подустройство #0
карта 0: PCH [HDA Intel PCH], устройство 3: HDMI 0 [HDMI 0]
Подустройства: 1/1
Подустройство #0: подустройство #0
карта 0: PCH [HDA Intel PCH], устройство 7: HDMI 1 [HDMI 1]
Подустройства: 1/1
Подустройство #0: подустройство #0
карта 0: PCH [HDA Intel PCH], устройство 8: HDMI 2 [HDMI 2]
Подустройства: 1/1
Подустройство #0: подустройство #0
карта 0: PCH [HDA Intel PCH], устройство 9: HDMI 3 [HDMI 3]
Подустройства: 1/1
Подустройство #0: подустройство #0
карта 0: PCH [HDA Intel PCH], устройство 10: HDMI 4 [HDMI 4]
Подустройства: 1/1
Подустройство #0: подустройство #0
cat /proc/asound/cards
:
0 [PCH ]: HDA-Intel - HDA Intel PCH
HDA Intel PCH на 0xb4214000 irq 147
lspci -nnk | grep -A2 Audio
:
00:1f.3 устройство аудио [0403]: Intel Corporation Устройство [8086:02c8]
Подсистема: Устройство Xiaomi [1d72:1905]
Драйвер ядра в использовании: snd_hda_intel
pacmd list-cards
:
1 карта(ы) доступна.
индекс: 0
имя: <alsa_card.pci-0000_00_1f.3>
драйвер: <module-alsa-card.c>
модуль владельца: 7
свойства:
alsa.card = "0"
alsa.card_name = "HDA Intel PCH"
alsa.long_card_name = "HDA Intel PCH на 0xb4214000 irq 147"
alsa.driver_name = "snd_hda_intel"
device.bus_path = "pci-0000:00:1f.3"
sysfs.path = "/devices/pci0000:00/0000:00:1f.3/sound/card0"
device.bus = "pci"
device.vendor.id = "8086"
device.vendor.name = "Intel Corporation"
device.product.id = "02c8"
device.form_factor = "внутренний"
device.string = "0"
device.description = "Встроенный звук"
module-udev-detect.discovered = "1"
device.icon_name = "audio-card-pci"
Спасибо.
У меня есть история успеха (спасибо Night Str)!
Та же аппаратная часть. Та же ситуация после режима сна.
Прежде всего получите права суперпользователя:
$ sudo su -
Затем обнаружьте свои устройства:
# lspci -vvv
...
00:1f.3 Устройство аудио: Intel Corporation Устройство 02c8 (prog-if 80)
Подсистема: Устройство Xiaomi 1963
Управление: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Статус: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Задержка: 32, Размер строки кэша: 64 байта
Прерывание: pin A подключен к IRQ 148
Регион 0: Память на c4214000 (64-бит, не кэшируемая) [размер=16K]
Регион 4: Память на c4000000 (64-бит, не кэшируемая) [размер=1M]
Возможности: <доступ запрещен>
Драйвер ядра в использовании: snd_hda_intel
Модули ядра: snd_hda_intel, snd_sof_pci
...
Итак, мой идентификатор устройства 00:1f.3. Давайте проверим это:
# ls /sys/bus/pci/devices/ | grep 00:1f.3
0000:00:1f.3
Вот в чем трюк:
# echo 1 > /sys/bus/pci/devices/0000:00:1f.3/remove
# echo 1 > /sys/bus/pci/rescan
Первая команда отключает драйвер от устройства и отсоединяет устройство от дерева. Драйвер (snd_hda_intel) не выгружается, просто отключается.
Вторая команда повторно сканирует pci устройства.
В результате звук появляется снова.
У меня такая же проблема. И я нашел решение, но оно не работает в kde, не знаю почему.
Решение:
echo 1 > /sys/bus/pci/devices/<device_address>/remove
sleep 1
echo 1 > /sys/bus/pci/rescan
Чтобы найти адрес устройства: lspci | grep Audio
Обновление:
Решение для выполнения команд после пробуждения:
Вы можете создать новый файл: /lib/systemd/system-sleep/99_restart_sound
и вставить следующий исходный код:
#!/bin/sh
case "$1" in
post)
DEVICE_ID=`lspci -D |grep Audio|awk '{print $1}'`
echo 1 > /sys/bus/pci/devices/${DEVICE_ID}/remove
sleep 1
echo 1 > /sys/bus/pci/rescan
esac
Файл должен быть исполняемым:
sudo chmod +x /lib/systemd/system-sleep/99_restart_sound
введите эту команду:
pulseaudio -k
каждый раз, когда ваш компьютер выходит из сна.
это может быть связано с этой ошибкой:
https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/1888598
Эта команда сработала для меня
amixer -q -D pulse sset Master toggle
Кажется, она заглушает, а затем снова включает устройство звука Master
После того как я выяснил все идентификаторы аудиоустройств из lspci -vvv
(пожалуйста, замените идентификатор устройства в ниже указанных командах):
sudo echo 1 |sudo tee /sys/bus/pci/devices/0000:00:03.0/remove
sudo echo 1 |sudo tee /sys/bus/pci/devices/0000:03:00.0/remove
sudo echo 1 |sudo tee /sys/bus/pci/devices/0000:00:1b.0/remove
sleep 10
sudo echo 1 |sudo tee /sys/bus/pci/rescan
sleep 10
pulseaudio --kill; pulseaudio --start
Итак, я вижу, что правильный ответ уже здесь. Но нет должного ответа на то, как автоматизировать этот процесс.
Скрипт в /lib/systemd/system-sleep/restart_sound
работает, но система начинает загружаться в 10 раз медленнее.
Для меня правильное решение выглядит так:
- Создайте службу, которая будет запускаться при событии возобновления:
touch /etc/systemd/system/restart_sound.service
[Unit]
Description=Перезапустить звуковое устройство после входа в систему при возобновлении
After=suspend.target
[Service]
User=root
Type=oneshot
ExecStart=sudo /local/restart_sound
[Install]
WantedBy=suspend.target
- Запустите эту службу
systemctl enable restart_sound.service
Скрипт сам по себе:
# PCI устройство для удаления
PCI_DEVICE="0000:00:1f.3"
# Функция для перезапуска звукового устройства
restart_sound_device() {
# Удалить PCI устройство
# Спать, чтобы не мешать другим процессам
sleep 3
if [[ -e "/sys/bus/pci/devices/$PCI_DEVICE" ]]; then
echo "$(date)Удаление PCI устройства $PCI_DEVICE..." >> /local/resume.log
echo 1 | tee "/sys/bus/pci/devices/$PCI_DEVICE/remove" > /dev/null
sleep 1
else
echo "$(date)PCI устройство $PCI_DEVICE не существует. Пропускаем удаление." >> /local/resume.log
fi
# Повторное сканирование шины PCI
echo "$(date)Повторное сканирование шины PCI..." >> /local/resume.log
echo 1 | tee /sys/bus/pci/rescan > /dev/null
}
# Запуск от имени root
if [[ $EUID -ne 0 ]]; then
echo "$(date)Этот скрипт должен выполняться от имени root. Используйте sudo." >> /local/resume.log
exit 1
fi
restart_sound_device
Готово!
Ответ или решение
Проблема отсутствия звука после сна на Ubuntu 20.04: Решение для ноутбука Xiaomi
На некоторых ноутбуках, таких как Xiaomi Notebook Pro, работающих под управлением Ubuntu 20.04 (и даже 18.04), существует распространенная проблема: после перехода в режим сна или гибернации не работает звук через встроенные динамики. Несмотря на то, что система распознает воспроизведение звука и наушники функционируют корректно, динамики отказываются работать до перезагрузки системы. Ниже приведены шаги по решению данной проблемы.
Шаг 1: Проверка оборудования
Для начала необходимо убедиться, что ваше оборудование правильно определено системой. Воспользуйтесь командой:
aplay -l
Убедитесь, что карта звука (например, HDA Intel PCH) правильно отображается без ошибок. Также проверьте настройки через команду:
lspci -nnk | grep -A2 Audio
Это позволит понять, какой драйвер используется (обычно это snd_hda_intel
).
Шаг 2: Исправление конфигурации звука
Предлагаю несколько решений, которые помогут восстановить звук после выхода из режима сна:
-
Перезагрузка компонентов звука: Используйте вновь созданный скрипт, который будет выполняться каждый раз после выхода из режима сна. Создайте файл в каталоге
/lib/systemd/system-sleep/
:sudo nano /lib/systemd/system-sleep/99_restart_sound
Вставьте следующий код:
#!/bin/bash case "$1" in post) DEVICE_ID=$(lspci | grep -i audio | awk '{print $1}') echo 1 > /sys/bus/pci/devices/$DEVICE_ID/remove sleep 1 echo 1 > /sys/bus/pci/rescan esac
Не забудьте сделать файл исполняемым:
sudo chmod +x /lib/systemd/system-sleep/99_restart_sound
-
Перезагрузка PulseAudio: В режиме пост-сна вы можете попробовать убить и заново загрузить PulseAudio:
pulseaudio -k
-
Использование amixer для переключения состояния: Выполните команду в терминале, чтобы переключить состояние основного аудиоустройства:
amixer -q -D pulse sset Master toggle
Шаг 3: Создание службы для автоматизации
Если предложенные выше решения не устраивают вас, можно создать системную службу для автоматизации процесса восстановления звука:
sudo nano /etc/systemd/system/restart_sound.service
Добавьте в файл следующее содержимое:
[Unit]
Description=Restart Sound Device After Login On Resume
After=suspend.target
[Service]
User=root
Type=oneshot
ExecStart=/usr/local/restart_sound
[Install]
WantedBy=suspend.target
Затем активируйте службу:
sudo systemctl enable restart_sound.service
Заключение
Рекомендации выше помогут вам справиться с проблемой отсутствия звука после сна на Ubuntu 20.04. Все описанные решения являются проверенными и основаны на опыте пользователей. Надеюсь, они окажутся полезными и помогут вам быстро восстановить работу звука на вашем ноутбуке. Если проблема сохраняется, стоит проверить наличие обновлений системы или обратиться к сообществу Ubuntu для дополнительной помощи.