Bluetooth-устройства

Bluetooth – это технология связи, предназначенная для беспроводного соединения различных устройств. Обычно передача информации осуществляется на небольшом расстоянии (10-30 м) с невысокой скоростью (720 Кбит/с), но в настоящее время уже есть устройства, покрывающие расстояние до 100 м (на открытом пространстве), и разрабатываются устройства со скоростями свыше 2 Мбит/с.

В технологии Bluetooth используется нелицензируемый диапазон радиочастот 2.4 ГГц, то есть для создания и распространения таких устройств не требуется специальное разрешение. Bluetooth не является альтернативой радио-ethernet (Wi-Fi), скорее, это взаимодополняющие технологии. Wi-Fi – это именно радио-ethernet, в то время как Bluetooth может соединять совершенно разнородные устройства: компьютеры, сотовые телефоны, клавиатуры, мыши, принтеры, ПДУ и телевизоры/видеомагнитофоны. Устройства Bluetooth могут объединяться в сети, причем каждое устройство может принадлежать нескольким сетям.

О протоколах

Протоколом в вычислительной технике называется стандарт, который определяет, как происходит обмен информацией между различными ее источниками и приемниками. Протокол позволяет абстрагировать процесс передачи информации от низкоуровневых деталей реализации, а также от содержимого передаваемой информации. Например, протокол HTTP определяет понятия "ресурс", "запрос", "ответ", синтаксис запроса и ответа, но не определяет, какая именно информация будет передаваться в запросах и ответах; одна программа (робот) может сохранять результаты запросов (ответы) в файлы или базу данных, другая (браузер) отображает эту информацию (интерпретируя HTML, картинки и прочие типы файлов).

Протоколы группируются в стеки, где один протокол использует другой в качестве транспорта, несущего его высокоуровневую информацию, причем таких слоёв может быть довольно много. Например, протокол TCP использует протокол IP в качестве транспорта, передающего его (протокола TCP) данные. Протокол HTTP использует в качестве транспортного уровня уже TCP, а протокол XML-RPC использует HTTP.

Реализации протоколов тоже выстраиваются в стеки. На самом нижнем уровне доступ к конкретному устройству осуществляет драйвер устройства. Ядро операционной системы предоставляет пользовательским программам стандартный интерфейс к драйверам. В свою очередь хорошо написанные программы не сами реализуют этот доступ, а пользуются библиотеками, реализующими протоколы более высоких уровней.

Конкретно для Linux существует 3 стека протоколов Bluetooth, то есть 3 реализации. Основной, Bluez, был разработан компанией Qualcomm и включён в ядро Linux, начиная с версии 2.4.18. Другой стек, включённый в ядро, разработан фирмой Axis и называется OpenBT. Оба стека требуют программ и библиотек, которые можно найти на соответствующих страницах в Интернете. Третий стек, Affix, разработан фирмой Nokia. Он не включён в ядро Linux, поэтому для его установки требуется скачать и установить патч ядра, а также необходимые библиотеки и программы. Недостатком стека Affix является именно то, что он не интегрирован в ядро. С другой стороны, он имеет такое достоинство, как PyAffix. Это патч для модуля сокета стандартной библиотеки языка программирования Python, добавляющий протокол Bluetooth к списку поддерживаемых протоколов.

Bluetooth в Linux

Оболочка KDE Bluetooth представляет собой набор средств, созданных на основе стека BlueZ. Разработчики MOPSLinux и KDE стремились обеспечить для пользователей легкий доступ к наиболее распространенным профилям Bluetooth и упрощение, насколько это возможно, обмена информацией компьютера с телефонами, поддерживающими Bluetooth, и карманными компьютерами (PDA).

Ниже описывается настройка kdebluetooth как целостной системы, рассматривается использование и настройка каждой сервисной программы.

Компоненты

Kbluetoothd: сердце оболочки KDE Bluetooth

KBluetoothD является главной частью оболочки KDE Bluetooth. Обычно программа работает постоянно и запускает такие сервисы, как сервер OBEX, или же сервисы, приостановленные по запросу. Системная иконка сообщает о текущих соединениях bluetooth, а также дает возможность быстрого доступа к конфигурации сервиса, последним использованным сервисам, различным устройствам и др. Запуск kbluetoothd

Для запуска KbluetoothD необходимо набрать в командной строке kbluetoothd, либо выбрать ее в меню K-Menu (обычно System/kbluetoothd).

KBluetoothD отображается иконкой, но при желании в контекстном меню можно отключить опцию "Всегда отображать". В этом случае программа будет работать без какого-либо видимого пользователю интерфейса, даже если ее перезапустить. Чтобы вернуть иконку, необходимо просто запустить kbluetoothd заново. Если иконка была отключена, на время bluetooth соединения она все же появится.

Если программа kbluetoothd работает до выключения системы, она будет автоматически запущена, когда пользователь опять войдет в систему. Чтобы этого не произошло, необходимо закрыть ее и указать, что запускать kbluetoothd при следующем входе в систему не нужно.

Работа kbluetoothd

Самой важной частью программы kbluetoothd является метасервер Bluetooth. Так как kbluetoothd работает постоянно, он ко всему прочему сканирует адаптер Bluetooth, сообщает об установлении соединений и помещает в кэш запросы имен. Так происходит, потому что kbluetoothd является единственной программой для работы с bluetooth, которая должна работать постоянно и иметь доступ ко всем активным сервисам. Метасервер

Метасервер программы kbluetoothd функционирует аналогично демону inetd в Linux-системе: он ожидает установления соединений устройствами управления реальными сервисами и запускает их при необходимости. Таким образом, не требуется постоянно работающий obex-сервер (он будет запущен автоматически, если кто-либо попробует передать в компьютер файл посредством OBEX).

Такой принцип используется по нескольким причинам:

  1. Уменьшается объем используемой памяти при работе с несколькими сервисами. Оболочка KDE Bluetooth с настоящее время поставляется с 4-мя серверными программами: obex-сервер, клиент handsfree, клиент bemused (программа управления WinAmp’ом с мобильного телефона) и программа для интерактивной переписки (serial chat tool). Даже если вы не собираетесь использовать эти приложения часто, их можно не отключать, т.к. ресурсы затрачиваться не будут.
  2. Системная панель (system tray) не будет загромождаться различными редко используемыми ярлыками.
  3. Повышается уровень безопасности, и упрощается контроль доступа. Если пришел запрос на установление соединения, программа kbluetoothd по умолчанию высветит диалог, спрашивая разрешение. Для каждого сервиса и устройства пользователь может временно разрешить или запретить соединение. Таким образом, контроль доступа для каждого приложения, управляемого программой kbluetoothd, осуществляется независимо.
  4. Повысится надежность сервисов bluetooth. Каждый сервер запускается для каждого нового соединения, поэтому при сбое сервера вы можете начать работу заново, не перезагружая его.

Для веб-сервера управление демоном inted может быть помехой, но в случае работы с Bluetooth настройка соединения занимает как минимум несколько секунд, причем каждое действие инициируется пользователем, что позволяет стабильно работать с метасервером.

  1. Служебная регистрация с использованием SDP-сервера очень проста. Для получения информации о регистрации с использованием SDP-сервера приложений, управляемых программой kbluetoothd, рекомендуется обратиться к специальной литературе по разработке в KDE.
  2. Для работы bluetooth сервера можно использовать простые серверные программы и даже скрипты, не прибегая непосредственно к функциям для работы с bluetooth.

Имеется возможность включить/выключить сервисы, используемые программой kbluetoothd, с помощью центрального модуля управления в таблице «Локальные сервисы» ("Local services"). Здесь же можно сконфигурировать отдельные опции сервиса, выбрав сервис и нажав на кнопку «Конфигурация…» ("Configure...").

С помощью таблицы «Подтверждение» ("Confirmation") можно задать реакцию программы на запросы об установлении соединения. Сервис обнаружения устройств

Для многих приложений необходима информация о том, доступно ли определенное устройство в данный момент, а также иногда требуется получать уведомления о подключении или отключении того или иного устройства. В отличие от USB, где оболочка hotplug сообщает о новых устройствах, для соединений bluetooth таких сервисов нет.

В программе kbluetoothd эта проблема решена с помощью сервиса обнаружения устройств (Device Discovery Service). Периодически сервис проверяет наличие расположенных поблизости устройств и составляет список тех, что являются доступными. Чтобы получить доступ к обнаруженному устройству, необходимо правой кнопкой мыши нажать на ярлык программы kbluetoothd и просмотреть меню «Недавно открытые» ("Open recent"). Это меню содержит один раздел для недавно использованных сервисов (например, "obex ftp on MyPhone" – «obex ftp для МоегоТелефона»), а также, при наличии уже обнаруженных устройств, второй раздел, предоставляющий список этих устройств. Нажав на одно из них, можно увидеть сервисы для данного устройства.

С помощью центрального модуля управления можно задать частоту поиска устройств или же отключить поиск («Периодически обновлять список устройств» – "Periodially update neighbor list"). Рекомендуется использовать интервалы не менее минуты, так как у других приложений могут возникать проблемы при поиске устройств, потому что большинство устройств не рассчитаны на одновременное использование bluetooth другими приложениями.

Многие устройства не поддаются обнаружению из соображений конфиденциальности или безопасности. В этом случае их нельзя будет обнаружить во время поиска устройств. Вместо этого kbluetoothd попытается получить доступ к каждому из этих устройств. Чтобы добавить устройство в список не поддающихся обнаружению, необходимо нажать на опцию «Дополнительные свойства поиска для необнаруживаемых устройств» ("Additional search options for non-discoverable devices"). Следует помнить, что необходимо либо временно разрешить обнаружение устройства, либо узнать адрес оборудования для включения его в список.

Это не позволит другим программам начать поиск устройств или даже установить соединение с другим устройством в течение примерно 30 секунд для каждого устройства, если в данный момент устройство недоступно. Поэтому здесь желательно использовать довольно длинный интервал времени (около 10 минут). Рекомендуется попробовать различные значения и определить наименьший временной интервал, при котором работа идет нормально.

Наличие одного списка доступных на данный момент устройств не очень полезно. Можно использовать сервис обнаружения устройств для выполнения проверок при появлении и исчезновении устройства. Эти проверки представляют собой простые скрипты. Пользователь может легко написать свой собственный скрипт, но следует отметить, что kbluetoothd уже имеет некоторые скрипты, основные из них описываются ниже:

Discovery protocol (протокол обнаружения)

Данный скрипт создает html-страницу с некоторой технической информацией по каждому устройству при первом его обнаружении. Можно использовать данный скрипт, если необходимо узнать, кто еще неподалеку использует bluetooth. Ничего страшного, если данный скрипт будет активирован постоянно, т.к. попытка получить доступ к устройству будет осуществлена только при первом его обнаружении или же после того, как соответствующая html-страница будет удалена.

Kopete_AutoAway

Данный скрипт установит статус готовности kopete в зависимости от того, находится ли bluetooth-устройство в зоне достижимости.

Экранная заставка (screensaver)

Запускает или отменяет экранную заставку каждый раз, когда появляется или исчезает устройство.

Для корректной работы большинство скриптов сначала необходимо сконфигурировать. Нажав на кнопку «сконфигурировать» ("configure"), вы увидите окно kedit, содержащее набор параметров скрипта. Следует проявлять осторожность при ограничении предложенных для каждого задания устройств, если нет необходимости, чтобы скрипт выполнялся каждый раз, как кто-либо с включенной на телефоне функцией bluetooth пройдет мимо.

Список "недавно использованных сервисов"

Для получения быстрого доступа к сервисам, которые использовались раньше, необходимо обратиться к подменю программы kbluetoothd «Недавно использованные» ("Recently used"). Если посредством kbtobexclient уже пересылались какие-либо файлы на мобильный телефон с именем «Мой телефон» ("My phone"), то будет виден пункт меню «Клиент Obex – Мой телефон» ("Obex push client - My phone"), с помощью которого можно запустить kbtobexclient и сразу же будет установлено соединение с телефоном, минуя процесс обработки запроса.

Следует отметить, что kbluetoothd отображает все недавно использованные сервисы не зависимо от того, доступно ли определенное устройство в данный момент.

Это свойство должно поддерживаться соответствующим приложением.

Проверка соединения

Посмотрев на иконку программы kbluetoothd, можно определить, установлено ли в данный момент соединение bluetooth. Если соединения нет, иконка серая. Иконка мигает, если соединение устанавливается, и становится голубой, если соединение уже установлено.

Чтобы получить более подробную информацию о текущем соединении, необходимо щелкнуть правой клавишей мыши на иконку и выбрать пункт «Свойства соединения…» ("Connection details...").

Здесь отображаются ACL-связи (ACL-links), а не Rfcomm-соединения. Если было установлено соединение с отдельным устройством несколькими программами (например, handsfree и bemused), то все равно эта связь будет отображаться как одно соединение, т.к. в определенный момент времени может существовать только одна ACL-связь.

Конфигурирование программы kbluetoothd

Обычно программа kbluetoothd и управляемые ею сервисы работают идеально, но все же имеется возможность изменить некоторые опции. Чтобы сконфигурировать kbluetoothd, можно использовать центр управления KDE. Для этого необходимо запустить центр управления KDE и выбрать Интернет и Сеть -> Сервисы Bluetooth (Internet&Network -> Bluetooth services) или нажать правой клавишей мыши на иконку программы и выбрать Конфигурация -> Сервисы (Configuration -> Services)...

Подтверждение входящих соединений

В данной таблице можно изменить настройки подтверждения входящих соединений. По умолчанию программа kbluetoothd запустит диалог подтверждения до начала работы собственно серверной программы (например, сервер передачи OBEX). Имеется возможность отключить диалог подтверждения для некоторых устройств/сервисов или указать, чтобы kbluetoothd просто отклоняла входящие соединения.

Записи о новых устройствах будут добавляться, если в параметрах подтверждения будет выбран пункт «Всегда принимать» ("Always accept").

Локальные сервисы

В данной таблице можно включать или отключать отдельные сервисы Bluetooth, управляемые программой kbluetoothd. У некоторых сервисов также есть некоторые опции конфигурации, например, сервер bemused. В этом случае пункт меню Конфигурация… (Configure...) будет доступен, если будет выбран соответствующий сервис.

Так как программа kbluetoothd автоматически назначает сервисам rfcomm-каналы, то каналы, используемые отдельным сервисом, могут измениться при использовании других серверов bluetooth. При необходимости программа сообщит о том, какой канал назначен определенному сервису. Средства bluetooth/SDP-kioslaves: поиск устройств и сервисов

Средства bluetooth- и sdp-kioslaves позволяют находить другие устройства bluetooth, помещать их в список и использовать их сервисы с помощью konqueror (или же с помощью любого другого файлового менеджера, который может использовать оболочку KDE File IO). Использование средств Bluetooth/SDP-kioslves

Чтобы найти новое устройство, в менеджере konqueror необходимо ввести bluetooth:/. На экране сразу же отобразится запись для системы, а затем будут появляться другие устройства, которые удастся обнаружить.

Также на панели konqueror можно нажать на иконку Bluetooth в таблице «Сервисы» ("Services"), а затем выбрать LAN- и Audio-CD-браузер. Если иконки не видны, возможно, следует перезагрузить панель, выбрав Кнопка конфигурации (config-button) -> Добавить (Add new) -> Вернуться к параметрам по умолчанию (Rollback to system default).

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

После выбора устройства отображается список сервисов, которые ему соответствуют. Если сервис поддерживается системой kdebluetooth, можно нажать на него, и запустится соответствующее приложение. Пока он не будет отключен, менеджер konqueror будет высвечивать на экране стандартный диалог открытия файла (file-open-dialog). Если сервис неизвестен, то будет отображаться другой диалог открытия (open-with-dialog).

Для продвинутых пользователей

Если пользователь уверены в своих действиях, то он может попробовать открыть определенный сервис (например, kbthandsfree) с помощью приложения bluetooth, которое не было специально разработано для данного профиля, для чего необходимо нажать на иконку сервиса правой клавишей мыши и выбрать приложение. Каждый сервис, работающий с командами AT при rfcomm-соединениях, можно открыть, например, с помощью kbtserialchat.

Также имеется возможность изменить связь между приложениями и (известными) профилями точно так же, как выбирается приложение, которое должно открывать видео формата mpeg или файлы pdf: kio_obex присваивает каждому указанному в списке профилю тип MIME (mimetype) и каждое клиентское приложение системы kdebluetooth связано с поддерживаемыми им профилями. Поддержку еще не распознанных профилей можно добавить с помощью файлов в каталоге $pFIX/share/services (например, sdpmime-serial-port-profile.desktop).

Средство OBEX-kioslave: просмотр папок через Bluetooth

Краткие сведения

Прокол OBEX был разработан для использования в мобильных устройствах. Каждый раз при передаче ("beamed") данных с одного мобильного устройства на другое используется OBEX. Но существуют также другие применения протокола OBEX. Особенно часто он используется для просмотра файловых систем. Если мобильное устройство понимает данный протокол, то можно просматривать, скачивать и загружать файлы с его накопителя информации, используя данное клиентское приложение. С протоколом OBEX связаны такие протоколы синхронизации, как IrMCSync и SyncML, и к ним можно получить доступ с помощью данного клиента, если синхронизация не используется в среде konquerror.

Протоколы OBEX могут использовать различные способы передачи. Сначала применялся IrDA, но сейчас существуют средства передачи через Bluetooth, последовательные каналы и tcp/ip соединения.

OBEX поддерживает 2 типа идентификации. К первому, самому известному, относится идентификация клиентов на сервере. Таким образом, серверное приложение может изменять особенности клиентов и наоборот. При идентификации применяется контрольная сумма MD5, что дает гарантию, что пароли не будут передаваться в незашифрованном виде.

Формат URL

К ресурсам OBEX можно получить доступ, используя URL. Протокольная часть (protocol part) представляет собой непосредственно obex:. Составляющая, отвечающая за путь доступа, (path component) хранит его на сервере. Хостовая часть (host part) немного сложнее.

Для серверов, доступ к которым осуществляется посредством tcp/ip, хостовая часть стандартная. Для установления соединения можно использовать имя хоста или IP адрес хоста сервера. К тому же, если сервер использует нестандартный порт (стандартный порт – 650), можно указать номер порта. Пример: OBEX://hostname:port/path).

Для средств передачи IrDA или Bluetooth можно использовать адрес аппаратного обеспечения в стандартной записи (разделение двоеточиями). Пример: obex://[ef:01:23:45]/path или obex://[12:34:ef:01:23:45]/path.

Существует возможность задать псевдонимы хостов для использования их в протоколе OBEX. Эти псевдонимы задаются в модуле OBEX KControl. Можно указать имя человека, обнаружить устройство, а затем указать соответствие адреса этому имени. Через эти псевдонимы можно также получить доступ к устройствам, использующим последовательный способ передачи. Для IrDA и Bluetooth существуют удобные псевдонимы irda и bluetooth. В обоих случаях идет обнаружение устройства и попытка установить соединение с первым найденным. Подсказки

Как и в случае с другими средствами kioslave, имеется возможность напрямую открывать и сохранять файлы в устройствах bluetooth с помощью kio_obex. Например, если имеется список покупок, то его можно подготовить в редакторе kedit и сохранить на телефон.

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

Клиент передачи OBEX: отправка файлов

KBTObexClient представляет собой программу, которая позволяет передавать файлы с персонального компьютера любому устройству bluetooth, которое поддерживает протокол OBEX (обмен данными, объектами). Этот протокол поддерживается (почти) всеми сотовыми телефонами с функцией bluetooth, карманными компьютерами и, конечно, другими персональными компьютерами с устройством bluetooth. Данную программу можно вызвать с помощью среды Konqueror, используя kio_sdp (набрать sdp:/ в панели), или необходимо нажать правой клавишей мыши на файл, который необходимо отравить, и выбрать действие «Отправить с через Bluetooth» ("Send with Bluetooth").

Сервер передачи OBEX: получение файлов

С большинства карманных компьютеров (PDA) и сотовых телефонов, снабженных функцией Bluetooth, можно передать файлы на персональный компьютер. В то же время было бы гораздо удобнее использовать для такой передачи средство OBEX FTP kioslave, но далеко не все устройства его поддерживают. С другой стороны, передача информации OBEX поддерживается большинством устройств Bluetooth. Использование сервера передачи OBEX

Сервер передачи OBEX управляется программой kbluetoothd и запускается автоматически, если он активирован, и кто-то пытается передать в персональный компьютер некоторые файлы.

Если передаются файлы с мобильного устройства на компьютер, то иконка программы kbluetoothd станет голубой и появится новое окно. По умолчанию (в зависимости от настроек для входящих соединений) сначала нужно будет принять соединение, а затем появится главное окно OBEX и начнется передача файлов.

Входящие файлы сохраняются в каталог /tmp и стираются при закрытии сервера передачи OBEX. Для сохранения этих файлов, применяются две опции:

Нажать OK, чтобы сохранить полученные файлы в указанное место.

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

Программа kbtserialchat представляет собой очень простой клиент-сервер (client&server) для общения. Его основной задачей является отладка. Он также может использоваться в качестве примера для написания Bluetooth сервера, управляемого программой kbluetoothd, и клиента, который может быть запущен посредством SDP kioslave. Использование средства общения

Программа kbtserialchat использует протокол последовательного порта (Serial Port), поэтому при ее запуске будут показаны все устройства, предоставляющие профиль последовательного порта. Сюда относятся и другие компьютеры, где есть оболочка KDE Bluetooth, и телефоны, поддерживающие данный профиль.

При установлении соединения с другим сервером kbtserialchat в другой системе появится окно kbtserialchat, после чего можно обмениваться текстовыми сообщениями. Также имеется возможность установить соединение с последовательным портом телефона, обладающего функцией Bluetooth, и посылать различные AT-команды. Например, чтобы позвонить по определенному номеру, необходимо указать ATD<номер>;.

В то время как может показаться бессмысленным соединение сервера kbtserialchat с последовательным портом устройства, использующим его для обмена двоичными данными, его можно использовать для соединения не только с последовательными портами различных сервисов, а также с сервисами на основе Rfcomm (например, профиль handsfree или headset). Эти сервисы не указываются в начальном диалоге, поэтому можно поступить следующим образом: найти сервисы устройства с помощью kio_sdp (используя sdp:/-URL). В этом случае необходимо нажать на сервис правой клавишей мыши и выбрать пункт Открыть с помощью… (Open with...). В диалоге необходимо указать kbtserialchat и нажать Enter.

Дополнительные средства

В данном разделе описываются некоторые возможности и скрипты, входящие в пакет kdebluetooth. Большинство из приведенных здесь утилит используются отдельно, но вызываются с помощью скриптов или других программ. kioclient: доступ к оболочке KIO с помощью скриптов

Это небольшая утилита, которая используется для доступа к средствам kioslaves из командной строки. Таким образом, по сути kioclient является основной утилитой.

С помощью kioclient можно скопировать, просмотреть содержимое, удалить любые файлы или каталоги, доступные оболочке KIO. С помощью WebDAV имеется возможность напрямую скопировать файл с FTP-сервера на другой сервер или посредством SSH (используя kio_fish) посмотреть содержимое каталога. Или же с помощью kio_obex можно получить доступ к файлам мобильного телефона. Утилита kioclient используется в образце скрипта, входящего в пакет kbluetoothd (скрипт copy_images).

Следует помнить, что, несмотря на то, что kioclient является программой командной строки, запускать ее нужно из KDE. kbtsearch: поиск устройств посредством скриптов

Как и kioclient или kdialog оболочки KDE, kbtsearch представляет собой программу командной строки, которая используется в скриптах. Она обладает интерфейсом командной строки для двух стандартных диалогов системы kdebluetooth – диалог поиска устройств и диалог поиска сервисов.

Эту программу можно использовать, если необходимо, чтобы пользователь выбрал устройство bluetooth или нашел определенный сервис среди заданных устройств. Как всегда, диалог выбора сервиса помнит найденные устройства и сразу заполняет список сервисов записями о ранее найденных сервисах, а доступные в данный момент – добавляются в список через несколько секунд.

Чтобы начать поиск устройства, необходимо просто набрать kbtsearch --device. Когда пользователь нашел устройство или ввел адрес и нажал ОК, программа kbtsearch выведет адрес устройства в stdout и вернет статус 0. Если пользователь нажал кнопку Отмена, ничего не выводится и возвращается код статуса 1.

С помощью kbtsearch --uuid <Service-UUID> также можно осуществить поиск устройства, поддерживающего данный профиль Bluetooth. Программа kbtsearch позволяет задать псевдонимы для часто используемых профилей. Чтобы получить список возможных псевдонимов, необходимо выполнить kbtsearch --aliases.

Если пользователь выбирает сервис и нажимает OK, программа kbtsearch возвращает 0 и выводит строку вида «[адрес] [rfcomm-канал]» ('[address] [rfcommchannel]'). Понятно, что это подходит лишь для тех сервисов, которые задают rfcomm-канал. Например, на данный момент нет способа отыскать L2CAP PSM.

Для получения информации о дополнительных опциях необходимо обратиться к kbtsearch --help. kbtfax: отправка факса посредством приложений KDE

Это вспомогательный скрипт, который облегчает отправку факса из любого приложения KDE. Он зависит от efax (третья система), kdeprintfax и kdesu (части kdebase) и rfcomm tool (часть bluez).

Если осуществляется попытка отправить факс с помощью kdeprintfax, то можно указать, что выход факса (fax backend) должен использоваться утилитой kdeprintfax. Появится опция "EFax", а также пункт "Other" (другое). Необходимо выбрать пункт "Other", а затем в системе kdebluetooth найти скрипт kbtfax. Далее в командной строке необходимо ввести то, что указано в самом скрипте. Безопасность Bluetooth: объединение (pairing) устройств Что такое «объединение»?

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

Обычно два устройства объединяются единожды, после чего связь между ними будет подтверждаться автоматически.

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

Устройства объединяются для того, чтобы удостовериться в подлинности другой стороны. Однако первый шаг не может быть выполнен автоматически. Необходимо знать, кто хочет объединиться с вашим устройством. Для этого на обоих устройствах набирается PIN-код. Определение "PIN" широко распространено, однако вводит в заблуждение. Это не тот код, который вы должны набрать, чтобы получить деньги из банкомата, т.е. вам совершенно не обязательно его запоминать, а после (!) объединения не нужно хранить в тайне. Единственное, что желательно проверить, это что никто больше не знает этого номера, пока он не набран на обоих устройствах.

Для большей безопасности следует не только хранить PIN-код в тайне во время процесса объединения, но и использовать случайное число, которое сложно отгадать. Средства KDE Bluetooth помогут в этом, генерируя случайное восьмизначное число самостоятельно. В коде могут использоваться буквы, но в этом случае могут возникнуть проблемы при наборе кода на мобильном телефоне. PIN-код

Но куда вводить PIN-код? Как было сказано выше, устройства сами запрашивают код, когда это необходимо. Что касается стека BlueZ, то тут немного сложнее. Существует несколько способ получения PIN-кода от пользователя.

Обычно в параметрах входящего в пакет BlueZ демона hcid (файл /etc/bluetooth/hcid.conf) указывается, что необходимо использовать «Приложение-помощник для ввода PIN-кода» ("PIN helper application") и задать «безопасного пользователя» ("security user"). Этот демон представляет собой небольшую программу, которая только запрашивает пользователя ввести число и выводит его в stdout. Bluez содержит собственную программу-помощника "bluepin", которая работала достаточно проблематично. Лучше использовать программу "bluez-pin" или помощника системы kdebluetooth под названием "kbluepin". Работа с объединенными устройствами

После объединения устройств можно задаться различными вопросами. Например, какие устройства объединены, а какие – нет. У пользователя также может появиться желание разъединить устройства. Однако не все так просто.

Во-первых, ни одно устройство не может знать точно, с какими устройствами оно объединено. Когда два устройства объединены, они используют секретный ключ запуска, который был создан в процессе объединения и основывается на PIN-коде и некоторой другой информации. Поскольку любая из сторон может удалить ключ запуска без уведомления, наличие ключа для данного устройства не гарантирует существования его у другого устройства. Если один из ключей запуска удален, устройства разъединяются. Конечно, можно быть уверенным, что если в компьютере этого ключа нет, то с устройством объединения нет.

Каким же образом удалить ключ запуска? Это зависит от устройства. У большинства телефонов или карманных компьютеров (PDA) есть списки «объединенных» или «дружественных» устройств, из которых можно удалить некоторые записи. В Bluez версии 2.6 ключи запуска обычно указываются в файле /etc/bluetooth/link_key. Так как они должны храниться в секрете, доступ к этому файлу разрешен только пользователю root. Можно удалить этот файл, но тогда абсолютно все устройства будут разъединены. А так как файл двоичный, редактировать его можно только с использованием специальных средств. В настоящее время система kdebluetooth не обладает такими средствами, т.к. в скором времени принципы работы утилиты Bluez с ключами должны измениться.

Существует один нюанс при частом переключении между различными операционными системами, работающими с bluetooth (обычно Linux<->Windows): объединив телефон с компьютером под ОС Linux и дальше загрузив Windows, ОС Windows не будет знать ключей запуска, сгенерированных утилитой Bluez. Получается, что компьютер «потерял» ключ запуска и придется запустить процесс объединения снова. В зависимости от устройства может случиться так, что новое объединение невозможно, пока не будет удален «старый» ключ запуска. Такая же проблема может возникнуть, если будет выбран пункт «единичное объединение» ("paring single") в файле /etc/bluetooth/hcid.conf. Чтобы не попасть в такую ситуацию, не рекомендуется использовать Bluetooth в разных ОС или использовать различные адаптеры Bluetooth для разных ОС.

Программа KBluetoothD

В данном разделе описано, как использовать программу kbluetoothd для различных приложений или получить к ней доступ из скриптов, чтобы найти имена устройств в кэше.

Кэш имен

Кэш имен отслеживает все поступающие запросы имен и сохраняет результаты. С его помощью другие приложения и сама программа kbluetoothd может найти имя другого устройства bluetoothd по его уникальному адресу, даже если устройство в данный момент недоступно. Такая схема используется по большей части из-за более дружественного интерфейса, т.к. адреса bluetooth типа 00:60:AB:13:83:3D довольно сложно запомнить. Однако, возможно, она устареет, как только выйдет версия BlueZ с собственным постоянным кэшем имен.

Получить доступ к кэшу имен можно с помощью dcop. Чтобы найти в нем адрес, из командной строки необходимо набрать dcop kbluetoothd DeviceNameCache getCachedDeviceName <address>. Чтобы определить имя устройства, использованного последним, можно указать dcop kbluetoothd DeviceNameCache resolveCachedDeviceName <name>. Данная команда не обращает внимания на регистр букв. Следует отметить, что несколько устройств могут использовать одно имя.

Мета сервер

Если необходимо использовать серверное приложение с новым протоколом bluetooth, то его можно легко объединить с программой kbluetoothd, и сервер будет запускаться автоматически.

Необходимо иметь XML файл, описывающий SDP-записи, и соответствующий файл рабочего стола. В этом случае программа kbluetoothd автоматически сформирует SDP-запись, назначит rfcomm-канал и начнет прослушивание выбранного канала. Если кто-то установит соединение с этим сервисом, программа kbluetoothd запустит его (сервис) и передаст ему сокет для уже принятого соединения. Количество идентификаторов передается в качестве аргумента командной строки.

Пакет kdebluetooth содержит утилиту kbtserialchat, которая (кроме использования ее для отладки и общения) представляет собой довольно простой образец программы для интегрирования приложения в оболочку kdebluetooth. Так как kbtserialchat является клиентом и сервером одновременно, то не придется рассматривать все аргументы командной строки.

Формат SDP/XML-файлов должен быть самоописывающимся, если пользователь имеет представление о том, как структурируются SDP-записи. Важно отметить, как параметр для выбранных rfcomm-каналов находит путь к SDP-записи для сервера. Так как канал выбирается программой kbluetoothd автоматически, то нет возможности вносить его в файл SDP-регистрации. Вместо этого в качестве структурного нуля можно использовать <uint valref='rfcommchannel' size='8'/>. Используемые rfcomm-каналы указаны в соответствующем файле рабочего стола.

Сервис обнаружения устройств

Программа kbluetoothd может искать другие устройства и выполнять команды, как только устройство появилось или исчезло. Данный сервис можно сконфигурировать в модуле центра управления (таблица «Обнаружение устройств» – "Device Discovery").

Список активных работ по обнаружению, как показано в модуле центра управления, представляет собой просто список исполняемых файлов, найденных в каталоге $HOME/.kde/share/apps/kbluetoothd/discovery_jobs/. Имеется возможность также добавить новые скрипты в глобальный каталог (global template directory) в $pFIX/share/apps/kdebluetooth/job-templates/. Скрипты в этом каталоге, название которых заканчивается на ".template", будут отображены, когда пользователь выберет пункт «Добавить новое задание…» ("Add new job..."), а затем будут скопированы в активную директорию пользовательского домашнего каталога.

Включенные в программу скрипты разбиваются на два, чтобы облегчить их обновление (без переустановки). Часть ".template" содержит только те настройки, которые копируются в домашний каталог и которые пользователь может изменить. Этот скрипт затем вызывает часть ".real", которая остается во временном каталоге.

Чтобы написать собственное задание на поиск, необходимо выбрать пункт «Добавить новое задание…» ("Add new job..."), а затем выбрать Custom_Job. Скрипт Custom_Job.template будет скопирован в рабочий каталог. Затем нажать «Сконфигурировать…» ("Configure..."), чтобы изменить скрипт. Данный скрипт отображает все опции командной строки и переменные среды, к которым есть доступ.

Следует заметить, что, удалив скрипт из списка активных заданий, все эти изменения исчезнут. Если требуется его распространить, то рекомендуется разбить его на две части: template для настроек и real для выполнения собственно работы.

Чтобы иметь возможность передать файлы, получить или удалить их из такого задания, можно использовать kioclient.