Bluetooth (Русский)

From ArchWiki
Jump to: navigation, search
Состояние перевода: На этой странице представлен перевод статьи Bluetooth. Дата последней синхронизации: 2015-09-30. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Bluetooth является стандартом для беспроводных соединений малой дальности сотовых телефонов, компьютеров и других электронных устройств. В Linux канонической реализацией стека протоколов Bluetooth является BlueZ.

Установка

Установите пакеты bluez и bluez-utils. Пакет bluez предоставляет стек Bluetooth протокола, а пакет bluez-utils предоставляет утилиту bluetoothctl.

Загрузите универсальный драйвер bluetooth, если это еще не сделано:

# modprobe btusb

Теперь запустите bluetooth.service systemd юнит. Вы можете включить сервис в автозагрузку.

Примечание:
  • По умолчанию демон bluetooth разрешит использовать устройства bnep0 только пользователям, входящим в группу lp. Удостоверьтесь, что учетная запись обычного пользователя добавлена в нее, если вы намереваетесь подключаться по bluetooth. Вы можете изменить группу, требуемую для этого, в файле /etc/dbus-1/system.d/bluetooth.conf.
  • Некоторые адаптеры Bluetooth встроены в платы Wi-Fi (например, Intel Centrino). В этих случаях необходимо, чтобы сперва была включена плата Wi-Fi (обычно при помощи клавиш(и) на ноутбуке), после чего ядро сможет увидеть адаптер Bluetooth.
  • Некоторые адаптеры Bluetooth (например, Broadcom) конфликтуют с сетевыми адаптерами. В этом случае вам необходимо удостовериться, что устройство 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 — это Bluetooth утилита в GNOME. Пакет gnome-bluetooth предоставляет бэкенд, gnome-shell — апплет для отображения состояния, а gnome-control-center — GUI-фронтенд настройки, к которому можно получить доступ, набрав Bluetooth на экране обзора или при помощи команды gnome-control-center bluetooth. Также вы можете запустить команду bluetooth-sendto, чтобы напрямую послать файл на удаленное устройство.

Чтобы получать файлы, вы должны установить пакет gnome-user-share. Затем вы можете перейти в Settings -> Sharing, чтобы авторизовать принимаемые файлы со спаренных устройств по Bluetooth.

Совет: Если вы используете Thunar и хотите добавить пункт Bluetooth в подменю Отправить на в меню свойств файлов, смотрите инструкции здесь (команда, которую необходимо добавить — bluetooth-sendto %F).

BlueDevil

BlueDevil — это Bluetooth утилита в KDE. Он может быть установлен с пакетом bluedevil (KDE Plasma 5) или bluedevil4[ссылка недействительна: package not found] (KDE4).

Если иконка Bluetooth не отображается в Dolphin и в системном трее, добавьте её вручную. Вы можете настроить Bluedevil, чтобы он искал устройства Bluetooth при нажатии на иконку. Также вы можете настроить BlueDevil через Параметры Системы KDE.

Blueberry

Blueberry — это альтернативный фронтэнд для GNOME Bluetooth, который работает во всех окружениях рабочего стола. Его можно установить с пакетом blueberry. Он предоставляет утилиту настройки (blueberry) и апплет системного трея (blueberry-tray).

Blueman

Смотрите статью Blueman.

Использование Obex для отсылки и получения файлов

ObexFS

Другим вариантом, по сравнению с использованием пакетов KDE или Gnome Bluetooth, является Obexfs, который позволяет вам примонтировать ваш телефон и использовать его как часть файловой системы.

Примечание: Для использования ObexFS необходимо устройство, которое поддерживает сервис Obex FTP

Установите пакет obexfs и примонтируйте поддерживаемые телефоны, выполнив:

$ obexfs -b MAC-адрес_устройства /точка_монтирования

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

$ fusermount -u /точка_монтирования

Чтобы узнать об остальных опциях монтирования, загляните на http://dev.zuckschwerdt.org/openobex/wiki/ObexFs

Примечание: Убедитесь, что устройство bluetooth, которое вы монтируете, не настроено так, чтобы монтироваться в режиме только для чтения. Это должно настраиваться в настройках на самом устройстве. Если оно примонтировано в режиме только для чтения, вы можете столкнуться с ошибкой прав доступа при попытке передачи файлов на устройство

Передача по 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.

Решение проблем

bluetoothctl

Если bluetoothctl не может найти ни один контроллер, возможно заблокировано bluetooth устройство. Попробуйте разблокировать его с помощью rfkill:

# rfkill unblock bluetooth

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 (Обсуждение).

В качестве альтернативы, вы можете установить пакет bluez-hid2hci. Когда вы подключите ваш Logitech донгл, он автоматически переключится.

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
Примечание: Проверьте DiscoverableTimeout и PairableTimeout в /etc/bluetooth/main.conf

Попробуйте изменить класс устройства в /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 и т.д.). Вам нужно установить PulseAudio (>= версии 6) или другое приложение, которое реализует HSP/HFP самостоятельно.

Проблемы с Thinkpad Bluetooth Laser Mouse

Если вы чувствуете, что ваша Thinkpad Bluetooth Laser Mouse быстро подключается, а затем (через несколько миллисекунд) снова отключается каждые несколько секунд (когда вы двигаете мышь или нажимаете кнопку), попробуйте спарить её с пин кодом 0000, вместо того, чтобы спаривать её без пин кода.

Lite-On Broadcom устройства

Некоторые из этих устройств необходимо прошивать при загрузке. Прошивка не предоставляется, но может быть сконвертирована из .hex файла для Microsoft Windows в .hcd с помощью hex2hcd.

Чтобы получить нужный .hex файл, попробуйте поискать устройство по коду vendor:product (производитель:продукт), который отобразила командой lsusb, например:

   ...
   Bus 002 Device 004: ID 04ca:2006 Lite-On Technology Corp. Broadcom BCM43142A0 Bluetooth Device
   ...

В качестве альтернативы, вы можете загрузиться в Windows (можете использовать виртуальную машину) и узнать название прошивки из утилиты Диспетчер Устройств.

Когда вы получите .hcd файл, скопируйте его в /lib/firmware/brcm/BCM.hcd - dmesg знает, что по этому пути лежит прошивка и в вашем случае он может меняться, поэтому проверьте вывод команды dmesg, чтобы убедиться в этом. Затем прошейте файл .hcd с помощью утилиты brcm_patchram_plus, предоставляемой пакетом brcm_patchram_plus-gitAUR[ссылка недействительна: сохранено в aur-mirror]. Загрузите модуль btusb:

# modprobe btusb

Убедитесь, что устройство распознано в качестве bluetooth устройства. Замените 04ca 2006 на ваши значения vendor и product:

# echo '04ca 2006' > /sys/bus/usb/drivers/btusb/new_id
    

Включите устройство:

# hciconfig hci0 up

Прошейте прошивку:

# brcm_patchram_plus_usb --patchram fw-04ca_2006.hcd hci0

Теперь устройство должно быть доступно. Смотрите BBS#162688 для информации о том, как сделать эти изменения постоянными.