Как настроить Bluetooth в Linux?

время 15 МИН
звезда звезда звезда СРЕДНЕ
Bluetooth
Linux
Debian

Рассказываю, как установить и настроить Bluetooth на Linux. Все описанное проверял на Debian 12 и на Ubuntu 22.04. (в теории может работать и на других дистрибутивах Linux).

Так же расскажу про типовые проблемы, с которыми столкнулся и как их решал. Речь именно о USB Bluetooth адаптере, адаптеры через другие интерфейсы в данной статье не рассматриваются.

Установка sudo

Для дальнейшей работы нам понадобиться sudo. В Debian 12 по дефолту sudo не установлен, устанавливаем:

su -
apt install sudo -y
exit

Проверяем что работает:

sudo ls

Должно спросить пароль и вывести содержание текущего каталога. Если ошибка `...is not in the sudoers file . This incident will be reported.` значит Вашего пользователя надо добавить в sudo группу чтобы он мог выполнять команду sudo добавляем (не забудьте заменить тут_имя_вашего_пользователя на имя Вашего пользователя для которого хотите добавить sudo)

su -
usermod -aG sudo тут_имя_вашего_пользователя
id тут_имя_вашего_пользователя
exit

видим:

...,27(sudo),....

Проверяем что работает еще раз:

sudo ls

Должно спросить пароль и вывести содержание текущего каталога.

Все хорошо? Едем дальше!

Установка Bluetooth

Сначала убедимся что Bluetooth установлен:

sudo apt install bluetooth -y

Команда так же установит BlueZ - набор библиотек в Linux для работы с Bluetooth. Установка произойдет только если они еще не были установлены.

Проверяем что сервис запущен:

sudo service bluetooth status
● bluetooth.service - Bluetooth service
     Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; preset: enabled)
     Active: active (running) since Sat 2024-03-23 02:32:39 EDT; 1h 19min ago
       Docs: man:bluetoothd(8)
   Main PID: 90667 (bluetoothd)
     Status: "Running"
      Tasks: 1 (limit: 9384)
     Memory: 760.0K
        CPU: 49ms
     CGroup: /system.slice/bluetooth.service
             └─90667 /usr/libexec/bluetooth/bluetoothd
    

Видим что "Running" значит все ок, едем дальше.

Если нет, пробуем перезапустить:

sudo service bluetooth restart

И снова проверить статус.

Если снова не ок, логи можно посмотреть тут:

sudo journalctl -xeu bluetooth.service

и еще вот так:

sudo dmesg | grep Blue

Если есть ошибки, идем в Вашу любимую поисковую систему и ищем решение, а если ок, едем дальше

Настройка и диагностика Bluetooth

Втыкаем USB Bluetooth Dongle, если еще не воткнули, а если воткнули, можно на всякий случай выткнуть и воткнуть снова, проверяем, что устройство вообще обнаружено:

sudo lsusb

Должно быть что-то про Bluetooth, у меня это:

Bus 001 Device 002: ID 33fa:0001  USB2.0-BT

Выглядит не очевидно, тогда можно еще вот так:

sudo lsusb -v | grep Blue

У меня вывод выглядит так:

bDeviceProtocol         1 Bluetooth
bInterfaceProtocol      1 Bluetooth
bInterfaceProtocol      1 Bluetooth
bInterfaceProtocol      1 Bluetooth
bInterfaceProtocol      1 Bluetooth
bInterfaceProtocol      1 Bluetooth
bInterfaceProtocol      1 Bluetooth

И это хорошо, значит устройство обнаружено, если выдача пустая - устройство не обнаружено, тогда можно попробовать выткнуть и воткнуть устройство и снова проверить, должно появиться, а если снова нет? Можно попробовать включить необходимые модули:

sudo modprobe xhci_pci
sudo modprobe btusb
sudo modprobe bluetooth
sudo modprobe bnep
sudo modprobe rfcomm
sudo modprobe hidp

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

Если все же устройство найдено - продолжаем!

Далее воспользуемся утилитой hciconfig, поставляемой с установленным пакетом BlueZ проверяем, что Bluetooth устройство есть и включено(в состоянии UP)

hciconfig -a
hci0:	Type: Primary  Bus: USB
        BD Address: 04:7F:0E:63:7C:27  ACL MTU: 0:0  SCO MTU: 0:0
        DOWN
        RX bytes:165 acl:0 sco:0 events:9 errors:0
        TX bytes:273 acl:0 sco:0 commands:10 errors:0
        Features: 0xbf 0xee 0xcd 0xfe 0xdb 0xff 0x7b 0x87
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV3
        Link policy:
        Link mode: PERIPHERAL ACCEPT

Видим что hci0 есть - хорошо, но он DOWN

Пробуем запустить:

hciconfig hci0 up
Can't init device hci0: Connection timed out (110)

Можно просто вытащить и вставить Bluetooth (кто знает, как решить это программно? Может, перезапустить какой сервис? драйвер? Чирканите в Телегу)

Если же hci0 нет - выдача команды `hciconfig -a` пустая, вероятно, не включены нужные модули, включим (если еще не сделали это на предыдущем шаге):

sudo modprobe xhci_pci
sudo modprobe btusb
sudo modprobe bluetooth
sudo modprobe bnep
sudo modprobe rfcomm
sudo modprobe hidp

Пробуем запустить снова:

hciconfig hci0 up

Если все получилось, выдача будет пустой и ошибки больше не будет

Проверяем что UP:

hciconfig -a
hci0:	Type: Primary  Bus: USB
        BD Address: 04:7F:0E:63:7C:27  ACL MTU: 1021:9  SCO MTU: 255:4
        UP RUNNING PSCAN ISCAN
        RX bytes:879 acl:0 sco:0 events:76 errors:0
        TX bytes:4952 acl:0 sco:0 commands:76 errors:0
        Features: 0xbf 0xee 0xcd 0xfe 0xdb 0xff 0x7b 0x87
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV3
        Link policy: RSWITCH SNIFF
        Link mode: PERIPHERAL ACCEPT
        Name: 'aaa'
        Class: 0x7c0104
        Service Classes: Rendering, Capturing, Object Transfer, Audio, Telephony
        Device Class: Computer, Desktop workstation
        HCI Version:  (0xc)  Revision: 0x3
        LMP Version:  (0xc)  Subversion: 0x3
        Manufacturer: Barrot Technology Limited (2279)

Видим что UP RUNNING - радуемся, едем дальше!

Управление Bluetooth (bluetoothctl)

Далее нам понадобится еще одна утилита - bluetoothctl, она позволяет уже управлять спариванием устройств, соединением/разъединением, поиском и много еще чем и делать это все без графического интерфейса - чисто в консоли.

Запустим ее:

bluetoothctl

Выведет

Agent registered

Если есть ошибка No default controller available выходим из bluetoothctl напечатав exit.

Решение 1: возможно нужен sudo

sudo bluetoothctl

если больше ошибки нет, значит помогло. Тогда можно сделать чтоб работало без sudo, добавив своего пользователя в группу bluetooth, так:

sudo usermod -G bluetooth -a тут_имя_вашего_пользователя
Не забываем заменить тут_имя_вашего_пользователя на имя вашего пользователя

Решение 2: Еще возможно устройство заблокировано:

rfkill list all
2: hci0: Bluetooth
        Soft blocked: no
        Hard blocked: no

Покажет список, устройств, там где про Bluetooth должно быть везде No. Если Soft blocked: yes:

rfkill unblock bluetooth

или так:

rfkill unblock all

Если Hard blocked: Yes видимо где-то есть кнопка на ПК которую надо переключить. После этого убедимся что снова все No.

Включить Bluetooth

bluetoothctl power on
Changing power on succeeded

Показать информацию о Bluetooth-адаптере

bluetoothctl show
Controller 04:7F:0E:63:7C:27 (public)
        Name: ev-TVI7309X
        Alias: aaa
        Class: 0x00000104
        Powered: yes
        Discoverable: yes
        DiscoverableTimeout: 0x000000b4
        Pairable: yes
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
        UUID: Device Information        (0000180a-0000-1000-8000-00805f9b34fb)
        Modalias: usb:v1D6Bp0246d0540
        Discovering: no
        Roles: central
        Roles: peripheral
        Advertising Features:
ActiveInstances: 0x00 (0)
        SupportedInstances: 0x04 (4)
        SupportedIncludes: tx-power
        SupportedIncludes: appearance
        SupportedIncludes: local-name
        SupportedSecondaryChannels: 1M
        SupportedSecondaryChannels: Coded

Из интересного видно:

  • `Alias: aaa` под этим именем будет видно устройство другим
  • `Powered: yes` устройство включено
  • Discoverable: yes другие устройства могут обнаружить данное устройство
  • Pairable: yes устройство готово к сопряжению
  • Надеюсь Вам удалось настроить Ваше устройство, удачи и до новых встреч

    Спасибо, что заглянули,
    добавляйтесь в Telegram канал и будьте в курсе новинок.
    Если Вам было интересно, можете поддержать автора

    Что еще почитать?

    Что такое Jenkins-пайплайны?

    2023, 19 АВГУСТА
    время 5 МИН
    звезда звезда звезда СРЕДНЕ
    Jenkins
    CI/CD
    Автоматизация
    Рассказываю, как правильно готовить Jenkins. В этой статье разберем, как именно делать автоматизацию сборок в Jenkins, поделюсь лучшими практиками

    Как пишут программы?

    2023, 19 АВГУСТА
    время 4 МИН
    звезда звезда звезда ЛЕГКО
    Основы
    Расскажу о проессе разработке программного обеспечения
    на главную