Вопрос или проблема
У меня два компьютера (назовем их Система A и Система B); оба работают на “безголовной” версии Debian ‘bookworm’. Я использую оба компьютера для воспроизведения музыки через два Bluetooth-динамика – один динамик подключен к каждому компьютеру. Они оба работают надежно с установленным pipewire
. На обоих установлена последняя ‘stable’ версия pipewire
: 1.2.4. И если это имеет значение, я использую mpg123
в качестве плеера на Системе A, а cmus
на Системе B.
$ pipewire --version
pipewire
Скомпилировано с libpipewire 1.2.4
Сильно связано с libpipewire 1.2.4
Я хотел настроить громкость через командную строку, а не мучиться с регуляторами громкости на самих BT-динамиках. Я изучил, как это сделать с помощью pipewire
, но это показалось мне таинственным.
Вместо этого я нашел это сообщение в блоге от Baeldung, которое имело смысл, и в основном работало хорошо на Системе A. Однако, когда я попробовал это на Системе B, оно вообще не работало.
‘Система A’ и ‘Система B’ не идентичны, но они довольно похожи; т.е. A – это Raspberry Pi Zero 2W; B – это Raspberry Pi 3A+. СС: Аппаратные сводки
команда | Система A | Система B |
---|---|---|
$ mixer | Простой контроль микшера ‘Master’,0 Возможности: pvolume pswitch pswitch-joined Каналы воспроизведения: Левый – Правый Ограничения: Воспроизведение 0 – 65536 Моно: Левый: Воспроизведение 26215 [40%] [включено] |
Простой контроль микшера ‘PCM’,0 Возможности: pvolume pvolume-joined pswitch pswitch-joined Каналы воспроизведения: Моно Ограничения: Воспроизведение -10239 – 400 Моно: Воспроизведение -1988 [78%] [-19.88dB] [включено] |
$ amixer info | Карточка по умолчанию ‘pipewire”https://unix.stackexchange.com/”PipeWire’ Имя микшера : ‘PipeWire’ Компоненты : ” Элементы управления : 4 Простые контроллеры : 2 |
Карточка по умолчанию ‘Наушники”https://unix.stackexchange.com/”bcm2835 Наушники’ Имя микшера : ‘Broadcom Mixer’ Компоненты : ” Элементы управления : 2 Простые контроллеры : 1 |
$ amixer sset Master 90% | ГРОМКОСТЬ ДИНАМИКА УВЕЛИЧИВАЕТСЯ! Простой контроль микшера ‘Master’,0 Возможности: pvolume pswitch pswitch-joined Каналы воспроизведения: Левый – Правый Ограничения: Воспроизведение 0 – 65536 Моно: Левый: Воспроизведение 58982 [90%] [включено] Правый: Воспроизведение 58982 [90%] [включено] |
amixer: Не удалось найти простой контроль ‘Master’,0 |
$ amixer sset PCM 10% | amixer: Не удалось найти простой контроль ‘PCM’,0 | НЕТ ИЗМЕНЕНИЯ В ГРОМКОСТИ ДИНАМИКА Простой контроль микшера ‘PCM’,0 Возможности: pvolume pvolume-joined pswitch pswitch-joined Каналы воспроизведения: Моно Ограничения: Воспроизведение -10239 – 400 Моно: Воспроизведение -9175 [10%] [-91.75dB] [включено] |
Итак, есть несколько вещей, которые я не понимаю:
-
Почему
pipewire
был выбран для карты по умолчанию на Системе A, а (Broadcom) Наушники для Системы B? -
Почему контроль микшера называется ‘Master’ на Системе A, а ‘PCM’ на Системе B?
-
Почему контроль громкости
sset
не влияет на Систему B, хотя кажется, что работает довольно хорошо на Системе A?
Я смотрел на другие вопросы и ответы здесь на SE по поводу “Выбор карты для amixer
“:
- На Системе A: < отредактировано >
$ cat /proc/asound/cards
--- звуковых карт нет ---
# и ...
$ cat /etc/asound.conf
cat: /etc/asound.conf: Нет такого файла или директории
# и ...
$ cat /etc/alsa/conf.d/50-pipewire.conf
# Добавить конкретное именованное PCM PipeWire
defaults.pipewire.server "pipewire-0"
defaults.pipewire.node "-1"
defaults.pipewire.exclusive false
defaults.pipewire.role ""
defaults.pipewire.rate 0
defaults.pipewire.format ""
defaults.pipewire.channels 0
defaults.pipewire.period_bytes 0
defaults.pipewire.buffer_bytes 0
pcm.pipewire {
# ... и т.д.
- На Системе B: < отредактировано >
$ cat /proc/asound/cards
0 [Наушники ]: bcm2835_headpho - bcm2835 Наушники
bcm2835 Наушники
1 [vc4hdmi ]: vc4-hdmi - vc4-hdmi
vc4-hdmi
# и ...
$ cat /etc/asound.conf
cat: /etc/asound.conf: Нет такого файла или директории
# и ...
$ less /etc/alsa/conf.d/50-pipewire.conf
/etc/alsa/conf.d/50-pipewire.conf: Нет такого файла или директории
Сказав это, я пытаюсь лучше понять, как разные части звуковой головоломки сочетаются, и метод, который я могу использовать для управления громкостью через командную строку. Конечно, было бы предпочтительно иметь одинаковый метод управления громкостью на обеих системах.
Библиотеки userspace ALSA, которые использует amixer, не обязательно получают доступ к устройствам ядра ALSA напрямую – существует слой конфигурации через /etc/asound.conf (включая alsalisp!) и поддержка плагинов для вывода на оборудование, не являющееся физическим.
Обычно, когда вы устанавливаете PulseAudio или PipeWire, оба предоставляют фрагмент asound.conf ALSA, который загружает виртуальный вывод ‘pulse’ или ‘pipewire’ в качестве плагина ALSA, позволяя программам на базе ALSA стать клиентами PipeWire (и второй фрагмент, который делает его выводом по умолчанию).
Поскольку PipeWire поддерживает очень динамическую маршрутизацию потоков, виртуальная карта pipewire
не предоставляет никаких контроллеров, напрямую связанных с конкретными физическими картами – у нее всегда есть только один Master
контроллер, который соответствует громкости текущего по умолчанию приемника PipeWire.
Обратите внимание, что последняя часть (делание виртуального вывода по умолчанию) часто упакована отдельно, особенно в дистрибутивах, которые поддерживают как PA, так и PW – например, в Arch вы должны установить pipewire-alsa
, чтобы ‘pipewire’ стал выводом ALSA по умолчанию.
Кроме того, если вы когда-либо написали пользовательский ~/.asoundrc
, он будет перекрывать системные настройки – вам следует удалить любые старые настройки “предпочтение HDMI hw:X,Y”, если они у вас еще есть.
$ cat /etc/alsa/conf.d/50-pipewire.conf
pcm.pipewire {
type pipewire [...]
}
ctl.pipewire {
type pipewire [...]
}
$ cat /etc/alsa/conf.d/99-pipewire-default.conf
pcm.!default {
type pipewire
}
ctl.!default {
type pipewire
}
(Поскольку это работает в пространстве пользователей, это не влияет на /proc/asound/cards
– стороной ядра по-прежнему остаются только физические выходы в /dev/snd. Если я правильно помню, раньше можно было запускать aplay -l
, чтобы перечислить все выходы, распознанные программным обеспечением, но даже это сейчас, похоже, ограничивается аппаратными устройствами.)
В общем, я бы рекомендовал управлять PipeWire через инструменты PulseAudio вместо инструментов ALSA. Существуют множество команд управления громкостью, которые работают с API libpulse; у вас может даже быть установлен стандартный pactl
PulseAudio, или альтернативно pulsemixer
, ponymix
, pamixer
и т.д. В отличие от инструментов ALSA, эти инструменты могут управлять громкостью для каждого приемника PipeWire независимо и даже для отдельных потоков приложений (“sink-inputs”).
Ответ или решение
Взаимосвязь amixer
и PipeWire на системах Debian ‘bookworm’
Введение
Вопрос о взаимосвязи между amixer
, звуковыми системами и PipeWire является актуальным для современных пользователей Linux, особенно для тех, кто использует Bluetooth-колонки на версиях Debian. В данной статье мы подробно рассмотрим поведение amixer
на двух системах (Системе A и Системе B), работающих с звукосистемой PipeWire, и проанализируем возможные причины наблюдаемых различий в работе.
1. Понимание PipeWire и его работы с ALSA
PipeWire — это современная звуковая система, разработанная для обеспечения гибкости в управлении аудио и видео потоками в Linux. Она может работать как с ALSA (Advanced Linux Sound Architecture), так и с PulseAudio. В отличие от PulseAudio, который создает виртуальные устройства и обрабатывает их в отдельном слое, PipeWire может интегрироваться более глубоко в систему, что предполагает использование ALSA в качестве интерфейса.
Как работает amixer
?
amixer
— это инструмент командной строки для управления ALSA. Он может использоваться для настройки различных параметров звуковых устройств, таких как громкость и баланс. Однако, важно понимать, что поведение amixer
при работе с PipeWire может отличаться от работы с традиционными звуковыми драйверами ALSA.
2. Анализ поведения на различных системах
На основе предоставленных данных, можно выделить несколько ключевых моментов, касающихся работы amixer
на системах A и B:
-
Почему PipeWire выставляется по умолчанию на системе A, а Headphones на B?
На системе A, установка PipeWire могла происходить по умолчанию из-за отсутствия других звуковых драйверов или приоритетов в конфигурации ALSA. На системе B, имеющей звуковую карту Broadcom, звучание может быть связано с его конфигурацией драйверов. Здесь ALSA распознает физическое устройство и делает его приоритетом. -
Разные названия микшерных элементов (
Master
иPCM
):
Это объясняется различиями в настройке аппаратных и виртуальных устройств. В случае PipeWire контроллер "Master" отвечает за общий уровень громкости, тогда как на системе B управление идет через лечение конкретных каналов (например, PCM) на базе аппаратного обеспечения. -
Почему
sset
не работает на системе B, тогда как на A — успешно?
Это связано с тем, чтоamixer
ищет элементы управления, которые могут отличаться между средами. На системе A присутствует виртуальный "Master" контроллер от PipeWire, а на B доступно только управление через физическое устройство. Поэтому командаamixer sset Master 90%
не может быть выполнена, так как элемента "Master" там нет.
3. Рекомендации по управлению громкостью через CLI
Хотя amixer
предоставляет инструменты для управления ALSA, для оптимального функционирования с PipeWire предпочтительнее использовать инструменты, разработанные для работы с PulseAudio. Рекомендуем следующие команды:
pactl
— для управления уровнями громкости по каналам.pulsemixer
,ponymix
илиpamixer
— для более удобного управления громкостью в терминале.
Эти утилиты поддерживают независимое управление громкостью по каждому выходу PipeWire и легко позволяют контролировать уровень звука приложений.
Заключение
Взаимосвязь между amixer
и PipeWire в системах Debian ‘bookworm’ зависит от конфигурации звуковой подсистемы и доступных аудио устройств. Использование специализированных инструментов для управления PipeWire обеспечит более эффективное взаимодействие с аудио без необходимости глубокого понимания внутренней реализации ALSA. В дальнейшем, рекомендуется изучить дополнительные настройки и возможности PipeWire, чтобы обеспечить консистентное управление аудио на всех ваших устройствах.