Bluetooth (Русский)
Ссылки по теме
Bluetooth является стандартом для беспроводных соединений малой дальности сотовых телефонов, компьютеров и других электронных устройств. В Linux канонической реализацией стека протоколов Bluetooth является BlueZ.
Contents
Установка
Установите стек протоколов Bluetooth bluez и пакет bluez-utils, предоставляющий утилиту bluetoothctl
, из официальных репозиториев. Для чтения настроек и сопряжения по пин-коду используется демон dbus
, запускаемый автоматически при помощи systemd, а демон bluetooth
необходим для работы самого протокола Bluetooth.
Загрузите универсальный драйвер bluetooth, если это еще не сделано:
# modprobe btusb
Теперь запустите bluetooth сервис. Вы можете включить сервис в автозагрузку.
Настройка при помощи интерфейса командной строки
Bluetoothctl
Сопряжение с устройством в оболочке (shell) является одним из самых простых и надежных вариантов. То, что необходимо делать, зависит от используемых устройств и их входной функциональности. Последующие инструкции описывают сопряжение с устройством при помощи /usr/bin/bluetoothctl
лишь в общих чертах.
Запустите интерактивную команду bluetoothctl
. После этого можно ввести help
для получения списка доступных команд.
- Включите питание контроллера, введя
power on
. По умолчанию оно отключено. - Введите
devices
, чтобы увидеть MAC-адрес устройства для сопряжения. - Войдите в режим обнаружения устройств при помощи команды
scan on
, если нужного вам устройства нет в списке. - Включите агент при помощи
agent on
. - Введите
pair MAC-адрес
, чтобы осуществить сопряжение (работает автодополнение по tab). - При использовании устройства без PIN, возможно, потребуется подтверждение, прежде чем оно сможет успешно переподключиться. Для этого введите
trust MAC-адрес
. - Наконец, используйте
connect MAC-адрес
для установки соединения.
Ваша сессия будет выглядеть примерно так:
# bluetoothctl [NEW] Controller 00:10:20:30:40:50 pi [default] [bluetooth]# agent KeyboardOnly Agent registered [bluetooth]# default-agent Default agent request successful [bluetooth]# scan on Discovery started [CHG] Controller 00:10:20:30:40:50 Discovering: yes [NEW] Device 00:12:34:56:78:90 myLino [CHG] Device 00:12:34:56:78:90 LegacyPairing: yes [bluetooth]# pair 00:12:34:56:78:90 Attempting to pair with 00:12:34:56:78:90 [CHG] Device 00:12:34:56:78:90 Connected: yes [CHG] Device 00:12:34:56:78:90 Connected: no [CHG] Device 00:12:34:56:78:90 Connected: yes Request PIN code [agent] Enter PIN code: 1234 [CHG] Device 00:12:34:56:78:90 Paired: yes Pairing successful [CHG] Device 00:12:34:56:78:90 Connected: no
Чтобы устройство было активно после перезагрузки, необходимо правило udev:
/etc/udev/rules.d/10-local.rules
# Set bluetooth power up ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig hci0 up"
После цикла ухода/возвращения из спящего режима устройство можно включать автоматически, используя подобный сервис systemd:
/etc/systemd/system/bluetooth-auto-power@.service
[Unit] Description=Bluetooth auto power on After=bluetooth.service sys-subsystem-bluetooth-devices-%i.device suspend.target [Service] Type=oneshot #We could also do a 200 char long call to bluez via dbus. Except this does not work since bluez does not react to dbus at this point of the resume sequence and I do not know how I get this service to run at a time it does. So we just ignore bluez and force %i up using hciconfig. Welcome to the 21st century. #ExecStart=/usr/bin/dbus-send --system --type=method_call --dest=org.bluez /org/bluez/%I org.freedesktop.DBus.Properties.Set string:org.bluez.Adapter1 string:Powered variant:boolean:true ExecStart=/usr/bin/hciconfig %i up [Install] WantedBy=suspend.target
Настройка при помощи графических фронтендов
Следующие пакеты предоставляют графический интерфейс для изменения настроек Bluetooth.
GNOME Bluetooth
GNOME Bluetooth - форк старого пакета bluez-gnome, ориентированный на интеграцию со средой GNOME. Пакет gnome-bluetooth предоставляет бэкенд, gnome-shell - апплет для отображения состояния, а gnome-control-center - GUI-фронтенд настройки, к которому можно получить доступ, набрав Bluetooth на экране обзора или при помощи команды gnome-control-center bluetooth
.
Также вы можете напрямую выполнять следующие команды:
-
bluetooth-sendto
: послать файл на удаленное устройство -
bluetooth-wizard
: для сопряжения с новыми устройствами
Если вы используете Thunar и хотите добавить пункт Bluetooth в подменю Отправить на в меню свойств файлов, смотрите инструкции здесь (команда, которую необходимо добавить - bluetooth-sendto %F
).
Чтобы иметь возможность принимать файлы, необходимо установить пакеты obexfs и gnome-user-share. После этого вы можете зайти в Настройки -> Обмен для авторизации принимаемых через bluetooth файлов от сопряженных устройств.
BlueDevil
Инструментом Bluetooth в KDE является BlueDevil. Он может быть установлен с пакетом bluedevil, доступным в официальных репозиториях.
Удостоверьтесь, что демон bluetooth
запущен, как описано выше. У вас должны быть иконки Bluetooth и в Dolphin, и в системном трее, нажав на которые вы можете настроить BlueDevil и найти устройства Bluetooth. Также вы можете настроить BlueDevil через Системные Настройки KDE.
Blueman
Смотрите статью Blueman.
Использование Obex для отсылки и получения файлов
ObexFS
Другим вариантом, по сравнению с использованием пакетов KDE или Gnome Bluetooth, является Obexfs, который позволяет вам примонтировать ваш телефон и использовать его как часть файловой системы.
Установите пакет obexfs и примонтируйте поддерживаемые телефоны, выполнив:
$ obexfs -b MAC-адрес_устройства /точка_монтирования
Когда вы закончите, используйте следующую команду для отмонтирования устройства:
$ fusermount -u /точка_монтирования
Чтобы узнать об остальных опциях монтирования, загляните на http://dev.zuckschwerdt.org/openobex/wiki/ObexFs
Передача по ObexFTP
Если ваше устройство поддерживает сервис Obex FTP, но вы не желаете монтировать его, вы можете осуществлять передачу файлов на и с устройства, используя команду obexftp.
Чтобы послать файл на устройство, выполните команду:
$ obexftp -b MAC-адрес_устройства -p /путь/к/файлу
Чтобы получить файл с устройства, выполните команду:
$ obexftp -b MAC-адрес_устройства -g имя_файла
Obex Object Push
Если ваше устройство не поддерживает сервис Obex FTP, проверьте, поддерживает ли оно Obex Object Push.
# sdptool browse XX:XX:XX:XX:XX:XX
Просмотрите вывод: ищите Obex Object Push, запомните канал этого сервиса. Если он поддерживается, можно использовать пакет ussp-push для отсылки файлов на устройство:
# ussp-push XX:XX:XX:XX:XX:XX@КАНАЛ файл желаемое_имя_файла_на_телефоне
Примеры
Все примеры были перемещены в статью bluez4. Их необходимо проверить и исправить для использования с bluez5.
Решение проблем
gnome-bluetooth
Если вы видите это при попытке включить получение файлов в настройках bluetooth:
Bluetooth OBEX start failed: Invalid path Bluetooth FTP start failed: Invalid path
Установите пакет xdg-user-dirs и выполните:
$ xdg-user-dirs-update
Вы можете отредактировать пути, используя команду:
$ vi ~/.config/user-dirs.dirs
Bluetooth USB свисток
Если вы пользуетесь USB свистком, вы должны проверить, что ваш Bluetooth свисток распознан системой. Это можно сделать с помощью команды journalctl -f
, после того как вы воткнёте USB свисток (или заглянув в /var/log/messages.log
). Должно появиться что-то вроде следующего (ищите hci):
Feb 20 15:00:24 hostname kernel: [ 2661.349823] usb 4-1: new full-speed USB device number 3 using uhci_hcd Feb 20 15:00:24 hostname bluetoothd[4568]: HCI dev 0 registered Feb 20 15:00:24 hostname bluetoothd[4568]: Listening for HCI events on hci0 Feb 20 15:00:25 hostname bluetoothd[4568]: HCI dev 0 up Feb 20 15:00:25 hostname bluetoothd[4568]: Adapter /org/bluez/4568/hci0 has been enabled
Если вы получили только первые две строки, значит свисток распознан, но вам необходимо его активировать (поднять). Пример:
hciconfig -a hci0
hci0: Type: USB BD Address: 00:00:00:00:00:00 ACL MTU: 0:0 SCO MTU: 0:0 DOWN RX bytes:0 acl:0 sco:0 events:0 errors:0 TX bytes:0 acl:0 sco:0 commands:0 errors:
# hciconfig hci0 up
hciconfig -a hci0
hci0: Type: USB BD Address: 00:02:72:C4:7C:06 ACL MTU: 377:10 SCO MTU: 64:8 UP RUNNING RX bytes:348 acl:0 sco:0 events:11 errors:0 TX bytes:38 acl:0 sco:0 commands:11 errors:0
Если появляется ошибка вроде этой:
Operation not possible due to RF-kill
это ошибка может возникать либо из-за утилиты rfkill
, в таком случаевы можете решить проблему командой:
# rfkill unblock all
либо это может быть из-за того, что используется аппаратный выключатель на компьютере. Аппаратный выключатель bluetooth (по крайней мере, иногда) также контролирует доступ к bluetooth USB свисткам. Передвиньте/нажмите этот переключатель и попробуйте поднять устройство ещё раз.
Чтобы убедиться, что устройство было определено, вы можете использовать hcitool
, являющуюся частью bluez-utils
. Вы можете получить список доступных устройств, их идентификаторов и MAC-адресов, используя:
$ hcitool dev
Devices: hci0 00:1B:DC:0F:DB:40
Более детальная информация об устройстве может быть получена с помощью hciconfig
.
$ hciconfig -a hci0
hci0: Type: USB BD Address: 00:1B:DC:0F:DB:40 ACL MTU: 310:10 SCO MTU: 64:8 UP RUNNING PSCAN ISCAN RX bytes:1226 acl:0 sco:0 events:27 errors:0 TX bytes:351 acl:0 sco:0 commands:26 errors:0 Features: 0xff 0xff 0x8f 0xfe 0x9b 0xf9 0x00 0x80 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 Link policy: RSWITCH HOLD SNIFF PARK Link mode: SLAVE ACCEPT Name: 'BlueZ (0)' Class: 0x000100 Service Classes: Unspecified Device Class: Computer, Uncategorized HCI Ver: 2.0 (0x3) HCI Rev: 0xc5c LMP Ver: 2.0 (0x3) LMP Subver: 0xc5c Manufacturer: Cambridge Silicon Radio (10)
Logitech Bluetooth USB свисток
Существуют Logitech свистки (например, Logitech MX5000), которые могут работать в двух режимах: встроенный и HCI. Во встроенном режиме свисток эмулирует устройство USB так, что ваш компьютер думает, что вы используете обычную USB мышь/клавиатуру.
Если вы нажмёте маленькую красную кнопку на USB BT мини-приёмнике, включится другой режим. Удерживайте красную кнопку на BT свистке и вставьте его в компьютер, и через 3-5 секунд удерживания кнопки в системном трее появится иконка Bluetooth (Обсуждение).
hcitool scan: Устройство не найдено
- На некоторых ноутбуках Dell (например, Studio 15) вы должны переключить режим Bluetooth с HID на HCI. Установите пакет bluez-hid2hci, после чего udev будет делать это автоматически. В качестве альтернативы вы можете выполнить эту команду для переключения на HCI вручную:
# /usr/lib/udev/hid2hci
- Если устройство не появится, а на вашей машине есть операционная система Windows, попробуйте загрузить её и включить адаптер bluetooth в windows.
- Иногда также помогает эта простая команда:
# hciconfig hci0 up
rfkill unblock: не происходит разблокировка
Если ваше устройство по-прежнему программно блокируется и у вас запущен connman, попробуйте это:
$ connmanctl enable bluetooth
Мой компьютер невидим
Не можете найти ваш компьютер с вашего телефона? Включите PSCAN и ISCAN:
# enable PSCAN and ISCAN $ hciconfig hci0 piscan # check it worked
$ hciconfig
hci0: Type: USB BD Address: 00:12:34:56:78:9A ACL MTU: 192:8 SCO MTU: 64:8 UP RUNNING PSCAN ISCAN RX bytes:20425 acl:115 sco:0 events:526 errors:0 TX bytes:5543 acl:84 sco:0 commands:340 errors:0
Попробуйте изменить класс устройства в /etc/bluetooth/main.conf, как здесь:
# Default device class. Only the major and minor device class bits are # considered. #Class = 0x000100 (from default config) Class = 0x100100
Это было единственное решение, сделавшее мой компьютер видимым для телефона.
Не происходит сопряжение с клавиатурой Logitech
Если вам не выдается ключ доступа при попытке сопряжения клавиатуры Logitech, наберите следующую команду:
# hciconfig hci0 sspmode 0
Если после сопряжения клавиатура по-прежнему не подключается, проверьте вывод hcidump -at
. Если в нем содержатся повторяющиеся подключения-отключения, как в следующем сообщении:
status 0x00 handle 11 reason 0x13 Reason: Remote User Terminated Connection
значит, на данный момент единственным решением является установка старого стека Bluetooth.
Профили HSP/HFP
bluez5 не поддерживает профили HSP/HFP (гарнитура телефонии для TeamSpeak, Skype и т.д.). Для получения дополнительной информации смотрите обсуждение bluez4.
До тех пор, пока поддержка не реализована, необходимо откатиться до bluez4 и установить пакет pulseaudio-bluez4 из AUR или же установить pulseaudio-git из AUR, в котором появилась нативная поддержка.