- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF93:Инструменты мобилизации
Материал из Linuxformat.
Содержание |
Мобилизация в стиле 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. Теперь вы можете пользоваться вашим любимым файловым менеджером, и
Хочется также отметить еще одну виртуальную файловую систему, SieFS http://chaos.allsiemens.com/ . На странице автора сказано, что она предназначена для мобильных телефонов фирмы Siemens. Работоспособность на телефонах других фирм я не проверял.
работать с файлами мобильного телефона как с обычным носителем. Для размонтирования необходимо ввести команду:
$ 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-памятью, но, надеюсь, это всего лишь вопрос времени.