Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

Микрофон не работает: USB-микрофон молчит в PipeWire

Ты втыкаешь USB-микрофон, dmesg радостно сообщает о новом устройстве, а в микшере источник либо отсутствует, либо выдаёт ровную тишину с шумом. Ядро и ALSA микрофон видят, но до PipeWire сигнал не доходит — виноват почти всегда не сам микрофон, а слой сессии, выбор источника или права доступа. Ниже — путь от проверки, на каком слое теряется звук, до конфига WirePlumber и тестовой записи, по которой слышно, живой ли микрофон.

Почему ядро видит USB-микрофон, а PipeWire молчит?

Путь звука проходит несколько слоёв. Сначала ядро создаёт USB-устройство, затем ALSA даёт ему карту и поток (card, device), поверх работает PipeWire, а WirePlumber решает, как назвать узел и куда его подключить. Программа вроде браузера или мессенджера дёргает слой совместимости pipewire-pulse. Тишина на верхнем этаже ничего не говорит о нижнем: микрофон может быть полностью живым и просто не поднятым в сессии.

Начни снизу — проверь, что ядро вообще его принял:

dmesg --follow
lsusb
arecord -l

arecord -l — главная команда на этом шаге. Она показывает карты и устройства так, как их видит ALSA. Если микрофон тут есть, а в pactl list sources short пусто, проблема в PipeWire или WirePlumber, а не в железе. Общая логика «сначала слой ядра, потом сервер» разобрана в статье про отсутствие звука после установки WirePlumber.

Как понять, на каком слое теряется сигнал — ALSA или PipeWire?

Самый быстрый способ отделить драйвер от сервера — записать звук напрямую через ALSA, минуя PipeWire:

arecord -D plughw:1,0 -f S16_LE -r 48000 -c 1 -d 5 /tmp/alsa-test.wav
aplay /tmp/alsa-test.wav

Номер plughw:1,0 — это карта и устройство из вывода arecord -l. Если файл записался и в нём слышен голос, драйвер и сама железка в порядке, а искать надо в сессии. Теперь тот же тест через сервер:

pw-record --channels=1 --rate=48000 /tmp/pipewire-test.wav
pactl list sources short
wpctl status

Когда ALSA пишет, а pw-record — нет, слои разъехались. Внешние USB-карты и гарнитуры живут по своим правилам, и их поведение при подключении разобрано в статье про USB-DAC и внешнюю звуковую карту.

Почему в записи постоянный шум и шипение?

Ровный шум и шипение — почти всегда не поломка, а завышенное усиление. Открой микшер именно для карты микрофона и убери лишний буст:

alsamixer -c 1
amixer -c 1 scontrols

Стрелками вправо ищи колонки Mic, Capture и Internal Mic Boost. Буст +20 dB поднимает вместе с голосом и шумовую полку — поставь его на ноль, а нужную громкость набирай самим захватом. Полезно сверить уровни через сервер:

wpctl status
wpctl set-volume <ID> 0.8

Второй источник шума — частота дискретизации. Когда программа просит 44100, а микрофон работает на 48000, PipeWire пересэмплирует поток, и на тихих местах вылезает шипение. Зафиксируй частоту:

pw-metadata -n settings 0
pw-metadata -n settings 0 clock.force-rate 48000

Дешёвые USB-микрофоны часто шумят из-за питания: шину делят с мышью или веб-камерой. Попробуй переставить штекер в другой порт, лучше напрямую в корпус, без разветвителя.

Как выбрать правильный источник и сделать его основным?

Микрофон может быть в списке, но не выбран по умолчанию — тогда программы пишут тишину. Посмотри все источники и их идентификаторы:

pactl list sources short
wpctl status

Переключись по имени из вывода pactl:

pactl set-default-source alsa_input.usb-Foo_Mic-00.analog-mono

Или по номеру из wpctl:

wpctl set-default <ID>

Проверь, что выбор применился:

pactl get-default-source

Важный нюанс: профиль карты определяет, какие потоки вообще создаются. У гарнитуры режим «только вход» или «вход-выход» переключается профилем, и об этом подробно в статье про переключение аудиопрофилей в WirePlumber. Меняй канал и в программе: в мессенджере и браузере свой выбор устройства, который перебивает системный.

Что делать, если не хватает прав и групп?

PipeWire запускается от твоего пользователя, поэтому права нужны не на сервер, а на устройства и каталоги. Сначала проверь, кому принадлежит сокет и узлы:

ls -ld "$XDG_RUNTIME_DIR" "$XDG_RUNTIME_DIR/pipewire"
ls -l /dev/snd/
id

Если каталог состояния принадлежит root или другому пользователю, сервер молча падает. Загляни в логи:

journalctl --user -u wireplumber -b --no-pager | grep -iE 'permission|denied|error'

Для прямого доступа к ALSA в обход сервера иногда помогает группа audio:

sudo usermod -aG audio "$USER"

После добавления перезайди в сессию — группы читаются только при входе. Для кнопок mute на наушниках есть группа input, для горячих клавиш — video. Права на /dev/snd/* пересоздаются ядром, поэтому ручной chmod тут не нужен и даже вреден: после переподключения всё вернётся.

Как настроить WirePlumber, чтобы микрофон не пропадал?

WirePlumber читает правила из ~/.config/wireplumber/wireplumber.conf.d/. Создай каталог и файл с правилом, которое выбирает микрофон по умолчанию:

mkdir -p ~/.config/wireplumber/wireplumber.conf.d
# ~/.config/wireplumber/wireplumber.conf.d/50-mic.conf
default.configured.audio.source = alsa_input.usb-Foo_Mic-00.analog-mono

Чтобы карта не засыпала и не пропадала после паузы, задай таймаут приостановки:

# ~/.config/wireplumber/wireplumber.conf.d/51-nosuspend.conf
wireplumber.settings = {
  node.suspend-timeout-seconds = 0
}

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

systemctl --user restart wireplumber
wpctl status

Если правка не подхватилась, сверь синтаксис с системными файлами в /usr/share/wireplumber/ и смотри лог: journalctl --user -u wireplumber -b. Не копируй конфиг из интернета дословно — имена узлов у каждой модели свои.

Как записать тестовый файл и убедиться, что всё работает?

Финальная проверка — короткая запись через сервер:

pw-record --channels=1 --rate=48000 --duration=10 /tmp/mic.wav
aplay /tmp/mic.wav

Альтернатива через совместимый слой:

parecord --channels=1 --rate=48000 /tmp/micp.wav

Чтобы не слушать наушниками, измерь уровень автоматически:

ffmpeg -hide_banner -i /tmp/mic.wav -af volumedetect -f null -

В выводе смотри mean_volume и max_volume. Значения около -70 dB означают тишину, -40…-20 dB — живой сигнал с запасом. Если уровень близок к -6 dB, уменьши захват в микшере. Такой тест отделяет «микрофон не пишет» от «микрофон пишет, но программа выбрала другой вход».

Частые вопросы

Почему микрофон виден в arecord, но его нет в pavucontrol?

Значит, ALSA устройство создаёт, а WirePlumber его не опознал. Проверь логи journalctl --user -u wireplumber -b и убери пользовательский конфиг PipeWire в ~/.config/pipewire/ — он перекрывает системный целиком.

Почему помогает перезагрузка, а не перезапуск сервиса?

Часть окружения (XDG_RUNTIME_DIR, D-Bus) выставляется только при входе в сессию. Перезапуск юнита их не перечитывает, поэтому корректный способ — перелогин, а не systemctl --user restart.

Как убрать шум, не теряя громкость?

Сначала убери буст +20 dB в alsamixer, потом поднимай Capture. Если шум остался, поставь частоту 48000 и поменяй USB-порт, чтобы развести питание с другими устройствами.

Почему микрофон пропадает после сна?

WirePlumber приостанавливает неактивные узлы, а USB-устройство при выходе из сна может не переинициализироваться. Правило node.suspend-timeout-seconds = 0 и перезагрузка модуля snd_usb_audio возвращают его:

sudo modprobe -r snd_usb_audio && sudo modprobe snd_usb_audio

Нужно ли добавлять пользователя в группу audio?

Для работы через PipeWire — нет, сервер запускается от твоего имени и группы не требует. Группа audio нужна только для прямого доступа к ALSA в обход сервера, и её выдача расширяет права без реальной необходимости.

Полезные ресурсы

Заключение

Молчащий USB-микрофон почти всегда разбирается по слоям: сначала arecord -l и тест напрямую через ALSA, потом pactl list sources short и выбор источника, и только затем конфиг WirePlumber. Постоянный шум чаще всего лечится снятием буста и фиксацией частоты, а не заменой железа. Если ничего не помогло, перелогинься: половина случаев с правами и группами не видна до нового входа в сессию.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

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

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max