Есть ноут с archlinux+i3 на борту.
В общем, пока не было блютус-наушников, всё работало примерно так: по дефолту звук идёт на динамики, если втыкаю проводные уши, звук идёт на уши. У обоих девайсов из коробки различный набор настроек громкости, так что если замутить динамики и воткнуть уши, которые в прошлый раз были включены на полную громкость, звук пойдёт на полную громкость. Синк пульсы выглядит вот так:
$ pactl list sinks
Sink #0
State: IDLE
Name: alsa_output.pci-0000_05_00.6.analog-stereo
Description: Family 17h (Models 10h-1fh) HD Audio Controller Analog Stereo
Driver: module-alsa-card.c
Sample Specification: s16le 2ch 44100Hz
Channel Map: front-left,front-right
Owner Module: 7
Mute: no
Volume: front-left: 65504 / 100% / -0.01 dB, front-right: 65504 / 100% / -0.01 dB
balance 0.00
Base Volume: 65536 / 100% / 0.00 dB
Monitor Source: alsa_output.pci-0000_05_00.6.analog-stereo.monitor
Latency: 100765 usec, configured 100136 usec
Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY
Properties:
alsa.resolution_bits = "16"
device.api = "alsa"
device.class = "sound"
alsa.class = "generic"
alsa.subclass = "generic-mix"
alsa.name = "ALC257 Analog"
alsa.id = "ALC257 Analog"
alsa.subdevice = "0"
alsa.subdevice_name = "subdevice #0"
alsa.device = "0"
alsa.card = "1"
alsa.card_name = "HD-Audio Generic"
alsa.long_card_name = "HD-Audio Generic at 0xd05c0000 irq 78"
alsa.driver_name = "snd_hda_intel"
device.bus_path = "pci-0000:05:00.6"
sysfs.path = "/devices/pci0000:00/0000:00:08.1/0000:05:00.6/sound/card1"
device.bus = "pci"
device.vendor.id = "1022"
device.vendor.name = "Advanced Micro Devices, Inc. [AMD]"
device.product.id = "15e3"
device.product.name = "Family 17h (Models 10h-1fh) HD Audio Controller"
device.string = "front:1"
device.buffering.buffer_size = "17664"
device.buffering.fragment_size = "2944"
device.access_mode = "mmap"
device.profile.name = "analog-stereo"
device.profile.description = "Analog Stereo"
device.description = "Family 17h (Models 10h-1fh) HD Audio Controller Analog Stereo"
alsa.mixer_name = "Realtek ALC257"
alsa.components = "HDA:10ec0257,17aa5127,00100001"
module-udev-detect.discovered = "1"
device.icon_name = "audio-card-pci"
Ports:
analog-output-speaker: Speakers (priority: 10000, not available)
analog-output-headphones: Headphones (priority: 9900, available)
Active Port: analog-output-headphones
Formats:
pcm
В i3blocks висел такой скриптик, которого с одним синком вполне хватало:
#!/bin/bash
vol=$(pactl list sinks | grep "^\sVolume:" | sed "s/^.*\s\([0-9]\+%\).*$/\1/")
mute=$(pactl list sinks | grep "^\sMute:" | sed "s/^.*:\s\([a-z]\+\).*$/\1/")
[ $mute = "no" ] && echo "V: $vol" || echo "V: -"
Потом появились bluetooth-уши. Подключал вроде просто через bluetoothctl, звук появился из коробки. При подключении они зачем-то создают свой синк:
Sink #9
State: IDLE
Name: bluez_sink.3B_94_CC_98_2C_0F.a2dp_sink
Description: T12
Driver: module-bluez5-device.c
Sample Specification: s16le 2ch 48000Hz
Channel Map: front-left,front-right
Owner Module: 34
Mute: no
Volume: front-left: 26204 / 40% / -23.89 dB, front-right: 26204 / 40% / -23.89 dB
balance 0.00
Base Volume: 65536 / 100% / 0.00 dB
Monitor Source: bluez_sink.3B_94_CC_98_2C_0F.a2dp_sink.monitor
Latency: 59641 usec, configured 43666 usec
Flags: HARDWARE DECIBEL_VOLUME LATENCY
Properties:
bluetooth.protocol = "a2dp_sink"
device.description = "T12"
device.string = "3B:94:CC:98:2C:0F"
device.api = "bluez"
device.class = "sound"
device.bus = "bluetooth"
device.form_factor = "headset"
bluez.path = "/org/bluez/hci0/dev_3B_94_CC_98_2C_0F"
bluez.class = "0x240404"
bluez.alias = "T12"
device.icon_name = "audio-headset-bluetooth"
device.intended_roles = "phone"
Ports:
headset-output: Headset (priority: 0, available)
Active Port: headset-output
Formats:
pcm
Скрипт ломается, т.к. теперь синка два. Но это ничего, скрипт я поправлю. Что ещё хуже, приложения типа mpv приходится перезапускать, чтобы те начали пускать звук по bt-ушам.
Вопрос: какой кусок софта (bluez, alsa, pulseaudio, …) за автоматическую настройку синков отвечает и что конкретно мне нужно писать в конфигах, чтобы ликвидировать указанную проблему?
Я не очень шарю в пульсе, но по логике это прекратится, если как-то пихнуть уши в качестве порта в нулевой синк, при этом предотвратив создание нового синка. Тогда получится вообще круто, т.к. можно будет указать bt-ушам самый высокий приоритет, чтобы проводные уши и динамики отключались сами.