Подключение КПК через Bluetooth.
Ничего революционного опять же я не напишу, хотя возможно несколько сильнее разжую некоторые моменты. Итак. Как же это работает?
Для работы odccm необходимо создать сетевой интерфейс, к которому он сумеет подцепиться. В случае USB его создаёт модуль ядра, в сучае bluetooth несколько сложнее. Надо создать serial-соединения и подсунуть его в ppp, который и создасть нам нужный иинтерфейс. Звучит всё просто, но на практике выходят косяки. Косяк первый и главный: "Не все блютус одинаково полезны". Речь идёт естественно не о производителях самих железок, а о блютус стеке. Если у вас broadcom-овский стек, то всё будет легко и просто, прямо как написали в мануале, а вот если производитель вашего КПК поскупился и оставил стек от Майкрософт, подперев его самописными подпорками, тут и начинается веселье. Eten-X500, а именно на нём всё проверялось, является типичным представителем такого симбиоза встроенного стека от майкрософт и самописного блютуз менеджера. Зная, что в последнее время производители КПК пытаются любыми правдами и неправдами снизить стоимость устройства, следует ожидать, что подобная картина будет всё более повсемесной. Рядовому пользователю это грозит тем, что вместо одного полноценного и законченого интерфейса в системе присутствуют два "кастрированых". Причём один обычно спрятан от пользователя. Каждый производитель, пустившийся в написание своего менедженра bluetooth реализует только тот минимум, без которого просто нельзя продать кпк. Зато туда вставляется куча красочных картинок, толку от которых сами понимаете. Родной убогий и неказистый стек винды иногда прячется от пользователя простым непрописыванием в реестре ярлычка "Bluetooth" в настройках. При помощи любого редактора реестра этот значёк можно показать.
Вся эта прилюдия написана к тому, что работу по настройке прийдётся вести в обоих менеджерах, т.к. какждый из них видить только часть протоколов, и вместе они могут охватить больше. Если ваш менеджер не видит протокола последовательного порта в PC. Это не значит, что его нет. Просто ваш менеджер может о нём не знать. Или знать, но молчать, что чаще всего. Будем делать больше тестов. Начнём.
Настраиваем Bluetooth как таковой.
Команда SynCE пишет, что необходимы следующие пакеты:
bluez-libs
bluez-utils
bluez-sdp
bluez-pan
Но на практике, по крайней мере в Gutsy, оказалось, что достаточно поставить bluez-utils, там всё что надо подтянется депенденсами.
apt-get install bluez-utils
Это поставит всё необходимое, но этого не достаточно. В дополнение надо доставить софт для KDE или Gnome в зависимости от того, что вы используете. Для синхронизации это не требуется, но зато вы будете видеть активность bluetooth соединения и получите в придачу кучу полезностей, в виде обмена файлами и пр.
apt-get install kdebluetooth
или
apt-get install gnome-bluetooth gnome-vfs-obexftp
Что касается гнома, то тут я не могу проверить. Не пользую. Попробуйте, кто фанат GTK и, если что, дополним этот опус.
Дальше лезем в /etc/bluetooth/hcid.conf Там есть два блока, options и device. По очереди. Что мы имеем в options:
# HCId options
options {
# Automatically initialize new devices
autoinit yes;
# Security Manager mode
# none - Security manager disabled
# auto - Use local PIN for incoming connections
# user - Always ask user for a PIN
#
security auto;
# Pairing mode
# none - Pairing disabled
# multi - Allow pairing with already paired devices
# once - Pair once and deny successive attempts
pairing multi;
# Default PIN code for incoming connections
passkey "4321";
}
C autoinit всё понятно, а вот security прокоментирую. None ставить не советую. Это конечно не публикация пароля рута на баш.орге, но всё равно неприятно. auto или user на ваш выбор. В случае auto в качестве PIN для спаривания всегда будет подставляться то, что вы напишете в passkey несколькими строчками ниже. В случае user PIN будет спрашиваться. Я остановился на auto потому, что это позволяет подсоединится даже из туалета, не набирая пин на клавиатуре компа, который стоит в другой комнате.
Дальше, блок device: Там надо проверить значение class. И поставить одно из предложеных ниже по вкусу. Фактически, работает любой из трёх, но это повлияет на то, какую иконку вы увидите на КПК.
Для рабочей станции: 0xbe0104
Для сервера: 0xbe0108
Для ноутбука: 0xbe010c
Не забываем подключить Bluetooth адапрер если он внешний. Перегружаем демона Bluetooth
>/etc/init.d/bluetooth restart
Пишем в консоле:
>hciconfig -a
hci0: Type: USB
BD Address: 00:11:67:1C:69:C7 ACL MTU: 678:8 SCO MTU: 48:10
UP RUNNING PSCAN ISCAN
RX bytes:976 acl:0 sco:0 events:28 errors:0
TX bytes:612 acl:0 sco:0 commands:28 errors:0
Features: 0xbf 0xfe 0x8d 0x78 0x08 0x18 0x00 0x00
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'asus'
Class: 0x18010c
Service Classes: Capturing, Object Transfer
Device Class: Computer, Laptop
HCI Ver: 1.2 (0x2) HCI Rev: 0x1fe LMP Ver: 1.2 (0x2) LMP Subver: 0x1fe
Manufacturer: Integrated System Solution Corp. (57)
Если у вас нормально подхватился Bluetooth адаптер то вы должны увидет нечто вроде этого. По началу у меня подвисало на строке name. Оказалось, что в hcid.conf была синтаксическая ошибка. В любом случае при первом же "негаразді" читаем логи /var/log/syslog и смотрим, что там не так.
Запускаем GUI-утилиту. В KDE это иконка Bluetooth в трее. Нажав на неё правой кнопкой мышки можно посмотреть текущие настройки адаптера, доступность и возможность обнаружить его извне. Для начала поставим его видимым для всех. Потом спрячем.
Теперь пробуем посмотреть, что у нас есть доступного снуружи.
>sdptool browse local
Browsing FF:FF:FF:00:00:00 ...
Service Name: Obex Push Server
Service Description: KDE OBEX Object Push Service
Service RecHandle: 0x10006
Service Class ID List:
"OBEX Object Push" (0x1105)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 3
"OBEX" (0x0008)
Profile Descriptor List:
"OBEX Object Push" (0x1105)
Version: 0x0100
Ваш список может быть другим или даже пустым. Всё зависит от того, как много вы поставили и что у вас запущено. Главное, чтоб вы не упали с ошибкой. Если всё нормально, то попробуйте найти устройство с КПК. Тут я вам не помошник. У каждого Блютус-менеджера свои кнопочки и функции. Для начала нам надо просто найти устройство и убедиться, что они нормально спариваются. В случае чего, логи читаем всё там же.
Попробуйте найти свой КПК с компа. Не забудте сделать его "Обнаруживаемым". Службы КПК вы можете увидеть, а можете и не увидеть. Это милый подарочек от Microsoft. Почему-то КПК прячет свои службы. Могу рассказать, как их находить, но боюсь, что к теме это не относится, нам главное, чтоб КПК всё видел, ибо он будет инициатором соединения. Поэтому продолжим.
После спаривания можно попробовать пересылать файлы с КПК. Желательно при помощи Resco Browser или другой сторонней програмы, а не стандартной Bluetooth утилитой, потому, как если у вас стек от Майкрософт, то скорее всего стандартная утилита не пошлёт. Даже не пробуйте.
Цель всех этих манипуляций - окончательно убедится, что сам по себе Bluetooth под линухом полностью настроен и работает
Соединение
Для начала в двузх словах о том, как работает serial-соединение через bluetooth. В устройстве есть исходящие и входящие COM-порты. Входящий, он же серверный - это такой порт устройства, который у него и так уже есть и к которому цепляется блютус стек, если кто-то снаружи его дёргает. Фактически, если я цепляюсь к устройству по последовательному соединению через bluetooth я подсоединяюсь к входящему COM порту КПК. Яркий пример комуникаторы и смартфоны с WM2003. У них GSM модуль был доступен как COM1. Его назначали входящим и потом цеплялись к нему с компа у через blutooth, получали доступ к модему, как будто он был локально подключен.
Входящий порт один. Исходящих портов много. Под исходящим портом (слиентским) понимается пара, (номер ком порта, адрес устройства) Такой ком порт становится доступным на КПК если вы цепляетесь с него на указанное устройство через Serial-соединение. Опять пример. Допустим, автономный Bluetooth GPS приёмник. Вы его находите на КПК в списке доступных bluetooth-устройств. Создаёте исходящий порт, например COM6. Потом, когда вы укажите COM6 в навигационной програме на КПК и она попытается открыть COM6, у вас создасться serial-соединение и данные с GPS приёмника будут для навигационной програмы прочитаны с COM6, как будто это сом порт самого КПК и GPS не подключен удалённо, а подцеплен аппаратно на шестой ком.
Для работы с serial-соединениями bluez использует устройства /dev/rfcomm0, /dev/rfcomm1 и т.д. кождому такому устройству можно поставить в соответствие удалённый канал (тот который отвечает именно за последовательное соединение) на каком-то устройстве.
Пришло время создать эти устройства, для чего создаём где нибудь файлик со скриптом
#!/bin/sh
#
for i in `seq 0 255`; do
mknod -m 666 /dev/rfcomm$i c 216 $i
done
ставим ему атрибут "Исполняемый" и запускаем от рута. Те кто когда-то соединял линух с телефонами через bluetooth и ходил с них в инет, сечас кинется лезть в /etc/bluetooth/rfcomm.conf Так вот лезть туда не надо. Потому, что инициатором соединения у нас будет не ПК, а КПК. И нужный rfcomm прибайндится автоматически.
Далее, нам нужно создать файл описывающий наше ppp соединение. Создаём /etc/ppp/peer/dun
nodefaultroute
noauth
local
192.168.131.102:192.168.131.201
ms-dns 192.168.131.102
linkname synce-device
Дальше нам нужен небольшой фейк. Мы регистрируем на PC протокол Serial Conection. Просто для галочки. Реально он использоваться не будет по нему соединялись устройства с WM2003, а в WM5 выделили отдельный канал со своим протоколом, но вот мой ETen почему-то без этой службы не хотел соединятся.
sdptool add SP
после этого запускаем демона Dial-Up Network. Что он для нас делает. Он регистрирует протокол ActiveSync и слушает. При входящем соединении подхватывает открывшыйся /dev/rfcomm и натравливает на него pppd c параметрами которые мы ему указываем.
dund -sES --msdun -a call dun
Строчка немного отличается от той, которую советуют разработчики SynCE. Добавлены секьюрность и шифрование. К слову, последние две строчки следует добавить в /etc/rc.local чтоб каждый раз руками не запускать. Проверяем, что у нас получилось, пишем:
>sdptool browse local
Browsing FF:FF:FF:00:00:00 ...
Service Name: Obex Push Server
Service Description: KDE OBEX Object Push Service
Service RecHandle: 0x10006
Service Class ID List:
"OBEX Object Push" (0x1105)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 3
"OBEX" (0x0008)
Profile Descriptor List:
"OBEX Object Push" (0x1105)
Version: 0x0100
Service Name: Serial Port
Service Description: COM Port
Service RecHandle: 0x10002
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Serial Port" (0x1101)
Version: 0x0100
Service Name: ActiveSync
Service RecHandle: 0x10003
Service Class ID List:
UUID 128: 0350278f-3dca-4e62-831d-a41165ff906c
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1
У нас должны появится Serial Port и ActiveSync. Осталось ещё проверить, чтоб КПК тоже их видел. Напоминаю, что если вы не нашли их стандартным Bluetooth менеджером это не значит, что их нет. Попробуйте встроенным майкрософтовским. У меня єти сервисы видит именно он.
На этом настройка Bluetooth части окончена. Но это не значит, что у вас уже всё работает. В том то и подвох. Без запущеного odccm соединение установится и тут же разорвётся. КПК не находит ActiveSync на другой стороне, чует подвох и рвёт соединение. Вобщем без odccm работать не будет.
Если у вас уже всё настроено, то можно попробовать соединятся. Лезем в ваш родной Bluetooth менеджер на КПК и создаём ActiveSync соединение, заново, вместе с поиском устройств, установкой партнёрских соглашений, и прочей лажей. И плевать на то, что устройства уже спареные. Так должно работать. Тут в принципе возможны большие расхождения, в зависимости от реализации вашего менеджера. В любом случае поступать следует так, как вы это делали с виндовой машиной.
И ещё, ActiveSync черед Bluetooth, по крайней мере у меня, крайне нестабильная штука. Он частенько не подключается с первого, со второго, и даже, иногда, с третьего раза. Тут надо быть упорным. Хотя это скорее всего Eten-овские закидоны, под виндой глючело аналогично.