Bluetooth-соединение (BlueZ) не работает после выхода из системы (работает после перезагрузки)

Вопрос или проблема

Я использую LXQT в Lubuntu 18.10 и у меня есть проблема с поддержанием подключения Bluetooth-колонки к ноутбуку после выхода и входа в систему. Однако после перезагрузки все работает нормально.

Итак, у меня есть решение, которое всегда работает: перезагрузка ИЛИ: переустановка bluez:

sudo apt-get install --reinstall bluez

и это всегда работает!

В любом случае, когда возникает моя проблема, bluetooth никогда не блокируется.

Если я перезагружаюсь или переустанавливаю bluez, нет необходимости удалять и добавлять устройство снова, достаточно установить его в “Audio sink”.


Когда это происходит, после выхода и входа в систему:

  • Колонка отображается в blueman-manager, установка на ‘Audio Sink’ приводит к ошибке Protocol Not available.

enter image description here

В терминале:

~$ blueman-manager
_________
Load (/usr/lib/python3/dist-packages/blueman/main/PluginManager.py:60)
['PulseAudioProfile', 'Services'] 
_________
__load_plugin (/usr/lib/python3/dist-packages/blueman/main/PluginManager.py:133)
loading <class 'blueman.plugins.manager.PulseAudioProfile.PulseAudioProfile'> 
_________
pa_context_event (/usr/lib/python3/dist-packages/blueman/main/PulseAudioUtils.py:341)
1 
_________
__load_plugin (/usr/lib/python3/dist-packages/blueman/main/PluginManager.py:133)
loading <class 'blueman.plugins.manager.Services.Services'> 
blueman-manager version 2.0.5 starting
Stale PID, overwriting
_________
pa_context_event (/usr/lib/python3/dist-packages/blueman/main/PulseAudioUtils.py:341)
2 
_________
on_bluez_name_owner_changed (/usr/bin/blueman-manager:96)
org.bluez owner changed to  :1.238 
_________
get_interface_version (/usr/lib/python3/dist-packages/blueman/bluez/BlueZInterface.py:13)
Detected BlueZ 5 
_________
SetAdapter (/usr/lib/python3/dist-packages/blueman/gui/DeviceList.py:271)

_________
on_adapter_changed (/usr/lib/python3/dist-packages/blueman/gui/manager/ManagerToolbar.py:83)
toolbar adapter /org/bluez/hci0 
_________
__init__ (/usr/lib/python3/dist-packages/blueman/main/Device.py:26)
caching initial properties 
_________
add_device (/usr/lib/python3/dist-packages/blueman/gui/DeviceList.py:317)
adding new device 
_________
do_cache (/usr/lib/python3/dist-packages/blueman/gui/DeviceList.py:496)
Caching new device C0:28:8D:81:64:5A 
_________
row_update_event (/usr/lib/python3/dist-packages/blueman/gui/manager/ManagerDeviceList.py:264)
row update event Fake False 
_________
row_update_event (/usr/lib/python3/dist-packages/blueman/gui/manager/ManagerDeviceList.py:264)
row update event Trusted 0 
_________
row_update_event (/usr/lib/python3/dist-packages/blueman/gui/manager/ManagerDeviceList.py:264)
row update event Paired 1 
_________
Generate (/usr/lib/python3/dist-packages/blueman/gui/manager/ManagerDeviceMenu.py:173)
UE BOOM 2 
_________
pa_context_event (/usr/lib/python3/dist-packages/blueman/main/PulseAudioUtils.py:341)
3 
_________
pa_context_event (/usr/lib/python3/dist-packages/blueman/main/PulseAudioUtils.py:341)
4 
_________
on_pa_ready (/usr/lib/python3/dist-packages/blueman/plugins/manager/PulseAudioProfile.py:29)
connected 
_________
<lambda> (/usr/lib/python3/dist-packages/blueman/main/PulseAudioUtils.py:353)
1 
_________
Generate (/usr/lib/python3/dist-packages/blueman/gui/manager/ManagerDeviceMenu.py:173)
UE BOOM 2 
_________
Generate (/usr/lib/python3/dist-packages/blueman/gui/manager/ManagerDeviceMenu.py:173)
UE BOOM 2 
_________
set_op (/usr/lib/python3/dist-packages/blueman/gui/manager/ManagerDeviceMenu.py:85)
op: regenerating instance <ManagerDeviceMenu.ManagerDeviceMenu object at 0x7f8fd0e05e10 (blueman+gui+manager+ManagerDeviceMenu+ManagerDeviceMenu at 0x1efcb60)> 
_________
set_op (/usr/lib/python3/dist-packages/blueman/gui/manager/ManagerDeviceMenu.py:85)
op: regenerating instance <ManagerDeviceMenu.ManagerDeviceMenu object at 0x7f8fd0e0eee8 (blueman+gui+manager+ManagerDeviceMenu+ManagerDeviceMenu at 0x1efce40)> 
_________
unset_op (/usr/lib/python3/dist-packages/blueman/gui/manager/ManagerDeviceMenu.py:99)
op: regenerating instance <ManagerDeviceMenu.ManagerDeviceMenu object at 0x7f8fd0e05e10 (blueman+gui+manager+ManagerDeviceMenu+ManagerDeviceMenu at 0x1efcb60)> 
_________
Generate (/usr/lib/python3/dist-packages/blueman/gui/manager/ManagerDeviceMenu.py:173)
UE BOOM 2 
_________
unset_op (/usr/lib/python3/dist-packages/blueman/gui/manager/ManagerDeviceMenu.py:99)
op: regenerating instance <ManagerDeviceMenu.ManagerDeviceMenu object at 0x7f8fd0e0eee8 (blueman+gui+manager+ManagerDeviceMenu+ManagerDeviceMenu at 0x1efce40)> 
_________
fail (/usr/lib/python3/dist-packages/blueman/gui/manager/ManagerDeviceMenu.py:124)
fail org.freedesktop.DBus.Python.blueman.bluez.errors.DBusFailedError: blueman.bluez.errors.DBusFailedError: Protocol not available

/usr/lib/python3/dist-packages/blueman/gui/manager/ManagerProgressbar.py:165: Warning: Source ID 697 was not found when attempting to remove it
  GObject.source_remove(self.gsource)

и

~$ pactl load-module module-bluetooth-discover
Failure: Module initialization failed

потому что он уже был загружен.

Удаление устройства и попытка добавить его снова: оно вообще не найдено!


Какой аспект в нормальной работе bluez – такой, который доступен при запуске системы, а также при переустановке пакета, – может быть потерян при перезапуске сессии? – И как избежать этой потери?


ОБНОВЛЕНИЕ/РЕДАКТИРОВАНИЕ от автора:

[Я автор. В какой-то момент я удалил свою учетную запись, а затем вернулся с тем же id.] Хочу добавить, что это проблема, специфичная для Lubuntu-LXQt. Я видел эту проблему во многих дистрибутивах Ubuntu и на основе Ubuntu до 18.04, но ни в одном начиная с 18.x. С 18.04 это исправлено, за исключением Lubuntu-LXQt.

Детали bluetooth-адаптера:

lsusb | grep Bluetooth
Bus 001 Device 013: ID 0489:e00f Foxconn / Hon Hai Foxconn T77H114 BCM2070 [Single-Chip Bluetooth 2.1 + EDR Adapter]

Это может не относиться к вашей странной проблеме, но ошибки в bluez существуют уже долгое время: [Bug 1499858] Re: bluetoothd[650]: Failed to obtain handles for “Service Changed” characteristic

Последнее сообщение сегодня утром гласит:

Здравствуйте снова,

Я скомпилировал bluez-5.46 и установил его на ubuntu 16.04, и это
решило все ошибки “Not enough free handles to register service”
и также “Failed to obtain handles for “Service Changed”
characteristic” ошибки и bluetooth работает лучше, чем когда-либо
было, по крайней мере для меня. Таким образом, для меня это решено, пожалуй.

Не знаю, поможет ли это кому-нибудь?? Но надеюсь, что да!

Всего наилучшего,

Singtoh


Рассмотрите возможность установки мастера радио устройств tlp. Он будет:

  • Включать или отключать встроенные устройства wifi, bluetooth или wwan при запуске и выключении системы
  • Восстанавливать состояние радио устройства при запуске системы (из предыдущего завершения работы).
  • Мастер радио устройств: переключать радио при подключении/отключении сети и при подключении/отключении док-станции
  • Отключать Wake On LAN
  • Состояние интегрированных WWAN и bluetooth восстанавливается после приостановки/гибернации

Источник: Добро пожаловать в TLP!

После множества попыток различных команд, модулей и так далее, что в итоге сработало для меня, было следующее:

$ sudo apt-get purge pulseaudio  
$ rm ~/.config/pulse && sudo killall pulseaudio  
$ sudo apt-get install pulseaudio  
$ pulseaudio --start

Это обеспечит, что pulse сначала работает.
Затем выполните следующее, что немного странно, что не поставляется по умолчанию с самим pulseaudio:

$ sudo apt-get install pulseaudio-module-bluetooth  
$ pactl load-module module-bluetooth-discover  

Немного избыточно, я знаю, но это были точные шаги, которые сработали у меня 10 минут назад.
Но ладно, по крайней мере, теперь это работает 🙂
Это не сразу очевидно, что это связано с pulseaudio вообще. Добро пожаловать в странности Linux 🙂

Ответ или решение

Теория

Проблема, связанная с невозможностью подключения Bluetooth-динамика после выхода из системы на Lubuntu 18.10 с средой рабочего стола LXQt, может казаться специфичной, но она отражает общие механизмы работы систем на базе Linux. Bluetooth-технология в Linux управляется стеком BlueZ, который обеспечивает низкоуровневое взаимодействие с устройствами, используя D-Bus для обеспечения связи с другими приложениями, такими как менеджеры устройств, среда рабочего стола и Pulseaudio.

При перезагрузке весь стек BlueZ перезапускается, включая инициализацию всех необходимых модулей и служб. Однако при выходе из системы повторно не загружаются все модули, необходимые для взаимодействия. В частности, проблемой может быть некорректная конфигурация Pulseaudio или его модулей, ответственных за работу с Bluetooth-устройствами, что выражается в ошибке "Protocol Not available".

Пример

Из текста вопроса понятно, что после перезапуска или переустановки bluez всё работает, но после простого выхода из аккаунта возникает ошибка и Bluetooth-устройство невозможно использовать. Этот сценарий указывает на нестабильную работу Pulseaudio вместе с bluez. Загрузка модуля module-bluetooth-discover при помощи команды pactl load-module module-bluetooth-discover возвращает ошибку, если модуль уже загружен, что свидетельствует о его автоматической загрузке. Возможно, не хватает правильной связи между модулем Pulseaudio и BlueZ после выхода из системы.

Также, исходя из вашего описания, специфичность проблемы к интерпретации LXQt в Lubuntu 18.10 может указывать на нехватку поддержки определённых пакетов или слабую интеграцию различных версий софта в этой версии операционной системы.

Применение

Для решения проблемы можно попробовать следующие действия:

  1. Проверка и настройка Pulseaudio и BlueZ:

    • Убедитесь, что все необходимые модули Pulseaudio установлены:
      sudo apt-get install pulseaudio-module-bluetooth
    • После установки или обновления перезапустите Pulseaudio:
      pulseaudio --kill
      pulseaudio --start
  2. Автоматизация загрузки модулей:

    • Создайте или отредактируйте файл ~/.config/pulse/default.pa и добавьте в него строки, которые обеспечат автоматическую загрузку необходимых модулей после каждого входа в систему:

      .include /etc/pulse/default.pa
      load-module module-bluetooth-discover

    Это гарантирует, что модули будут загружены с каждой сессией, нивелируя необходимость делать это вручную.

  3. Использование TLP для управления подключениями:

    • Установите TLP для управления беспроводными соединениями и восстановление состояния устройств после выключения системы:
      sudo apt-get install tlp
  4. Тестирование и логирование:

    • Если проблема не исчезает, включите логирование ввода-вывода и системных сообщений для deeper анализа с использованием dmesg и journalctl. Например:
      journalctl -e | grep bluetooth
  5. Переход на более новую версию ОС:

    • Поскольку данная проблема значительно улучшена в более новых версиях Ubuntu, обновление до последних стабильных релизов может стать последним решением для устранения данных проблем с самим стеком BlueZ и его интеграцией в систему с LXQt.

Заключение

Таким образом, нестабильность работы Bluetooth в Lubuntu 18.10 может быть решена как корректной настройкой текущих компонентов, так и выходом на более новую версию ОС. Для систем Linux решения обычно включают как программные исправления, так и манипуляции с конфигурацией и управлением сервисами. Надлежащая практика по поддержке всех компонентов системы в актуальном состоянии, а также знание особенностей используемой технологии, будет вашим лучшим подспорьем в устранении таких неполадок.

Оцените материал
Добавить комментарий

Капча загружается...