Рассказываю, как установить и настроить 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
Из интересного видно:
Надеюсь Вам удалось настроить Ваше устройство, удачи и до новых встреч
Спасибо, что заглянули,
добавляйтесь в
Telegram
канал и будьте в курсе новинок.
Если Вам было интересно, можете поддержать автора