Оригинал: "Ubuntu Hacks: Chapter 4 - Mobile Ubuntu" Авторы: Кайл Ранкин, Джонатан Оксер, Билл Чайлдерс (Kyle Rankin, Jonathan Oxer, Bill Childers)
Дата публикации: June 2006
Перевод: Н.Ромоданов
Дата перевода: сентябрь 2010 г.
$ sudo killall -HUP hcid
Теперь для того, чтобы убедиться, что Bluetooth действительно включен
и работает, вам нужно проверить, что в непосредственной близости от вас
есть по крайней мере одно устройство, которое находится в режиме
"обнаруживаемое" ("discoverable"). Этот режим Bluetooth позволяет
устройствам находить друг друга. Посмотрите документацию на устройство
для выяснения подробностей перевода устройства в этот режим.
Некоторые устройства позволяют включить режим "обнаруживаемое" только
на ограниченный период времени (например, на 2 минуты). Поэтому сразу
выполните следующую команду. Утилита hcitool позволит вам управлять соединениями Bluetooth. Выполните команду hcitool scan для того, чтобы получить список устройств, находящихся поблизости от вас. Ниже показано, что утилита hcitool нашла три устройства (мой сотовый телефон Nokia 3650, мой Mac и мой Palm Treo):
Теперь, когда вы знаете, что Bluetooth работает, вы можете выполнить сопряжение (pairing)
вашей системы Ubuntu с одним из устройств. Сопряжение создает
соединение между устройствами с тем, чтобы они могли обмениваться
данными и подключаться друг к другу.
Во-первых, инициируйте сопряжение с устройством, которое вы хотите
использовать. Все устройства различны. На Treo, например, вам нужно
нажать на иконку Bluetooth и выбрать Setup Devices→Trusted Devices→Add
Device (Настройка устройств → Доверенные Устройства → Добавить
устройство). На рис. 4-11 показан мой Palm Treo, который нашел несколько
компьютеров, в том числе и scoobuntu-0 - мою систему Ubuntu. Выберите
систему Ubuntu и нажмите кнопку ОК. Когда появится предложение ввести
код доступа, выберите что-нибудь наугад. В Ubuntu должно появиться
диалоговое окно, которое попросит ввести ключ доступа. Введите в
диалоговом окне тот же самый код доступа и щелкните по OK.
Рис.4-11. Palm Treo ищет ближайшие Bluetooth устройства
Сопряжение устройств вручную
Если это диалоговое окно не появится, то вам придется взять дело в
свои руки. Отмените на вашем устройстве процедуру сопряжения (или
подождите некоторое время) и вернитесь в вашу систему Ubuntu.
Отредактируйте файл /etc/bluetooth/pin (вам необходимо при редактировании использовать sudo и набрать команду sudo vi /etc/bluetooth/pin)
— измените имеющийся там код PIN на PIN, который вы будете использовать
как одноразовый пароль для сопряжения устройств (в некоторых
устройствах допустимы только числовые PIN-ы).
Затем создайте скрипт с названием /usr/local/bin/bluepincat и сделайте его исполняемым:
#!/bin/sh # file: /usr/local/bin/bluepincat
echo -n "PIN:" cat /etc/bluetooth/pin
Закоментируйте строку pin_helper, имеющуюся в файле /etc/bluetooth/hcid.conf (опять же, нужно использовать sudo для редактирования этого файла), и добавьте следующее:
pin_helper /usr/local/bin/bluepincat;
Далее, перезагрузите демон hcid с помощью команды sudo killall -HUP hcid и снова попытайтесь начать сопряжение вашего устройства; на этот раз используйте код PIN, который вы поместили в файл /etc/bluetooth/pin
как ключ доступа. Как только вы закончите сопряжение устройств, вы
должны восстановить исходные настройки и снова перезагрузить демон hcid (это не позволит попытаться другим отгадать ваш код PIN и подключиться к вашему компьютеру без вашего ведома или согласия).
Передача файлов через Bluetooth
Предположим, у вас есть что-то на вашем мобильном телефоне, например,
фотография, которую вы сделали и которую вы хотите отправить на свой
компьютер. Если вы установите пакет obexserver, вы сможете получать
файлы, отправляемые через Bluetooth:
$ sudo apt-get install obexserver
Для приема файлов вам нужно будет зарегистрировать сервис OBEX push
(Object Exchange — обмен объектами). Это нужно будет делать каждый раз
при перезагрузке компьютера (или подсистемы Bluetooth):
$ sdptool add --channel=10 OPUSH OBEX Object Push service registered
Теперь, когда вы хотите получить файл, запустите obexserver и
отправьте файл с другого устройства. Obexserver прекратит работу после
завершения передачи:
Многие телефоны с Bluetooth, в том числе и определенные модели Treo, а
также многие телефоны Nokia и Sony Ericsson можно использовать в
качестве шлюза между вашим компьютером и интернетом. В этой конфигурации
телефон обычно считается "беспроводным модемом", но на самом деле,
связь между вашим компьютером и интернетом просто будет цифровой. Тем не
менее, поскольку в этой конфигурации используется тот же протокол
(PPP), что и в большинстве проводных телефонных подключений, проще, а
иногда и полезно, рассматривать такое соединение как модемное.
Предостережение
Прежде чем вы попытаетесь все это сделать, вам необходимо обратиться к
поставщику услуг беспроводной связи и выяснить, поддерживается ли такая
услуга и сколько она вам будет стоить. У некоторых провайдеров, таких
как T-Mobile в США, есть недорогие планы подключения с фиксированной
ценой от $ 20 и до $ 50 в месяц в зависимости от уровня обслуживания. Но
большинство провайдеров будут брать с вас оплату за каждый килобайт
данных, если вы не подключены по специальному плану, допускающему обмен
данными. Если вам не совсем ясно, сколько это будет стоить, будьте
аккуратны, так как сотовые счета могут доходить до сотен или даже до
тысяч долларов особенно в случаях, когда вы пользуетесь международным
роумингом!
Для того, чтобы подключиться, вы должны сначала создать соединение
между вашей системой Ubuntu и сопряженным устройством. Отредактируйте (с использованием sudo) файл /etc/bluetooth/rfcomm.conf и добавьте строчку для вашего устройства. Вам необходимо указать ID телефона (который вы можете получить с помощью команды hciutil scan, так как это было показано ранее):
rfcomm0 { bind yes; # Bluetooth address of the device device 00:07:E0:6A:FE:54; # RFCOMM channel for the connection channel 1; # Description of the connection comment "My Treo"; }
Затем отредактируйте файл /etc/bluetooth/hcid.conf (с использованием sudo) — перейдите к концу файла и раскомментируйте строки auth и encrypt так, чтобы они выглядели следующим образом:
Затем выполните команду sudo killall -HUP hcid для того, чтобы перезагрузить демон hcid.
Затем с помощью команды sudo rfcomm bind rfcomm0 создайте подключение. Теперь вы получили модем, который можно использовать как устройство /dev/rfcomm0. Далее, вам нужно создать несколько скриптов PPP. Первым скриптом будет chat script. Имея права пользователя root, создайте /etc/chatscripts/BluetoothPhone. Вам нужно будет заменить APN
на имя точки доступа (Access Point Name), которую использует ваш
сотовый провайдер (для получения этой информации обратитесь к вашему
оператору сотовой связи или посмотрите список имен точек доступа по
следующей ссылке
http://www.opera.com/products/mobile/docs/connect/ - к сожалению, в настоящее время страница с этим списком не поддерживается — прим.пер.):
# Get the modem's attention and reset it. "" 'ATZ'
# E0=No echo, V1=English result codes OK 'ATE0V1'
# Set Access Point Name (APN) SAY 'Setting APN\\n' OK 'AT+CGDCONT=1,"IP","APN"'
# Dial the number ABORT 'NO CARRIER' SAY 'Dialing...\\n' OK 'ATD*99***1#' CONNECT ''
Следующим скриптом является /etc/chatscripts/BluetoothPhone-Disconnect:
"" "\\K" "" "+++ATH0" SAY "GPRS disconnected."
Наконец, вам нужен скрипт PPP peers (/etc/ppp/peers/BluetoothPhone):
/dev/rfcomm0 # Bluetooth modem 115200 # speed defaultroute # use the cellular network for the default route usepeerdns # use the DNS servers from the remote network nodetach # keep pppd in the foreground crtscts # hardware flow control lock # lock the serial port noauth # don't expect the modem to authenticate itself local # don't use Carrier Detect or Data Terminal Ready replacedefaultroute debug
# Use the next two lines if you receive the dreaded messages: # # No response to n echo-requests # Serial link appears to be disconnected. # Connection terminated. # lcp-echo-failure 4 lcp-echo-interval 65535
Когда все эти скрипты будут находиться на своих местах и вы с помощью команды rfcomm bind
подключитесь к устройству rfcomm, то для того, чтобы подключиться к
интернету в любом месте, где есть сотовая связь, достаточно будет
выполнить команду sudo pppd call BluetoothPhone. Когда вы прекратите пользоваться интернетом, нажмите клавиши Ctrl-C с тем, чтобы закрыть соединение.
Чтобы получить дополнительную информации об использовании сотовой связи и Bluetooth для обмена данными, смотрите книгу Linux Unwired (Беспроводный Linux), Roger Weeks и др. (O'Reilly).