Журнал LinuxFormat - перейти на главную

LXF93:Инструменты мобилизации

Материал из Linuxformat
Версия от 17:16, 27 апреля 2008; Lockal (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Содержание

Мобилизация в стиле Linux

Навязчивая реклама утверждает, что мобильность - один из основных факторов, влияющих на имидж современного человека, и мы в редакции LXF ежедневно получаем пачки писем с просьбами «помочь настроить сотовый в Linux». К счастью, Павел Воронцов готов дать ответы на все интересующие вас вопросы.

Обладатели современных мобильных телефонов всегда сталкиваются с одной очень непростой задачей – обеспечением его связи с ПК или ноутбуком. Зачастую проблемы начинаются уже с момента покупки, когда радостный обладатель вполне многофункционального устройства обнаруживает отсутствие интерфейсного кабеля, а после его приобретения удивляется тому, что телефон при подключении не определяется как устройство хранения данных из-за отсутствия специализированного ПО. Конечно, есть другие интерфейсы взаимодействия, такие как IrDA и Bluetooth, но проблему установки ПО это не решает. Пользователям Windows все же проще – производители мобильных телефонов обычно не ленятся писать разнообразные, громоздкие и зачастую не слишком функциональные программы. А как быть тем, кто выбрал Linux? Попробуем разобраться.

OBEX. Обмен файлами

Для передачи данных между различными мобильными устройствами и ПК обычно используется протокол обмена объектами OBEX (OBject Exchange). На сегодняшний день, данный протокол реализован на многих устройствах: PDA, таких как Palm Pilot и мобильных телефонах Siemens, Nokia, Sony-Ericsson и других. OBEX был разработан организацией IrDA (Infrared Data Association) и является высокоуровневым протоколом. Хотя первоначально он создавался для инфракрасных сетей, сейчас его можно использовать и с другими транспортами, такими как TCP/IP и Bluetooth. В Linux этот протокол реализует открытый проект OpenOBEX http://openobex.triq.net/

Для примера возьмем мобильный телефон Benq-Siemens M81 и попробуем настроить соединение в Ubuntu Linux 6.10. Данный телефон имеет два способа подключения к ПК: посредством кабеля или через Bluetooth. Далее, чтобы не путать читателя, мы будем пользоваться вторым из них, тем более, что он является более универсальным. В Linux существует несколько реализаций данного протокола, но мы остановимся на BlueZ http://www.bluez.org/ Соответствующий модуль должен быть проинсталлирован и загружен в ядро (в современных дистрибутивах это происходит автоматически), кроме того, потребуется установить два пакета: bluez-libs и bluez-utils. Последний содержит демоны Bluetooth, файлы конфигурации и консольные утилиты. Подключите Bluetooth-адаптер к ПК, внесите необходимые изменения в файл /etc/ bluetooth/hcid.conf (см. ниже) и запустите демон:

$ sudo /etc/init.d/bluetooth start

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

С паролями все ясно, теперь давайте проверим, все ли мы правильно сделали. Запустите команду hciconfig (HCI – это Host Controller Interface или, по-простому, ваш Bluetooth-адаптер):

$ hciconfig
hci0: Type: USB
BD Address: 00:02:72:CC:EC:B2 ACL MTU: 1017:8 SCO MTU: 64:8
UP RUNNING PSCAN ISCAN
RX bytes:391 acl:0 sco:0 events:17 errors:0
TX bytes:317 acl:0 sco:0 commands:17 errors:0

Устройство определено и работает (статус: UP). Мы также видим его MAC-адрес: 00:02:72:CC:EC:B2. Если устройство имеет статус DOWN, попробуйте ввести команду:

$ sudo hciconfig hci0 up && hciconfig

Теперь давайте поищем наш мобильный телефон. Для этого служит команда:

$ hcitool scan
Scanning ...
00:11:22:33:44:55 MyMobile

Как видно, устройство обнаружено: программа вывела имя и MAC-адрес телефона. Осталось только разобраться, как обеспечить обмен файлами. OpenOBEX – это набор библиотек, реализующих протокол, а нам необходимы программы, использующие его. На сайте разработчика OpenOBEX вы найдете пакеты ObexFTP и ObexFS – они-то нам и понадобятся. Вот так, например, можно вывести содержимое корневого каталога нашего тестового телефона:


$ obexftp -b00:11:22:33:44:55 -B6 -l
Browsing 00:11:22:33:44:55 ...
Channel: 6
Connecting...done
Receiving "(null)"...\<?xml version="1.0"?>
<!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd">
<folder-listing version="1.0">
<folder name="Data" modified="19970101T000000" user-perm="W"
group-perm="W" />
<folder name="Cache" modified="19970101T000000" user-perm="W"
group-perm="W" />
<folder name="Config" modified="19970101T000000" user-perm="W"
group-perm="W" />
<folder name="MMCard" modified="19970101T000000" user-perm="W"
group-perm="RW" />
</folder-listing>
done
Disconnecting...done

Обратите внимание, что в качестве параметров ObexFTP я указал MAC-адрес телефона (00:11:22:33:44:55) и номер канала (6). Список всех доступных каналов определяется командой:

$ sdptool browse 00:11:22:33:44:55
...
Service Name: OBEX File Transfer Service RecHandle: 0x11106 Service Class ID List:
"OBEX File Transfer" (0x1106) Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003) Channel: 6
"OBEX" (0x0008) Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100 Profile Descriptor List:
"OBEX File Transfer" (0x1106) Version: 0x0100 ...

Нас интересует профиль под названием «OBEX File Transfer», его номер канала (Channel) как раз и равен 6. Устройства Bluetooth пользуются каналами во многом аналогично портам TCP/IP: для передачи разнотипных данных с одного адреса. Вы можете, например, одновременно использовать стереогарнитуру, работать в Интернете и копировать файлы. Существует несколько профилей Bluetooth, которые, в зависимости от задачи, задействуют тот или иной канал связи. Если вы посмотрите на полный список, то увидите профиль под названием «SerialPort». С телефоном можно работать, как с обычным COM-портом, но для этого его нужно предварительно настроить утилитой rfcomm:

$ sudo rfcomm bind rfcomm0 00:11:22:33:44:55 1

После этого вызов ObexFTP можно переписать, избавившись от малопонятных MAC-адресов и номеров каналов:

$ obexftp -t /dev/rfcomm0 -l

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

rfcomm0 {
bind yes;
device 00:11:22:33:44:55;
channel 1;
comment "Benq-Siemens M81";
}

Программа ObexFTP позволяет обмениваться файлами, но пользоваться ею не слишком удобно – это консольное приложение, выводящее данные в формате XML. Неудивительно, что для нее существует несколько графических оболочек. Из их числа стоить отметить ObexTool – это самое простое решение в нашей непростой задаче. Программа имеет простой графический интерфейс и позволяет исследовать файловую систему мобильного телефона, а также совершать основные действия с файлами и каталогами.

Есть и второй путь, более правильный и интересный: смонтировать файловую систему телефона как обычный диск. Проблема состоит в том, что вы не имеете доступа к файловой системе напрямую: все ваше общение происходит на уровне протокола OBEX, но выход есть – создание виртуальной файловой системы. В этих словах нет ничего страшного. Для нас, пользователей, это означает, что нужно установить еще несколько пакетов и произвести кое-какие настройки. Все остальное возьмет на себя FUSE (Filesystem in Userspace), неоднократно упоминавшийся на страницах нашего журнала. Это модуль ядра и библиотеки, которые позволяют просто создавать и монтировать пользовательские файловые системы в режиме пользователя. Модуль ядра, скорее всего, у вас уже установлен, так что необходимо просто добавить пакеты libfuse2 и fuse-utils или собрать их самому. Все подробности можно найти на сайте http://fuse.sourceforge.net/

Для начала подготовим каталог для монтирования и выполним необходимые системные настройки. Во-первых, добавим текущего пользователя в группу fuse, чтобы он мог монтировать файловые системы:

$ sudo usermod -aG fuse имя_пользователя

Во-вторых, создадим каталог монтирования:

$ sudo mkdir -m777 /media/mobile

Теперь перейдем к тому, ради чего мы все это затевали: к монтированию виртуальной файловой системы ObexFS. Введем команду:

$ obexfs -b00:11:22:33:44:55 -B6 /media/mobile

или

$ obexfs -t /dev/rfcomm0 /media/mobile

Файловая система будет смонтирована в /media/mobile. Теперь вы можете пользоваться вашим любимым файловым менеджером, и


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

$ fusermount -u /media/mobile

Существуют и другие способы монтирования, например, всем известной командой mount, также есть возможность прописать файловую систему в /etc/fstab. Все эти способы подробно описаны на странице программы.

Hayes. Совсем не забытое старое

Итак, с протоколом OBEX мы немного разобрались. Обмен файлами – задача важная, но не единственная. Плюс мобильного телефона – маленький размер – одновременно является и его минусом. ПК может сделать работу с телефоном более комфортной: например, читать SMS-сообщения с экрана монитора ПК намного приятнее, чем с маленького дисплея, а набирать их на большой клавиатуре куда удобнее, чем на маленькой 12-клавишной. Здесь возникает целый спектр задач: управление телефонными книгами, резервное копирование данных, синхронизация, да и просто использование коммуникационных возможностей мобильного телефона с ПК.

Для управления телефоном используется протокол Hayes. Это очень старый протокол, который был создан для управления модемами, но не потерял актуальности и по сей день. Он поддерживается практически всеми мобильными телефонами. Управление происходит посредством так называемых AT-команд. Есть стандартные команды, которые подойдут к любому устройству, но есть и специальные для конкретной модели телефона. К счастью, нам не придется писать эти команды вручную, поскольку существует множество разнообразных программ, способных сделать это за нас.

Начнем, как это ни странно, с консольных приложений. Преимущества таких программ очевидны: они очень мощные и незаменимы при автоматизации вашей работы. Например, администратор, желающий получать оперативную информацию о работе сервера каждый час или при возникновении аварии, с легкостью напишет скрипт, использующий консольную программу, которая будет отсылать SMS с нужной информацией на определенный номер. Самый простой вариант – программа SCMxx http://www.hendrik-sattler.de/scmxx . К сожалению, она ориентирована на мобильные телефоны Siemens. Во всяком случае, автор не привел в списке совместимых устройств телефоны других фирм, но, скорее всего, большинство функций должно работать. Вот простой пример ее использования: данная команда отправляет Flash-SMS на заданный номер:

$ scmxx --device=/dev/rfcomm0 --send --sms --direct --flash --unicode --number="+79031234567" --text="Привет, я flash-sms!"

Flash-SMS это специальное сообщение, сразу же отображаемое на экране телефона при получении (в разных аппаратах это реализовано по-разному). Такие сообщения обычно присылают сотовые операторы и с обычного мобильного телефона отправить его нельзя. Но так как программа сама формирует SMS-сообщение и может выставить любые значения в его служебных полях, то вы без труда отправите такое SMS, поразив тем самым своего друга или подругу. Разумеется, это не все, на что способна программа; вот пример резервного сохранения телефонной книги телефона в файл:

$ scmxx –device /dev/rfcomm0 --get --pbook --mem=SM --out=SM.pb

Обратимся к другим вариантам. Gammu http://www.gammu.org/ – это даже не программа, это целый проект, который активно развивается. Список поддерживаемых устройств очень велик, функциональность просто впечатляет. Gammu состоит из двух частей: ядра, представленного библиотекой, и самой консольной программы gammu. Такое исполнение очень удобно для разработчиков, которые не заставили себя долго ждать: на данный момент существует порядка 10 разных графических оболочек, использующих ядро gammu. Перейдем сразу к обзору основных графических оболочек: они, конечно, не обеспечивают полный функционал ядра, но с ними легче работать пользователю.

Для начала установим пакет libgammu1. Он содержит то самое ядро, которое нам так необходимо. Пакет gammu содержит консольную программу, и если вы не хотите пользоваться ею, устанавливать его не обязательно.

Начнем с программы Wammu http://wammu.eu/ . Это простой менеджер мобильного телефона, позволяющий редактировать телефонную книгу, читать и отправлять SMS-сообщения, звонить, делать резервные копии. Wammu также умеет работать с календарем и заметками. Программа написана на wxPython и использует wxWidgets, кросс-платформенный GUI-инструментарий [в Linux его вызовы обычно транслируются GTK+, – прим. ред.]. Это означает как то, что программа может работать и в других операционных системах, так и то, что вам придется установить соответствующие библиотеки.

Вторая программа - KMobileTools http://www.kmobiletools.org/ . По функциональности очень похожа на предыдущую, но гораздо удобнее и обладает очень приятным интерфейсом. Программа написана для KDE, соответственно использует KDE-библиотеки. KMobileTools не работает с органайзером, зато может синхронизировать адресную книгу мобильного телефона с адресной книгой KDE.

Существуют и другие программы, ориентированные на конкретные модели телефонов. Например, для аппаратов Nokia существует программа gnokii http://www.gnokii.org/ со своими графическими оболочками, а для телефонов Motorola - программа moto4lin http://moto4lin.sourceforge.net/ . Также, не помешает заглянуть на сайт производителя телефона, там тоже можно найти специализированное ПО для Linux. Например, для телефонов Benq-Siemens существует программа XMPM (X Mobile Phone Manager).

GPRS – это просто

Перейдем к заключительной части статьи: настройке подключения к Интернету через GPRS. GPRS (General Packet Radio Service) – это надстройка над технологией мобильной связи GSM, осуществляющая пакетную передачу данных. Это позволяет обмениваться данными с внешними сетями, в том числе, Интернетом. При использовании GPRS информация собирается в пакеты, которые передаются через неиспользуемые в данный момент голосовые каналы. Такая технология предполагает более эффективное потребление ресурсов сети GSM. Существуют и другие технологии передачи данных, например CSD (Circuit Switched Data). По сути, это аналоговый модем, работающий в голосовом канале сети GSM, но ее скорость и качество связи явно уступают GPRS. С учетом того, что платить абоненту придется за время, а не за трафик, использовать CSD просто невыгодно.

Вместо того, чтобы запутывать читателя «рецептами» настройки соединения c Интернетом через GPRS в Linux, мы постараемся объяснить сам принцип этой настройки. В последний раз я настроил GPRS-соединение спустя минуту после подключения телефона к ПК, и не потому что я фокусник, а потому что это действительно просто.

Соединение устанавливается посредством протокола PPP (Point-to-Point Protocol) – это стандартный механизм для создания и запуска IP (Internet Protocol) и других сетевых протоколов на последовательных линиях связи. Для наглядности процесса будем использовать программу KPPP.

Для начала добавим и настроим модем. Тут надо выбрать устройство последовательного порта, в нашем случае это будет /dev/rfcomm0. Необходимо также написать дополнительную строку инициализации для создания профиля соединения. Она имеет следующий вид

AT+CGDCONT=<cid>,<PDP_type>,<APN>

<cid> - это идентификационный номер создаваемого профиля, именно на него будет ссылаться команда при установке соединения. Обычно этот параметр равен «1», но вы можете использовать и другой номер, например, для создания второго профиля для другого оператора. <PDP type> - тип соединения - "IP", <APN> - адрес точки доступа, его нужно узнать у оператора. Для уверенности попробуйте ввести эту команду в терминальной программе (скажем, CuteCom, см. LXF92) и посмотрите на ответ телефона: он должен быть положительным. Например, для оператора Beeline строка инициализации будет следующей:

AT+CGDCONT=1,"IP","internet.beeline.ru".

Теперь необходимо ввести номер телефона. По сути, это вовсе не номер, а продолжение команды ATD, которая должна установить GPRS-соединение для созданного нами профиля. Вот ее формат:

ATD*<GPRS_SC>*<L2P>*<cid>#

Параметры разделены символами * и заканчиваются символом #. <GPRS_SC> – это идентификатор принадлежности строки к GPRS, а не к аналоговому соединению, он всегда равен 99 (GPRS Service Code = 99). <L2P> – требуемый протокол 2-го уровня, в данном случае, значение параметра можно опустить. И наконец, <cid> – идентификатор профиля, созданного при инициализации. Как видите, все просто. «Номер телефона» – *99***1#. Осталось узнать у оператора имя пользователя и пароль и установить соединение.

В принципе, на этом можно было бы и закончить, но есть еще один маленький нюанс. Мы настроили файловую систему, менеджер мобильного телефона и подключение к Интернету, используя одно и то же устройство – /dev/rfcomm0. Это нерационально, так как вы не сможете использовать все услуги одновременно: постоянно будут конфликты. Необходимо настроить разные задачи на собственные каналы Bluetooth. Так как протокол OBEX менее требователен к типу подключения, для него не обязательно выделять COM-устройство (/dev/rfcomm0). Лучше подключиться напрямую, указывая MAC-адрес и номер канала связи (6). С протоколом Hayes сложнее, ему необходима эмуляция COM-порта. Среди профилей Bluetooth вы найдете один с именем «Dialup Networking». В моем случае, его номер канала равен 2. Создайте еще одно устройство – /dev/rfcomm1, настройте его на 2-й канал и используйте для подключения к Интернету:

$sudo rfcomm bind rfcomm1 11:22:33:44:55 2

Думаю, мне удалось показать, что работать с мобильным телефоном в Linux можно ничуть не хуже, чем в Windows, более того: в Linux эта работа эффективнее, а иногда и проще. Здесь есть очень много универсальных программ, а в Windows их меньше, из-за наличия родного ПО от производителя. В том, что касается виртуальной файловой системы, Linux вообще вне конкуренции. Есть, конечно, и минусы. Самый яркий - отсутствие программ для обновления прошивки телефона и работы с Flash-памятью, но, надеюсь, это всего лишь вопрос времени.

Персональные инструменты
купить
подписаться
Яндекс.Метрика