Микрофон не работает: 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. Постоянный шум чаще всего лечится снятием буста и фиксацией частоты, а не заменой железа. Если ничего не помогло, перелогинься: половина случаев с правами и группами не видна до нового входа в сессию.
Не получилось? Поможем настроить
Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Комментарии