Интернет через Bluetooth

Авторы:
Андрей Власовских
Вадим Цесько

Это небольшое HOWTO по использованию Bluetooth, в основном для подключения к Интернету через GPRS, что важно, когда ноут не дома.

Требуемый софт

Понадобятся следующие пакеты:

  • bluez
  • ppp

Включение передатчика

Встроенный передатчик включается способом, зависящим от харда и ACPI. На Eee PC со специализированным ядром из пакета zen-eee901-1G и скриптами для этого требуется:

$ echo 1 > /proc/acpi/asus/bluetooth

На IBM/Lenovo Thinkpad:

$ echo 1 > /proc/acpi/ibm/bluetooth

Стоит убедиться, что драйвер bluetooth действительно загрузился:

$ lsmod | grep ^bluetooth

Установка канала RFCOMM

RFCOMM — это эмуляция последовательного порта поверх Bluetooth (вроде бы используется протокол L2CAP, в своё время читал все спеки, но всё забыто).

Поверх этого виртуального порта устанавливается канал PPP. Модему телефона через этот порт посылаются команды дозвона и специальные команды для активизации GPRS. Затем, когда соединение установлено, начинается сеанс PPP, в рамках которого перегоняют пакеты IP. Этим занимается ppp.

Для начала нужно запустить bluetoothd, демона HCI Bluetooth:

# /etc/rc.d/bluetooth start

Проверить наличие поднятого интерфейса Bluetooth можно так:

$ hciconfig
hci0:   Type: USB
BD Address: 00:11:22:33:44:55 ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING PSCAN ISCAN 
RX bytes:980 acl:0 sco:0 events:29 errors:0
TX bytes:612 acl:0 sco:0 commands:29 errors:0

Здесь вы видите MAC-адрес передачика вашего хоста. Примерно это же скажет команда:

$ hcitool dev

Обнаружить другие передатчики Bluetooth поблизости можно так:

$ hcitool scan

Будут находиться только «видимые всем» передатчики. В списке передатчиков вам нужно найти MAC-адрес передачика модема, удалённого узла Bluetooth, через который вы будете устанавливать соединение PPP.

Как найти устройства, поддерживающие сервис DUN:

$ sdptool search DUN

Возможно, Ваше устройство не поддерживает профиль DUN (как, например, некоторые телефоны Philips), тогда имеет смысл использовать профиль SP, обеспечивающий тот же сервис доступа к виртуальному модему через последовательный порт:

$ sdptool search SP

sdptool — это утилита для работы с прикладным протоколом Bluetooth для обнаружения сервисов SDP.

В выводе sdptool нужно найти номер канала RFCOMM, используемого для работы с сервисом DUN. Его нужно указывать при создании устройства командой rfcomm.

Ещё одной возможностью убедиться в наличии связи является пингование на уровне L2CAP по MAC-адресу удалённого узла:

# l2ping 00:11:22:33:44:55

Далее нужно создать виртуальный последовательный порт. Этим управляет утилита rfcomm, конфигуратор RFCOMM в подсистеме Bluetooth ядра Linux. Создаётся порт следующим образом (допустим, что sdptool search DUN показала канал 4):

# rfcomm bind 0 00:11:22:33:44:55 4

Получаем новое устройство /dev/rfcomm0. С ним теперь связан канал 4. Если Ваш сервис висит на другом канале (см. использование sdptool), его нужно указать ещё одним параметром.

Вместо ручного создания канала можно запускать rfcomm при старте подсистемы Bluetooth, настроив канал в файле /etc/bluetooth/rfcomm.conf:

rfcomm0 {
    bind yes;
    device 00:11:22:33:44:55;
    channel 4;
    comment "My Bluetooth device;
}

Этот файл зачитывается через стартовый скрипт /etc/rc.d/bluetooth утилитой rfcomm. Чтобы в скрипте запускался rfcomm, нужно в конфиге /etc/conf.d/bluetooth прописать:

RFCOMM_ENABLE="true"

Деинициализация

# rfcomm release 0
# /etc/rc.d/bluetooth stop
$ echo 0 > /proc/acpi/asus/bluetooth

Установка соединения PPP

Для соединения PPP может понадобиться создавать устройство PPP:

# mknod /dev/ppp c 108 0

Наверное, это можно делать и автоматически, но пока так.

Для настройки соединения с провайдером ppp использует конфиги из /etc/peers. Например, файл для моего провайдера /etc/peers/provider1:

/dev/rfcomm1
115200
noauth
defaultroute
noipdefault
usepeerdns
user ""
connect "/usr/sbin/chat -t 30 -f /etc/ppp/chat-provider1"

Здесь строка connect указывает команду для установления соединения по последовательному каналу, поверх которого будет запущен сеанс PPP. Устройство,как можно заметить, указано в первой строке. Вот файл /etc/ppp/chat-provider1 переговоров с модемом для установления канала:

ECHO ON
"" ATZ
OK ATZE1
OK AT+CGDCONT=1,"ip","internet"
OK ATDT*99***1#
CONNECT

Здесь инициализация GPRS (AT+CGDCONT=1 и т. д.) и номер дозвона зависят от провайдера. Узнайте ваши параметры от своего провайдера.

Далее используются полезные утилиты pon и poff, входящие в пакет ppp. Эти утилиты принимают в качестве аргумента имя файла конфига из /etc/ppp/peers. По умолчанию они зачитывают файл provider. Вот так устанавливается соединение PPP поверх существующего канала RFCOMM:

# pon provider1

Возможно, часть всех этих действий можно проводить не от root, заведя отдельную группу и правильно расставив права. Пока я этим не занимался.

Ещё один момент. Мой провайдер использует DHCP. Для настройки DNS нужно в /etc/ppp/ip-up добавить копирование настроек разрешения адреса, поскольку по умолчанию ppp кладёт их к себе в каталог:

/bin/cp /etc/ppp/resolv.conf /etc/resolv.conf

Объединение двух устройств Bluetooth в пару

Для обмена данными два устройства должны быть объединены в пару. Это требуется для взаимной аутентификации. Чтобы объединить устройства в пару, можно воспользоваться программой bluez-simple-agent, идущей в составе bluez. Она запускается от root и ожидает запросов на объединение в пару. Её нужно запускать после старта демона bluetooth. При попытке создать канал связи компьютер с bluez-simple-agent и телефон запросят PIN-код. На всякий случай, файлы с созданными ключами хранятся в /var/lib/bluetooth/<MAC>/linkkeys.

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

Внешние ссылки

  • ArchWiki: Bluetooth
blog comments powered by Disqus

Options

Tags

  • howto
  • hardware
  • network
  • software
  • bluetooth

Content view

  • Source

Navigation

  • Index
  • Blog
  • All pages
  • Tags
  • Mercurial repo

Search page names

nqw powered

Creative Commons License Copyright © 2008-2010 spb-archlinux Group. Материалы вики доступны по лицензии Creative Commons.