Bluetoothctl удерживает агента включенным (авто-подключение)

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

Я подключил устройство (джойстик) с помощью bluetoothctl и доверил его. Пока всё хорошо, всё работает. Но если я выйду из bluetoothctl, выключу джойстик и снова включу его, он не подключится…

Вот шаг за шагом, что я делаю в интерфейсе командной строки bluetoothctl:

[bluetooth]# agent on
[bluetooth]# default-agent
[bluetooth]# power on
[bluetooth]# discoverable on
[bluetooth]# pairable on
[bluetooth]# scan on
[bluetooth]# connect <device_addr>
[bluetooth]# trust <device_addr>

Забавно, что я заметил это, когда вышел:

[bluetooth]# quit
Агент отменён

И в журнале я вижу это сообщение:

# journalctl -u bluetooth -n50
[...]
Mar 05 12:27:30 hostname bluetoothd[522]: Нет доступного агента для типа запроса 0
Mar 05 12:27:30 hostname bluetoothd[522]: device_request_pin: Операция не разрешена

На сколько я понимаю, моё устройство пытается подключиться, но не может найти агента для подключения.

Я что-то упустил? Что мне делать, чтобы снова автоматически подключиться без повторной сопряжения через интерфейс командной строки каждый раз, когда я хочу поиграть?

Спасибо!

Мне это тоже нужно! Единственное, что я могу придумать, это создать bash-скрипт, который будет запускаться как cronjob и пытаться подключиться к устройству, если оно отключено, поскольку идентификаторы устройств одинаковы.

Также я нашел репозиторий на Github, который делает в целом то же самое, что и я упоминал.

https://github.com/noraworld/bluetoothctl-autoconnector

Вы были почти правы, но пропустили шаг сопряжения. Без него вы подключаетесь к несопряжённому устройству, что возможно с некоторыми Bluetooth-устройствами, но всегда требует явной команды.

[bluetooth]# agent on
[bluetooth]# default-agent
[bluetooth]# power on
[bluetooth]# discoverable on
[bluetooth]# pairable on
[bluetooth]# scan on
[bluetooth]# pair <device_addr>     # это шаг, который вы пропустили
<введите PIN-код, если будет запрашиваться>
[bluetooth]# trust <device_addr>
[bluetooth]# connect <device_addr>  # это также может сработать без сопряжения с некоторыми простыми устройствами

После успешного сопряжения и установки устройства как доверенного, вы должны иметь возможность подключаться снова с помощью просто connect <device_addr> или даже автоматически подключаться.

Сообщение “нет доступного агента” означает, что система ищет агента сопряжения, так как ещё нет существующих отношений сопряжения.

Если джойстик или другое старое HID-устройство не поддерживает сопряжение/шифрование, вам может потребоваться отредактировать /etc/bluetooth/input.conf, чтобы установить:

ClassicBondedOnly=false

По умолчанию эта строка закомментирована, и параметр по умолчанию равен true для безопасности.

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

Для автоматического переподключения Bluetooth-устройств, таких как игровой контроллер, после завершения работы с bluetoothctl и повторного включения устройства, необходимо учитывать несколько ключевых моментов. В данной статье мы подробно рассмотрим, как настроить автоматическое переподключение с использованием bluetoothctl и устранить проблемы, связанные с отсутствием агента при попытке подключения.

Шаги для настройки автоматического переподключения

  1. Запуск агента: Первоначальная настройка требует активации агента, который будет управлять процессом соединения и парирования устройств.

    [bluetooth]# agent on
    [bluetooth]# default-agent
  2. Включение Bluetooth: Убедитесь, что ваш адаптер Bluetooth включен.

    [bluetooth]# power on
  3. Сделайте устройство обнаруживаемым и сопряжаемым: Убедитесь, что ваше устройство может быть найдено и подключено.

    [bluetooth]# discoverable on
    [bluetooth]# pairable on
  4. Сканирование и парирование: Начните сканирование для поиска вашего Bluetooth-устройства и выполните парирование, если оно требуется. Если вы уже доверили устройство, новая попытка соединения может обойтись без повторного парирования, но лучше обеспечить надежность.

    [bluetooth]# scan on
    [bluetooth]# pair <device_addr>

    Важный момент: Если устройство требует PIN-код, введите его.

  5. Доверие к устройству: Убедитесь, что устройство помечено как доверенное.

    [bluetooth]# trust <device_addr>
  6. Подключение к устройству: После выполнения всех предыдущих шагов подключитесь к устройству.

    [bluetooth]# connect <device_addr>

Проблема с «Нет доступного агента»

Сообщение об ошибке «No agent available for request type 0» указывает на отсутствие активного агента, когда ваше устройство пытается подключиться. Чтобы устранить данную проблему, необходимо следить за состоянием агента Bluetooth в системе. Если вы выходите из bluetoothctl, агент автоматически отключается.

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

Одним из решений проблемы автоматического подключения является написание скрипта на Bash, который будет периодически проверять подключение к вашему устройству. Более того, существуют готовые решения, такие как репозиторий на GitHub:

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

Изменение конфигурации Bluetooth

Если ваше устройство, например, контроллер, не поддерживает шифрование и соединение через Pairing, вы можете изменить файл конфигурации Bluetooth. Для этого откройте файл /etc/bluetooth/input.conf и добавьте или измените следующую строку:

ClassicBondedOnly=false

По умолчанию эта опция может быть закомментирована, и безопасность может быть установлена по умолчанию на true.

Заключение

Следуя указанным шагам, вы сможете успешно настроить автоматическое переподключение вашего Bluetooth-устройства после его отключения. Это сэкономит вам время и улучшит опыт использования устройства. Если после всех настроек проблема сохраняется, возможно, вам потребуется обратиться к документации устройства или Bluetooth-адаптера для поиска специфичных рекомендаций.

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

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