Работа с мобильными телефонами через bluetooth

Материал из Gentoo Linux Wiki

Перейти к: навигация, поиск
Вернуться в раздел железо

Содержание

[править] Настройка драйверов

[править] Введение

Это HOWTO поможет вам установить и настроить передачу данных по каналу bluetooth с вашим телефоном.Будет рассмотрена конфигурация ядра,установка userland демонов и клиентских программ.Итак,начнем.

[править] Поддерживаемые устройства

Список всех поддерживаемых устройств можно было найти на этойстранице. К сожалению, сейчас на автора наехали, и он удалил свой список. Вот список устройств,которые поддерживаются на момент написания этого документа:

Bluetooth USB Адапторы

(Device - Chipset - Spec.)

  1. Ericsson Application Toolkit - Ericsson - 1.0b
  2. Ericsson Development Kits - Ericsson - 1.0b
  3. Bluefrog Development Kits - Silicon Wave -
  4. Minikits based on STLC2410 - ST - 1.1
  5. Minikits based on STLC2415 - ST - 1.1
  6. CSR Casira USB Adapter - CSR - 1.1
  7. CSR Microsira USB Dongle - CSR - 1.1
  8. TDK USB Adaptor - CSR - 1.1
  9. 3Com USB Dongle - CSR - 1.1
  10. Intel USB Adapter - CSR - 1.1
  11. Brain Boxes BL-554 - CSR - 1.1
  12. COM1 USB Module - CSR - 1.1
  13. Anycom USB Adapter - CSR - 1.1
  14. Anycom USB-100 - CSR - 1.1
  15. D-Link DBT-120 (Rev B3) - CSR 1.1
  16. D-Link DBT-120 (Rev B4) - CSR - 1.1
  17. Gigabyte GN-BTD01 - CSR - 1.1
  18. Linksys USBBT100 - CSR - 1.1
  19. EPoX BT-MD01 - CSR - 1.1
  20. EPoX BT-DG02 - CSR - 1.1
  21. EPoX BT-DG03 - CSR - 1.1
  22. MSI MS-6967 - CSR - 1.1
  23. Microsoft Wireless Transceiver - CSR - 1.1
  24. Sony PCGA-BA1 - CSR - 1.1
  25. Deluo USB Dongle - CSR - 1.1
  26. Digicom Palladio USB Dongle - CSR - 1.1
  27. BlueTake USB Dongle BT007S - CSR - 1.1
  28. BlueTake USB Dongle BT007X - CSR - 1.1
  29. BlueTake USB Dongle BT009S - CSR - 1.1
  30. BlueTake USB Dongle BT009V - CSR - 1.1
  31. BlueTake USB Dongle BT009X - CSR - 1.1
  32. i-Tec Bluetooth USB Dongle - CSR - 1.1
  33. Sitecom USB Dongle - CSR - 1.1
  34. IVT USB Dongle - CSR - 1.1
  35. AboCom USB Dongle - CSR - 1.1
  36. Samsung USB Dongle - CSR - 1.1
  37. CCnC USB Dongle - CSR - 1.1
  38. DSE XH4104 USB Adapter - Transilica - 1.1
  39. Abe UB20 USB Bluetooth Dongle - RTX - 1.1


Bluetooth PCMCIA Адапторы

  1. Billinton PCMCIA Bluetooth Class 1 - CSR - 1.1 (hciattach /dev/ttyS4 bcsp)

[править] Конфигурирование ядра

[править] Для ядер серии 2.6

Рассмотрим процесс конфигурирования 2.6 ядра.Большинство Bluetooth адаптеров используют USB порт,то есть USB должен быть включен. Собирать поддержку модулями или встраивать в ядро это ваше личное дело.

Device Drivers  --->
  Networking Support  --->
    <*> Bluetooth subsystem support  --->
        <*> L2CAP protocol support
        <*> SCO links support
        <*> RFCOMM protocol support
            [*] RFCOMM TTY support
        <*> BNEP protocol support
            [*] Multicast filter support
            [*] Protocol filter support
              Bluetooth device drivers  --->
                <*> HCI USB driver
                    [*] SCO (voice) support
USB support  --->
   <*> Support for Host-side USB
   --- USB Host Controller Drivers
   <M> EHCI HCD (USB 2.0) support
   <M> OHCI HCD support
   <*> UHCI HCD (most Intel and VIA) support
   --- USB Device Class drivers
   <*> USB Audio support

Теперь необходимо собрать ядро и загрузить его.После успешной загрузки выполним команду:

# cat /proc/bus/usb/devices | grep -e^[TPD] | grep -e Cls=e0 -B1 -A1
T:  Bus=02 Lev=02 Prnt=03 Port=00 Cnt=01 Dev#=  4 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=e0(unk. ) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0a12 ProdID=0001 Rev= 5.25 

ЗАМЕЧАНИЕ: Cls=e0(unk. ) идентифицирует bluetooth адаптер.

[править] Для ядер серии 2.4

Конфигурирование этой серии ядер мало чем отличается от конфигурирования ядер 2.6.х. Надо заметить, что желательно обновить ядро до наиболее свежей версии (сейчас 2.4.31). В противном случае могут быть очень неприятные глюки, вроде зависания соединения Bluetooth. В любом случае, вам необходимо включить по крайней мере эти опции :

<M> Bluetooth subsystem support
<M> L2CAP protocol support
<M> RFCOMM protocol support
  <*> RFCOMM TTY support
Bluetooth device drivers ---> <M> HCI USB driver

Ну и конечно же поддержку USB,если у вас USB Bluetooth адаптер.

[править] Установка и настройка BlueZ

[править] Установка пакетов

Теперь когда адаптер обнаружен ядром,нам необходим интерфейс,который помогал бы программам взаимодействовать с bluetooth устройством.Есть несколько стеков для работы с bluetooth,но мы будем использовать официальный стек протокола - BlueZ.Нам необходимо установить следующие пакеты:

*  net-wireless/bluez-libs
     Последняя доступная версия: 2.10
     Размер файлов: 262 kB
     Домашняя страница:    http://bluez.sourceforge.net/
     Описание: Bluetooth Userspace Libraries
     Лицензия:     GPL-2

*  net-wireless/bluez-utils
     Последняя доступная версия: 2.10
     Размер файлов: 276 kB
     Домашняя страница:    http://bluez.sourceforge.net/
     Описание: bluetooth utilities
     Лицензия:     GPL-2 

ЗАМЕЧАНИЕ: В зависимости от ваших целей,может потребоваться установка дополнительных пакетов BlueZ.

ВАЖНО: Некоторые устройства,которые не представлены здесь,могут требовать пакет net-wireless/bluez-bluefw.Этот момент пока не рассмотрен.

ВНИМАНИЕ: Не устанавливайте пакеты bluez-kernel или bluez-sdp, так как они могут "поломать" bluez-utils!

[править] Конфигурирование BlueZ

После установки пакетов bluez-libs и bluez-utils,введите hciconfig.Должно отобразиться что-то типа этого:

# hciconfig
hci0:   Type: USB
   BD Address: 00:10:60:A2:DD:2A ACL MTU: 192:8  SCO MTU: 64:8
   DOWN
   RX bytes:131 acl:0 sco:0 events:18 errors:0
   TX bytes:565 acl:0 sco:0 commands:17 errors:0 

Скорее всего вы увидите,что сервис не запущен,ведь мы его не отконфигурировали.Так давайте сделаем это.Ниже представлен рабочий файл конфигурации.За дополнительной информацией man hcid.conf.

[править] Правка конфигурационных файлов

FILE: /etc/bluetooth/hcid.conf

#
# Файл конфигурации демона HCI.
#

# Опции HCId
options {
       # Автоматически инициализировать новые устройства
       autoinit yes;

       # Режим менеджера безопасности
       #   none - менеджер отключен
       #   auto - использовать локальный PIN для входящих соединеий
       #   user - всегда справшивать PIN
       #рекомендуем установить авто
       security auto;

       #Режим сопряжения
       #   none  - сопряжение отключено
       #   multi - разрешить сопряжение с уже сопряженными устройствами
       #   once  - Pair once and deny successive attempts
       pairing multi;

       # PIN helper
       pin_helper /etc/bluetooth/pin;

       # D-Bus PIN helper
       #dbus_pin_helper;
}

# Стандартные настройки для HCI устройств
device {
       # Имя устройства
       #   %d - id устройства
       #   %h - имя хоста
       name "TuxBox";

       # класс устройства
       class 0x100;

       # стандартный тип пакета
       #pkt_type DH1,DM1,HV1;

       # Inquiry and Page scan
       iscan enable; pscan enable;

       # Default link mode
       #   none   - no specific policy
       #   accept - always accept incoming connections
       #   master - become master on incoming connections,
       #            deny role switch on outgoing connections
       #
       #lm accept,master;
       #
       lm accept;

       # Default link policy
       #   none    - no specific policy
       #   rswitch - allow role switch
       #   hold    - allow hold mode
       #   sniff   - allow sniff mode
       #   park    - allow park mode
       #
       #lp hold,sniff;
       #
       lp rswitch,hold,sniff,park;

       # Authentication and Encryption
       auth enable;
       encrypt enable;
}

Теперь отредактируем файл /etc/bluetooth/pin.Приведите его к такому виду:

#!/bin/sh
echo "PIN:1234"

Теперь необходимо установить права на выполнение этого файла:

#chmod a+rx /etc/bluetooth/pin


ПРИМЕЧАНИЕ: При сопряжении телефон будет спрашивать у компьютера PIN-код.И чтобы ответить телефону будет вызываться программа указаная в pin_helper.В нашем случае это скрипт,который автоматически ответит телефону,что пин 1234.

[править] Запуск и проверка сервиса

С правкой конфигов окончили. Теперь самое время запустить сервис и добавить его в автозагрузку(aka default runlevel):

# /etc/init.d/bluetooth start
# rc-update add bluetooth default

Давайте проверим запустился ли сервис:

# ps -ae | grep hcid     
26050 ?        00:00:00 hcid
# ps -ae | grep sdpd
26054 ?        00:00:00 sdpd

Сервис работает.Если же нет, то отключите и включите адаптер и перезапустите сервис.

#/etc/init.d/bluetooth restart

При успешной инициализации вы должны получить что-то типа этого:

# hciconfig
hci0:   Type: USB
   BD Address: 00:10:60:A2:DD:2A ACL MTU: 192:8  SCO MTU: 64:8
   UP RUNNING PSCAN ISCAN AUTH ENCRYPT
   RX bytes:408 acl:0 sco:0 events:21 errors:0
   TX bytes:574 acl:0 sco:0 commands:20 errors:0

# hciconfig -a
hci0:   Type: USB
   BD Address: 00:10:60:A2:DD:2A ACL MTU: 192:8  SCO MTU: 64:8
   UP RUNNING PSCAN ISCAN AUTH ENCRYPT
   RX bytes:408 acl:0 sco:0 events:21 errors:0
   TX bytes:574 acl:0 sco:0 commands:20 errors:0
   Features: 0xff 0xff 0x0f 0x00 0x00 0x00 0x00 0x00
   Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
   Link policy: RSWITCH HOLD SNIFF PARK
   Link mode: SLAVE ACCEPT
   Name: 'Blackhat BlueZ'
   Class: 0x000100
   Service Classes: Unspecified
   Device Class: Computer, Uncategorized
   HCI Ver: 1.1 (0x1) HCI Rev: 0x20d LMP Ver: 1.1 (0x1) LMP Subver: 0x20d
   Manufacturer: Cambridge Silicon Radio (10) 

ЗАМЕЧАНИЕ: Запустив hciconfig -a, мы можем увидеть параметры которые были указаны в конфигурационных файлах.

[править] Использование Bluetooth

[править] Обнаружение устройств

Теперь мы можем попытаться обнаружить bluetooth устройства.Для этой цели будем использовать hcitool.

Для проверки локального устройства:

# hcitool dev
Devices:
  hci0    00:10:60:A2:DD:2A


Для сканирования удаленных устройств:

# hcitool scan
Scanning ...
  00:10:60:A3:CB:41   Grayhat


Для исследования удаленных устройств:

# hcitool inq
Inquiring ...
  00:10:60:A3:CB:41   clock offset: 0x5579    class: 0x72010c


Теперь нам необходимо осуществить сопряжение bluetooth устройств.Это можно сделать средствами встроенными в телефон.В качестве PIN-кода используйте код из/etc/bluetooth/pin.Теперь устройства сопряжены.Попробуем пингануть телефон :

# l2ping 00:10:60:A3:CB:41
Ping: 00:10:60:A3:CB:41 from 00:10:60:A2:DD:2A (data size 20) ...
20 bytes from 00:10:60:A3:CB:41 id 200 time 69.85ms
20 bytes from 00:10:60:A3:CB:41 id 201 time 9.97ms
20 bytes from 00:10:60:A3:CB:41 id 202 time 56.86ms
20 bytes from 00:10:60:A3:CB:41 id 203 time 39.92ms
4 sent, 4 received, 0% loss/bluetooth/hcid.conf were set correctly

[править] Установка OpenOBEX

Для передачи файлов нам потребуется OpenOBEX.Это протокол сессий который необходим нам для передачи файлов.Для его установки делаем

#emerge openobex

Собственно вся установка к этому и сводится.

[править] Клиенты для передачи файлов

[править] Работа с Bluetooth в KDE

Для любителей KDE существует пакет kdebluetooth.Сейчас он находиться в разработке,и поэтому там достаточно много багов и недоработок.Но это ведь не препятствие?;)Давайте его установим:

#emerge kdebluetooth

Возможно у вас пакет будет замаскирован по KEYWORDS. В этом случае просто добавьте соответствующую строку в /etc/portage/package/keywords echo "net-wireless/kdebluetooth ~x86 ~amd64" >> /etc/portage/package.keywords. однако следует заметить, что ~ ветке возможны проблемы с сопряжением устройств.

Размер дистрибутива 1 мегабайт.После его установки вам станут доступны следующие приложения:

  • kbluetoothd - это метасервер.Необходим для работы остальных приложений пакета.
  • kbtobexclient - передача файлов по bluetooth.
  • kbthandsfree - позволяет использовать компьютер как bluetooth-гарнитуру.

Кроме того вы получаете доступ к функциям телефона через Konqueror с помощью KParts. Наберите bluetooth:/ в строке адреса, и вы увидите доступные сервисы и устройства.

[править] Работа с Bluetooth в Gnome

Для работы с Bluetooth из среды GNOME мы будем использовать пакет gnome-bluetooth.Для начала его нужно установить командой : emerge gnome-bluetooth Теперь зайдитев GNOME под обычным пользователем и выполните: gnome-bluetooth-admin(если у вас GNOME 2.4) и gnome-bluetooth-manager(если у вас GNOME 2.8). Эта команда запустит графическую версию hcitool.Для поиска устройств используйте кнопку Scan.Для передачи файлов на телефон используйте виртуальную ФС bluetooth:///.Просто введите это в адресной строке Nautilus'а.

[править] Передача файлов с компьютера на телефон

Если вам нужна консольная утилита для передачи файлов на мобильный телефон, то вам подойдет пакет obexftp.

# emerge obexftp

Теперь научимся передавать файлы с компьютера на ваш мобильный телефон:

# obexftp -b 00:11:22:33:44:55 -p ~/test

где 00:11:22:33:44:55 - это mac-адрес телефона, на который вы передаете файл, а ~/test - это путь к файлу, который вы передаете. Узнать mac-адрес можно утилитой:

# hcitool scan

[править] Передача файлов с телефона на компьютер

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

# emerge sobexsrv

В этот пакет входят скрипты для запуска сервера как сервиса Gentoo, поэтому запускается все просто:

# /etc/init.d/sobexsrv start

Перед этим лучше запускать сервис bluetooth, т.к. sobexsrv использует sdpd. Но перед запуском немного подправим файл конфигурации /etc/conf.d/sobexsrv.Стоит поменять в нем следующие строки:

USER="имя_пользователя_от_которого_запускается_демон"
GROUP="группа"
INBOX="путь_к_директории_куда_класть_принятые_файлы"

[править] Автоматизация запуска приложений

Возможно автоматизировать запуск всех необходимых сервисов при включении bluetooth адаптера. Напимер, у меня он включается кнопкой на передней панели ноутбука. При установке net-wireless/bluez-utils устанавливаются необходимые правила для udev /etc/udev/rules.d/70-bluetooth.rules, а также скрипт /lib/udev/bluetooth.sh, который можно подправить следующим образом:

#!/bin/sh
#
# bluetooth.sh: udev external RUN script
#
# Copyright 2005-2006 Henrik Brix Andersen <brix@gentoo.org>
# Distributed under the terms of the GNU General Public License v2

script=/etc/init.d/bluetooth
script_srv=/etc/init.d/sobexsrv

[ ! -e "$script_srv" ] && logger "No obex server installed (sobexsrv)"

# Find out where sysfs is mounted. Exit if not available
sysfs=`grep -F sysfs /proc/mounts | awk '{print $2}'`
if [ "$sysfs" = "" ]; then
    echo "sysfs is required"
    exit 1
fi

if [ ! -d $sysfs/class/bluetooth/hci[0-9]* ]; then
    if $script --quiet status; then
	$script stop
	$script_srv stop
    fi
else
    if ! $script --quiet status; then
	$script start
	$script_srv start
    fi
fi

Теперь при включении bluetooth-устройства будут запускаться все необходимые сервисы, а при отключении - останавливаться.


Посоветовать или спросить,
пожаловаться или поблагодарить
можно на странице обсуждений.
Обсуди эту статью на форуме Gentoo.ru

Личные инструменты