Вопрос или проблема
Я пытался настроить это сначала на Ubuntu 22.04, а теперь на Mint 22.1. На обеих платформах я использую рабочий стол xfce. Я столкнулся с проблемой как при использовании pulse audio, так и под pipewire. Я использовал как bluetoothctl, так и blueman, чтобы попытаться управлять устройством с переменными результатами.
Симптомы: я могу подключить устройство к любой из платформ, используя и bluetoothctl, и blueman. Проблема в том, что как только я перезагружаю, устройство больше не может подключиться. Я все еще вижу устройство в инструментах, но подключение завершается ошибкой “Failed to connect: org.bluez.Error.Failed br-connection-create-socket.”. Если я попробую просмотреть устройство с помощью “pactl list”, карты там нет. Если я удаляю устройство через bluetoothctl и повторяю процесс сопряжения, тогда все снова работает, и я могу видеть устройство как карту в выводе “pactl list”. Обратите внимание, что я могу сопрягать, подключать, доверять и просматривать устройство как в bluetoothctl, так и в blueman, но после перезагрузки единственный способ восстановления — это удалить устройство и повторить процесс сопряжения.
Я экспериментировал с добавлением и удалением pipewire, pipewire-pulse, wireplumber и pulseaudio. Одно общее во всем этом — это версия bluez. Команда “dpkg -l | grep bluez” показывает, что я использую версию 5.7.2. Некоторые из моих поисков указывают на изменение где-то после 5.6.1 для исправления CVE, что может быть частью проблемы. Я также подозреваю, что это может быть связано с использованием xfce и временем загрузки сервера X в связи с тем, когда загружаются модули bluez.
Любая помощь или предложения по решению этой проблемы были бы признательны. Кажется, есть довольно много тем на различных форумах, связанных с этой проблемой, так что я подозреваю, что это ошибка в библиотеке bluez, которая потребует какого-то исправления. Я был бы даже рад найти способ понизить версию до предыдущей версии bluez, но это, похоже, не является вариантом. Я загрузил синтаксический диспетчер пакетов в Mint, и он показывает только версию 5.7.2 bluez, доступную для платформы Mint.
На данный момент единственное решение, которое я смог придумать, это удалить устройство и повторить процесс сопряжения каждый раз, когда мне нужно перезагрузиться. Обратите внимание, что даже после сопряжения у меня все еще есть проблемы с поддержанием привязки устройства к правильному профилю, и я в итоге добавил файл правил в /etc/udev/rules.d для вызова сценария для назначения правильного профиля карты в pactl каждый раз, когда я вижу событие добавления устройства.
файл правил:
ACTION=="add", SUBSYSTEM=="input", ATTR{id/vendor}=="00e0", ATTR{id/product}=="3005", RUN+="/home/<пользователь>/bin/setearbudprofile.sh"
Команда обновления в setearbudprofile.sh
sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 \
pactl set-card-profile bluez_card.5C_33_7B_6C_E9_49 handsfree_head_unit
Вывод из pactl list (только bluetooth-карта)
Карта #4
Имя: bluez_card.5C_33_7B_6C_E9_49
Драйвер: module-bluez5-device.c
Владелец модуля: 25
Свойства:
device.description = "Pixel Buds Pro 2"
device.string = "5C:33:7B:6C:E9:49"
device.api = "bluez"
device.class = "sound"
device.bus = "bluetooth"
device.form_factor = "headset"
bluez.path = "/org/bluez/hci0/dev_5C_33_7B_6C_E9_49"
bluez.class = "0x244404"
bluez.alias = "Pixel Buds Pro 2"
bluetooth.battery = "100%"
device.icon_name = "audio-headset-bluetooth"
device.intended_roles = "phone"
bluetooth.codec = "mSBC"
Профили:
a2dp_sink: Высококачественное воспроизведение (A2DP Sink) (приемников: 1, источников: 0, приоритет: 40, доступно: да)
handsfree_head_unit: Устройство Handsfree (HFP) (приемников: 1, источников: 1, приоритет: 30, доступно: да)
off: Выкл (приемников: 0, источников: 0, приоритет: 0, доступно: да)
Активный профиль: handsfree_head_unit
Порты:
headset-output: Гарнитура (тип: Гарнитура, приоритет: 0, задержка: 0 мкс, доступно)
Часть профилей: a2dp_sink, handsfree_head_unit
headset-input: Гарнитура (тип: Гарнитура, приоритет: 0, задержка: 0 мкс, доступно)
Часть профилей: handsfree_head_unit
Ответ или решение
Введение:
Каждый современный пользователь технологий может столкнуться с проблемой несовместимости устройств, особенно когда дело касается Bluetooth-устройств и операционных систем на базе Linux. Вопрос о неполадках Bluetooth при использовании наушников Pixel Pro 2 с настольными системами Linux достаточно распространен и требует профессионального подхода. На основе вашего описания проблемы, вы являетесь опытным пользователем, который уже предпринял ряд эффективных шагов для решения своей проблемы. Ниже я представлю теоретическое понимание вашей проблемы, конкретные примеры подобных ситуаций и предложу дальнейшие практические шаги для вашей ситуации.
Теория:
Bluetooth, как технология, полагается на стек протоколов, который может варьироваться в зависимости от устройства и операционной системы. На Linux, взаимодействие с Bluetooth можно осуществить с помощью нескольких инструментов: bluez (основной стек протоколов Bluetooth), bluetoothctl (интерактивный интерфейс для управления Bluetooth) и blueman (графический интерфейс для управления Bluetooth). Столкновение различных версий программного обеспечения и драйверов может вызывать конфликты и нестабильное поведение устройства.
Одной из причин нестабильной работы Bluetooth после перезагрузки может быть способ, которым хранятся и обновляются конфигурации. Операционные системы на базе Linux зависят от служб и демонов, которые могут стартовать в определенной последовательности. Проблемы с BlueZ могут быть связаны с версией 5.7.2, некоторыми изменениями после патча безопасности в версии 5.6.1 или неправильно загружаемыми модулями на старте системы.
Пример:
Вы упомянули, что на двух платформах (Ubuntu 22.04 и Mint 22.1 с рабочей средой xfce) у вас возникает одна и та же проблема. Это указывает на системную причину, возможно, связанную с самим ядром Bluetooth или комбинацией с вашей конкретной конфигурацией оборудования. Вы также отметили, что проблема сохраняется независимо от использования PulseAudio или PipeWire, что наводит на мысль о глубоком уровне Bluetooth и BlueZ.
Применение и рекомендации:
-
Проверка и обновление драйверов:
- Убедитесь, что все системные пакеты и обновления установлены, включая ядро и все модули, связанные с Bluetooth.
- Командой
lsusb
иlspci
проверьте, правильно ли определяется Bluetooth-адаптер.
-
Управление службами:
- Проверьте статус службы Bluetooth после перезагрузки с помощью
systemctl status bluetooth
. Убедитесь, что она активна и не сбоит. - Создайте зависимости при запуске, чтобы bluez запускался после загрузки необходимых модулей. Это может быть реализовано через systemd, корректировкой unit-файла.
- Проверьте статус службы Bluetooth после перезагрузки с помощью
-
Конфигурационные изменения:
- Удостоверьтесь, что конфигурация сохраняется корректно. Проверьте или создайте конфигурационный файл для bluez в
/etc/bluetooth/main.conf
и добавьте необходимую информацию о доверенном устройстве.
- Удостоверьтесь, что конфигурация сохраняется корректно. Проверьте или создайте конфигурационный файл для bluez в
-
Использование скриптов автоматизации:
- Ваш подход с использованием udev-правил и скриптов в
setearbudprofile.sh
полезен, но требует доработки: проверьте логи udev для улучшения логики работы скрипта после срабатывания правила.
- Ваш подход с использованием udev-правил и скриптов в
-
Возврат к предыдущей версии:
- Хотя вы отметили сложность в даунгрейде, попробуйте использовать PPA (Personal Package Archives) для поиска более старых версий пакетов или, если возможно, соберите более старую версию BlueZ из исходных кодов с учетом особенностей на вашей операционной системе.
-
Устранение гипотезы о xfce:
- Попробуйте временно переключиться на другой оконный менеджер или комбинированную среду, чтобы исключить влияние рабочих окружений.
В заключение, ваша проблема действительно может быть комплексной, требующей комбинации решений. Ваша инициатива применить автоматизацию уже оправдана, и я предложил ряд дальнейших шагов для детального диагностического подхода. Рекомендую следить за обновлениями BlueZ и соответствующих библиотек, так как разработчики активно исправляют известные баги и уязвимости.