Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #106, ОКТЯБРЬ 2007 г.

Подружи мобильник с туксом

Юрий «bober» Раззоренов

Хакер, номер #106, стр. 104

(zloy.bobr@gmail.com)

Подключаемся к сотовому телефону в Linux

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

Подключаем телефон к компьютеру

Существует несколько способов подключения мобильного телефона к компьютеру: с помощью COM/USB дата-кабеля, через инфракрасный порт (IrDA) и Bluetooth. Все они имеют свои достоинства и недостатки. Дата-кабель обеспечивает более надежное соединение, к тому же иногда с его помощью можно подзаряжать телефон. В случае IrDA и Bluetooth батареи сядут на порядок быстрее.

Мне пришлось изрядно напрячься, чтобы найти подходящий кабель для своего первого телефона. Кабель, произведенный дядюшкой Ляо, не всегда обеспечивает все заложенные в телефон функции, а фирменный стоит далеко не дешево, иногда до трети стоимости самого телефона. Инфракрасное соединение не очень удобно в плане использования, ведь приходится все время держать глазки друг напротив друга, что в некоторых ситуациях, например при движении, просто невозможно. Поэтому при покупке следующего телефона основным критерием для меня было наличие Bluetooth. Преимуществ у таких моделей больше: если вдруг снова захочется поменять телефон, то старый кабель окажется бесполезным, а адаптер USB-Bluetooth - нет, плюс в местах слабого сигнала телефон можно поместить повыше, а самому устроиться где-нибудь на диване.

Пингвин, к нашей радости, поддерживает все варианты подключения, более того, в настоящее время уже не требуется пересборка ядра с наложением патчей. Современные дистрибутивы при подключении USB-Bluetooth адаптера выводят сообщение о найденном устройстве, а соответствующие программы без проблем обнаруживают подключенный мобильный телефон.

Кабель для подключения телефона к компьютеру может иметь два разъема: COM и USB. В первом случае все просто: после подключения телефон будет висеть там, где ему и положено, то есть на /dev/ttyS* (где «*» - цифра от 1 до 4). Чтобы не мучиться с поиском, можно просто ввести «dmesg | grep tty»; вывод покажет активные устройства. Изначально большая часть телефонов USB не поддерживает, поэтому, чтобы все работало, требуется специальный драйвер-конвертер. В Windows его устанавливают отдельно, а в тех дистрибутивах Linux, что мне попадались за последние два года, нужный драйвер уже был включен. Если ядро самосборное, поищи нужное командой:

$ cat /usr/src/linux/.config | grep USB | grep SERIAL

Как минимум следует включить CONFIG_USB_SERIAL. В этом случае телефон будет подключен к /dev/ttyACM0 (или 1), в некоторых дистрибутивах это может быть что-то вроде /dev/ttyUSB0. Чтобы система увидела USB-IrDA устройства, ядро должно быть собрано с CONFIG_IRDA, CONFIG_USB_IRDA, CONFIG_IRCOMM, CONFIG_IRDA_FAST_RR и прочими параметрами, включающими поддержку IrDA. Как и Bluetooth, IrDA оброс различными спецификациями, которые, правда, скрыты от пользователя, но в Linux иногда все-таки приходится с ними сталкиваться. Так, инфракрасный порт может работать аж в трех режимах: FIR (Fast, около 4 Мб/с), SIR (Serial, 115,2 Кб/с) и неофициальный MIR (Medium, 0,5-1,1 Мб/с). Последним параметром ядра, показанным выше, мы как раз и включили самый быстрый режим FIR. Теперь ставим пакет irda-utils:

$ sudo apt-get install irda-utils

После его установки в каталоге /etc/modutils (или /etc/modutils.d в зависимости от дистрибутива) появится файл irda-utils. В нем указаны модули, которые должны автоматически стартовать при загрузке системы (на этом шаге нелишним будет проверить содержимое файла /etc/modules.conf). Подключаем устройство и активируем его командой:

$ irattach irda0 -s

В результате должен загрузиться модуль ядра, а само устройство будет находиться на /dev/irda0 или /dev/ircomm0. В некоторых случаях программа не может самостоятельно определить устройство, тогда его следует указать вручную, использовав параметр '-d'.

$ irattach irda0 -d actisys -s

Полный список поддерживаемых устройств доступен по команде irattach --help. Протестировать соединение можно с помощью утилиты irdadump, которая после запуска выводит список проходящих пакетов. Само соединение должно быть видно по команде ifconfig. Есть и свой аналог команды ping – irdaping. В качестве параметра следует указать принимающий ID устройства (берется из дампа). Кроме того, значения некоторых IrDA-параметров можно подсмотреть в файловой системе /proc:

$ cat /proc/net/irda/irlap

Поддержка Bluetooth

Настройка Синего зуба во многом схожа с настройкой IrDA, отличаются только команды. Однако на заре Bluetooth в Linux была некоторая путаница, так как существовало несколько проектов, предлагающих свои драйверы, и в различных дистрибутивах можно было встретить разные решения. Но в последнее время ситуация, можно сказать, устаканилась, победил сильнейший - Bluez (www.bluez.org). Хотя команда sudo apt-cache search bluetooth выдает наличие драйверов Affix (affix.sf.net). Эти драйверы разрабатывались при поддержке Nokia, но, к сожалению, за последние 3 года не было выпущено ни одного обновления.

Bluez по умолчанию включен во все последние ядра, поэтому в современных дистрибутивах мы будем работать с именно ним. В самосборном ядре нужно включить все параметры в секции Bluetooth device drivers (CONFIG_BT_*).

Переходим к установке нужных утилит:

$ sudo apt-get install bluez-utils bluez-hcidump

В каталоге /etc/modutils мы найдем файл bluez со списком модулей:

$ cat /etc/modutils/bluez

# BlueZ modules

alias net-pf-31 bluez

alias bt-proto-0 l2cap

alias bt-proto-2 sco

alias bt-proto-3 rfcomm

alias bt-proto-4 bnep

alias bt-proto-5 cmtp

alias bt-proto-6 hidp

alias tty-ldisc-15 hci_uart

alias char-major-10-250 hci_vhci

Примечание: в таких дистрибутивах, как Slackware, все это придется вбивать вручную.

Вставляем адаптер USB-Bluetooth и проверяем, найдено ли устройство:

$ /sbin/lsmod | grep usb

hci_usb 18204 6

bluetooth 55908 15 rfcomm,l2cap,hci_usb

usbcore 134280 4 hci_usb,ohci_hcd,ehci_hcd

Кроме того, соответствующая информация должна появиться в /var/log/messages:

$ grep usb /var/log/messages

C помощью hciconfig, входящей в комплект bluez-utils, смотрим, как система видит наш адаптер:

$ hciconfig -a

hci0: Type: USB

BD Address: 00:0D:18:01:1C:05 ACL MTU: 192:8 SCO MTU: 64:8

UP RUNNING PSCAN ISCAN

RX bytes:528 acl:0 sco:0 events:42 errors:0

TX bytes:410 acl:0 sco:0 commands:30 errors:0

Если BD-адрес равен нулям и статус равняется DOWN, то это означает, что демон hcid (Bluetooth Host Controller Interface Demon) не запущен. Настройки hcid производятся в файле /etc/bluetooth/hcid.conf. Он хорошо прокомментирован, и в большинстве случаев можно вообще ничего не трогать. Параметр security user означает, что при обнаружении нового устройства все время будет запрашиваться PIN. Если его лень вводить каждый раз, меняем user на auto и в passkey прописываем код, который будет использоваться при соединении (задействуй только цифры). Совсем ленивые (но беспечные) могут использовать и none. Кстати, за получение PIN отвечает утилита bluez-pin. Если в hcid.conf вносились изменения, перезапускаем демон:

$ /usr/sbin/hciconfig hci0 up; /usr/sbin/hcid -f /etc/bluetooth/hcid.conf

И опять проверяем, обнаружено ли наше Bluetooth-устройство. Найти все активные устройства можно с помощью:

$ hcitool scan

Scanning ...

00:0F:DE:1A:34:05 T630

Итак, телефон успешно найден, соединяемся с ним:

$ sudo l2ping 00:0F:DE:1A:34:05

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

$ hcitool info 00:0F:DE:1A:34:05

Как и в случае с IrDA, здесь также есть свой снифер - hcidump, с его помощью можно прослушивать трафик, проходящий через HCI-интерфейсы. Кстати, если понадобится указать файл устройства вручную, используй /dev/rfcomm0 (в ядрах младше 2.6.19 это /dev/bluetooth/rfcomm/0).

Выходим в интернет

Чтобы получить информацию обо всех возможностях телефона, следует использовать программу sdptool, реализующую протокол Service Discovery Protocol. Ее задачей как раз и является поиск и выбор сервисов, предоставляемых другими устройствами:

$ sdptool browse 00:0F:DE:1A:34:05

Browsing 00:0F:DE:1A:34:05 ...

Service Name: Dial-up Networking

Service RecHandle: 0x10000

Service Class ID List:

"Dialup Networking" (0x1103)

"Generic Networking" (0x1201)

Protocol Descriptor List:

"L2CAP" (0x0100)

"RFCOMM" (0x0003)

Channel: 1

Profile Descriptor List:

"Dialup Networking" (0x1103)

Version: 0x0100

....

Полученной информации будет достаточно, чтобы убедиться в том, что мы не все знаем о своем телефоне. Для выхода в интернет нас интересует наличие Dial-up Networking, который, как видим, привязан к каналу номер 1. Для работы этот сервис необходимо связать с устройством rfcomm.

$ sudo rfcomm bind rfcomm0 00:0F:DE:1A:34:05 1

Проверяем, все ли сделано правильно:

$ sudo rfcomm show 00:0F:DE:1A:34:05

rfcomm0: 00:0F:DE:1A:34:05 channel 1 clean

Для удобства все настройки можно сохранить в файле /etc/bluetooth/rfcomm.conf (здесь сложностей быть не должно, внутри уже есть готовые шаблоны) и в дальнейшем запускать все одной командой sudo /etc/init.d/bluetooth start.

Программа minicom позволяет управлять модемом телефона с помощью AT-команд. Доступ в интернет настраивается с помощью kppp, wvdial или ppp. Я использую последний вариант. Рассмотрим процесс подключения к оператору Beeline. Для начала создаем файл /etc/ppp/peers/gprs такого содержания:

$ sudo mcedit /etc/ppp/peers/gprs

/dev/rfcomm1 115200 noauth defaultroute usepeerdns updetach persist

noipdefault lock connect '/usr/sbin/chat -v -f /etc/ppp/bee' novjccomp

nopcomp noaccomp noipdefault nodeflate novj nobsdcomp

И второй файл /etc/ppp/bee:

$ sudo mcedit /etc/ppp/bee

TIMEOUT 45

ABORT BUSY

ABORT "NO CARRIER"

ABORT ERROR

"" 'ATE1'

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

OK ATD*99***1#

CONNECT

Для подключения к другим операторам достаточно изменить третью строку снизу. Например, в случае MTC вместо строки «internet.beeline.ru» пишем «internet.mts.ru». В некоторых случаях, возможно, придется изменить номер дозвона, проставив вместо «*99***1» значение, указанное на сайте своего мобильного оператора. Теперь запускаем демон pppd:

$ sudo /usr/sbin/pppd call gprs

В другой консоли лучше ввести tail -f /var/log/messages, чтобы проследить за ходом соединения. На экране мобильного телефона должен отобразиться процесс подключения. Поднятый интерфейс ppp0 (для проверки - ifconfig ppp0) говорит о том, что со связью с мобильным оператором все ок. И не забудь занести в /etc/resolv.conf данные DNS-сервера (можно любого). Теперь, для того чтобы выйти в интернет, достаточно набрать всего две команды:

$ sudo /etc/init.d/bluetooth start

$ sudo /usr/sbin/pppd call gprs

Примечание: на сайте linuxmobile.lrn.ru выложены готовые скрипты для различных операторов мобильной связи.

Программы для работы с телефоном

Сразу после подключения телефон готов принимать и отправлять файлы. Чтобы передать файл на телефон, достаточно в контекстном меню Konqueror выбрать «Действия –> Передать через Bluetooth». Появится окно Bluetooth File Transfer, и будет выполнен поиск подключенных устройств, отображенных в поле «Устройство». В окно «Отправляемый файл» можно перетаскивать другие файлы, подготовленные для отправки на телефон или другое Bluetooth-устройство. Нажимаем «Отправить», и файл уходит.

Обратный процесс также прост. При попытке отправить файл с телефона появляется запрос на разрешение приема файла. Нажимаем «Принять» и в окне Incoming File Transfer указываем, куда сохранить принятый файл. Чтобы в дальнейшем система автоматически принимала решение о приеме или блокировке, установи флажок «Запомнить это устройство» и в списке «Последующие правила...» укажи действие – Allow («Разрешить») или Deny («Блокировать»). Если ничего не работает, попробуй запустить демон kbluetoothd.

Следующее очень удобное приложение - KDE KmobileTools (www.kmobiletools.org), которое позволяет контролировать мобильные телефоны с компьютера. Поддерживается отправка sms, набор номера, телефонная книга и мониторинг соединения. Кроме этого, оно интегрируется в среду KDE и может работать с менеджерами персональной информации Kontact и KAddressBook. Работоспособность протестирована с телефонами Motorola, Nokia, Siemens, Sony Ericsson и LG. Но должно поддерживаться любое устройство, понимающее AT-команды. В репозитарии Ubuntu эта программа присутствует. Достаточно набрать sudo apt-get install kmobiletools и можно работать. По умолчанию программа будет искать телефон по /dev/modem (как и многие другие), поэтому удобнее сразу после настройки телефона создать символическую ссылку с таким именем. После подключения в основном окне будет выведена информация о заряде батарей и уровне сигнала. Интерфейс не переведен, но разобраться совсем несложно. Сначала синхронизируем контактную книгу, выбрав Phonebooks и нажав Refresh. Правда, у меня все имена, набитые кириллицей, превратились в кракозябры. Теперь, чтобы отправить sms, достаточно кликнуть по New SMS, затем по Pick Number, выбрать номер из списка и нажать на Add Destination. Если sms отправляется нескольким абонентам, повторяем операцию. Печатаем текст в специальном поле и посылаем по Send SMS. Для тех, кто не любит набивать sms'ки, это то, что доктор прописал. Рекомендую.

Для синхронизации телефонной книги мобильного телефона и KAddressBook можно использовать программу Kandy (kandy.kde.org). Она есть в репозитарии Ubuntu, поэтому установить ее просто: sudo apt-get install kandy. После установки следует зайти в «Настройка –> Настроить Kandy» и в поле «Последовательное устройство» указать на файл устройства, к которому подключен телефон. Интерфейс Kandy разделен на две панели адресов, позволяющих визуально сравнивать списки. Для слияния или синхронизации адресных книг нажимаем одноименные кнопки. Кроме этого, в Kandy есть терминал, с помощью которого можно управлять телефоном посредством AT-команд. Причем особых знаний для этого не требуется, просто выбираем в списке команду, и в окне справа появляется результат. В основном окне также показана информация об уровне сигнала и заряде батарей.

Еще две программы с практически аналогичной функциональностью - SCMxx (www.hendrik-sattler.de/scmxx) и графический интерфейс gscmxx (gscmxx.sf.net). С их помощью можно копировать файлы на мобильник и обратно, удалять их, работать с адресной книгой, отправлять sms, синхронизировать время, получать информацию о состоянии телефона и прочее. Например, посмотрим, чем сейчас занимается мобила:

$ scmxx --info --device /dev/rfcomm0

Кроме scmxx в комплект входят еще три утилиты: adr2vcf, apoconv и smi. Первые две предназначены для преобразования адресных книг в разные форматы, третья - для преобразования бинарных sms-файлов в текстовый или CSV. В списке поддерживаемых телефонов одни Siemens’ы, однако с моим SonyEricsson’ом она тоже нашла общий язык.

Единственное, что удалось найти на сайте проекта KDE, - это скрипт BlueamaroK (www.kde-apps.org/content/show.php?content=33258), позволяющий управлять плеером Amarok с помощью Bluetooth. Используя мобильный телефон, можно останавливать, запускать на воспроизведение, просматривать плей-лист, выбирать мелодию, редактировать некоторую информацию и прочее. В репозитарии его нет, поэтому качаем с сайта. Теперь в Amarok выбираем «Сервис –> Управление сценариями –> Установить сценарий» и указываем на архив. После установки нажимаем кнопку «Выполнить», вводим в окне устройство, к которому подключен мобильник. В случае успеха на экране мобильного появится надпись «BlueamaroK» либо текущая мелодия. Входим на телефоне в меню «Связь –> Аксессуары», выбираем BlueamaroK и получаем доступ к функциям управления проигрывателем.

Еще одна сладкая парочка - Gammu (www.gammu.org) и интерфейс Wammu (wammu.eu). Использование кросс-платформенной библиотеки wxPython позволяет запускать ее не только в Linux/*BSD, но и в Windows. Принцип настройки аналогичен, после запуска заходим в Setting и в «Connection -> Device» выбираем устройство. Теперь можно редактировать и импортировать контакты, список задач, отправлять sms и mms, экспортировать сообщения в e-mail, управлять некоторыми настройками телефона, вроде поиска FM-станций. По умолчанию в списке присутствуют только Nokia и Siemens, но по идее программа должна работать и с другими марками.

Быстро отправить sms можно и с помощью GNOME Phone Manager, который в KUbuntu устанавливается командой sudo apt-get install gnome-phone-manage. После его запуска в панели задач появится значок, выбираем Preferences и в Connection указываем устройство. Теперь, когда телефон обнаружен, достаточно вызвать Send Message, ввести номер телефона (синхронизации с адресной книгой нет) и набрать сообщение. Все просто и понятно.

Пользователям Моторолок на базе P2K (C380/C650/E398E680/E680i/A780 и другие) хочу порекомендовать файловый менеджер moto4lin (moto4lin.sf.net). С его помощью можно легко закачать, скачать и удалить файлы (в том числе и Java-мидлеты) на телефоне, отредактировать память SEEM, в которой хранятся все основные настройки сотового.

Это далеко не все программы для работы с мобильным телефоном, но остальные, надеюсь, ты сможешь найти сам. Удачи.

WWW

Исчерпывающую информацию о работе инфракрасных устройств можно получить на сайте проекта Linux/IrDA (irda.sf.net) и в Linux Infrared HOWTO (www.tldp.org/HOWTO/Infrared-HOWTO).

Содержание