17.08.2026 456 материалов

Тихий звук Razer Leviathan на Linux через USB-C: как PipeWire губит громкость и как это исправить

Подключил саундбар Razer Leviathan к Linux-машине по USB-C — а звук еле слышен даже на 100%. Проблема оказалась в конфликте PipeWire и ALSA, и решается она не тем, что вы ожидаете.

Тихий звук Razer Leviathan на Linux через USB-C: как PipeWire губит громкость и как это исправить

PipeWire на Linux умеет подавлять аппаратную громкость USB-устройств так тихо, что даже саундбар превращается в шёпот — и стандартные методы сохранения настроек тут бессильны.


Когда евроремонт не помогает

Сценарий, знакомый многим пользователям Linux: покупаешь хорошую USB-колонку, подключаешь к Fedora, видишь, что система её распознала, кнопки громкости на корпусе двигают ползунок в интерфейсе — и вроде всё работает. Только звук тихий. Подозрительно тихий. На 100% громкости из саундбара Razer Leviathan, который по спецификациям должен трясти стены, идёт едва различимый шёпот.

Именно с этим столкнулся автор блога на dev.to, подключив Razer Leviathan к Fedora Linux через USB-C. Цифровой сигнал по кабелю передаётся чисто, так что дело не в проводе. Проблема глубже — в архитектуре Linux-аудио.

Двойной ползунок, о котором никто не предупреждает

В Linux при работе с USB-аудиоустройствами громкость регулируется на двух уровнях. Первый — программный, тот самый, что отображается на панели рабочего стола. Второй — аппаратный, на уровне ALSA (Advanced Linux Sound Architecture), низкоуровневого драйвера звука.

Открыв alsamixer в терминале и выбрав карту Razer Leviathan, автор обнаружил скрытый ползунок, стоявший на минимуме. Сдвинув его до 100%, он тут же получил нормальную, оглушительную громкость. Программный и аппаратный ползунки наконец синхронизировались.

Казалось бы, проблема решена? Нет.

Амнезия при каждом включении

Перезагрузил машину — и тишина вернулась. Динамик перешёл в спящий режим и проснулся — снова шёпот. Linux при каждой инициализации устройства сбрасывает аппаратную громкость на заводской минимум. Сохранение настроек ALSA через alsactl store не помогает — современные аудио-демоны перезаписывают состояние при загрузке.

Автор перебрал несколько подходов, и все они провалились:

  • sudo alsactl store — сохранение состояния ALSA. Работает до первой перезагрузки, после чего PipeWire и его компоненты вмешиваются.

  • Правила udev — запись жёсткого правила с vendor и product ID (1532:054a), которое должно принудительно выставлять громкость при подключении. PipeWire перезаписывает и это.

  • Хак с soft-mixer в WirePlumber — конфигурация, игнорирующая аппаратные ограничения по децибелам. В итоге динамик намертво застревал на низкой громкости старта.

Суть проблемы — конфликт по времени. WirePlumber, менеджер сессий PipeWire, загружается после пользовательских правил, интерпретирует кривую громкости Leviathan по-своему и агрессивно приглушает звук.

Решение: отложенный скрипт автозапуска

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

Решение — bash-скрипт, который запускается с задержкой при каждом входе в систему. Вот что он делает:

  1. Ждёт 3 секунды, пока PipeWire инициализируется.

  2. Через /proc/asound/cards находит текущий ALSA-идентификатор карты Leviathan.

  3. С помощью amixer определяет имя канала громкости (например, PCM или Speaker).

  4. Принудительно выставляет аппаратную громкость на 100%.

Автозапуск обеспечивается .desktop-файлом в ~/.config/autostart/, который GNOME подхватывает при логине.

mkdir -p ~/.local/bin ~/.config/autostart

cat << 'EOF' > ~/.local/bin/fix-razer.sh
#!/bin/bash
sleep 3
CARD=$(awk '/Leviathan/ {print $1}' /proc/asound/cards | head -n1)
if [ -n "$CARD" ]; then
    CTRL=$(amixer -c $CARD scontrols | awk -F"'" 'NR==1 {print $2}')
    amixer -c $CARD sset "$CTRL" 100%
fi
EOF

chmod +x ~/.local/bin/fix-razer.sh

cat << EOF > ~/.config/autostart/razer-volume.desktop
[Desktop Entry]
Type=Application
Exec=$HOME/.local/bin/fix-razer.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Fix Razer Volume
Comment=Max out Leviathan hardware volume on boot
EOF

Насколько это надёжно?

Скрипт рабочий, но стоит понимать его ограничения. Задержка в 3 секунды — эмпирическая; на другой конфигурации или при высокой нагрузке при загрузке PipeWire может инициализироваться дольше, и скрипт сработает раньше, чем нужно. Используя awk для поиска по имени «Leviathan» в /proc/asound/cards, автор привязал решение конкретно к этой модели — для другого USB-аудиоустройства потребуется адаптация.

Кроме того, amixer находит первый канал управления, и если у Leviathan их несколько, скрипт может выставить не тот, что нужно. Впрочем, для типичного сценария «саундбар на столе» это работает.

Шире проблема: PipeWire и USB-аудио

Эта история — не уникальный баг Razer Leviathan. PipeWire, при всех его преимуществах над PulseAudio, известен проблемами с корректной инициализацией громкости USB-устройств. На форумах Fedora, Arch и Ubuntu регулярно всплывают сообщения о тихом звуке внешних ЦАП, USB-наушников и колонок. Механизм один и тот же: PipeWire или WirePlumber переопределяют аппаратный уровень, ставя его на минимум или на значение, которое считает «безопасным».

Для пользователей Windows и macOS это звучит дико — там USB-динамик просто работает на той громкости, на которую вы его поставили. Но Linux-аудиостек исторически состоит из нескольких слоёв (ALSA → PulseAudio/PipeWire → сессионный менеджер), и каждый слой мнит себя главным.

Если вы столкнулись с похожей проблемой на любом USB-аудиоустройстве — не обязательно Razer, — попробуйте сначала проверить alsamixer вручную. Если помогает, но сбрасывается после перезагрузки, отложенный скрипт автозапуска станет вашим лучшим другом. Просто замените «Leviathan» на имя вашего устройства в /proc/asound/cards.