Bluetooth (Русский)

From ArchWiki
Revision as of 12:15, 15 October 2014 by Kycok (talk | contribs) (GNOME Bluetooth: updated translation)
Jump to: navigation, search

zh-CN:Bluetooth

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

Установка

Установите стек протоколов Bluetooth bluez и пакет bluez-utils, предоставляющий утилиту bluetoothctl, из официальных репозиториев. Для чтения настроек и сопряжения по пин-коду используется демон dbus, запускаемый автоматически при помощи systemd, а демон bluetooth необходим для работы самого протокола Bluetooth.

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

# modprobe btusb

Для запуска systemd-сервиса bluetooth воспользуйтесь командой:

# systemctl start bluetooth

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

# systemctl enable bluetooth
Примечание: По умолчанию демон 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 больше не предоставляет апплета для системного лотка. Форк этого апплета можно установить с пакетом gnome-bluetooth-applet-gitAUR, однако, по состоянию на апрель 2014 г., этот пакет не компилируется

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 необходимо устройство, которое поддерживает сервис Obex FTP

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

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

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

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

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

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

Передача по ObexFTP

Если ваше устройство поддерживает сервис Obex FTP, но вы не желаете монтировать его, вы можете осуществлять передачу файлов на и с устройства, используя команду obexftp.

Примечание: Если вы прежде уже устанавливали пакет obexfs, 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 (или заглянув в /var/log/messages.log), когда подключаете ключ USB. Должно появиться что-то вроде следующего (ищите hci):

# tail -f /var/log/messages.log
 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 (по крайней мере, иногда) также контролирует доступ к ключам 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
Примечание: Проверьте 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 и т.д.). Для получения дополнительной информации смотрите обсуждение bluez4.

До тех пор, пока поддержка не реализована, необходимо откатиться до bluez4 и установить пакет pulseaudio-bluez4AUR из AUR.