Все о Linux. LinuxRSP.Ru


Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

Почтовый клиент Trojita 0.7

Состоялся релиз открытой аппаратной платформы icoBoard 1.0

Релиз компилятора SDCC 3.6.0

Релиз Qt 5.7.0 и Qt Creator 4.0.2

Первый релиз Nextcloud, форка ownCloud

Релиз LibreCAD 2.1.0. Команде разработчиков нужна помощь!

Релиз SolveSpace 2.1

xterm 325

До конца года состоится выход российских смартфонов на ОС Sailfish

Duktape 1.5.0 - встраиваемый движок JavaScript

FreeBSD доступна в Azure Marketplace

Программа PyCon Russia 2016 готова

Perl 5.22.0

Релиз FastNetMon1.1.2 - открытого решения для мониторинга DoS/DDoS атак

xCube - светодиодная платформа за 37 долларов

Hg/Mercurial 3.4

Релиз Jython 2.7.0

Релиз OpenBSD 5.7

Вышел Stellarium 0.13.3

Google

 Новые статьи :

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

Решение проблем при использовании "1c предприятие" 8.2 в Linux

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки







Rambler's Top100





 
 

Алё, говорит Linux. Как слышно? Приём! (Linux + OBEX + GPRS...)

Автор: Олег Бройтман
http://phd.pp.ru/
phd@phd.pp.ru
Предоставлено специально для www.linuxrsp.ru

В прошлый раз мы наладили связь с сотовым телефоном и настроили Bluetooth в Linux. Встаёт задача эту связь использовать. С самого начала автор собирался использовать Bluetooth для трёх вещей: научиться налаживать Bluetooth в Linux - это сделано; обмениваться файлами - сохранить записную книжку, загрузить мелодии, картинки, мидлеты; и использовать GPRS. Решениям этих двух задач и посвящена статья.

OBEX

OBEX (OBject EXchange) - это протокол для обмена файлами между мобильными устройствами (сотовые телефоны, КПК и т.п.). Не всякое устройство этот протокол реализует, но S55 его поддерживает. В Linux этот протокол реализует пакет OpenOBEX. Он позволяет использовать 3 транспорта - TTY (для соединения телефона с компьютером кабелем RS-232 или USB), IrDA (инфракрасный порт) и Bluetooth. На основе реализации OpenOBEX существует несколько библиотек и программ для доступа к мобильным телефонам. Особенно интересно выглядит SieFS - файловая система для доступа к телефона Siemens; SieFS является модулем для FUSE - Filesystem in USErspace; это модуль ядра и демон, которые позволяют создавать в Linux файловые системы, работающие вне ядра. Другая интересная идея - модуль виртуальной файловой системы для GNOME. Начнём, однако, с простого - программы ObexFTP; она работает полностью вне ядра, и ничего, кроме OpenOBEX не требует.

Компиляция OpenOBEX и ObexFTP не представляет из себя ничего особенного, надо лишь для вызова ./configure указать, где находятся библиотеки Bluetooth. Устанавливаем OpenOBEX и ObexFTP, скажем, в /usr/local/obex. ObexFTP 0.10.3 у автора не заработал - Bluetooth он ещё не понимает, а по rfcomm (эмуляция TTY поверх Bluetooth) не хочет соединяться. Тут надо не растеряться, а пойти в Google поискать информацию. Находим упоминание про версию 0.10.4. Ищем её или более позднюю версию на сайте ObexFTP. Сайт неудобен для навигации и поиска, но в конце концов ссылка обнаруживается внизу страницы загрузки. ObexFTP начиная с версии 0.10.4 уже понимает Bluetooth, и она наконец заработала.

Перед тем, как пользоваться OBEX, необходимо посмотреть, какие сервисы предоставляет телефон, и по какому каналу можно использовать ObexFTP. Разделение потока данных на каналы позволяет подключаться к телефону нескольким программам одновременно, скажем, одновременно использовать OBEX и GPRS. Список сервисов показывает команда sdptool browse 00:CP:AD:RE:SS (будем считать, что это адрес телефона). Эта команда выдаёт длинную "простыню", состоящую из секций - описаний сервисов. В каждой секции надо обращать внимание на Service Name, имя сервиса. Например, DUN (Dial-up Networking). Для ObexFTP нужен сервис OBEX File Transfer. Эта секция выглядит приблизительно так:

Service Name: OBEX File Transfer
Service RecHandle: 0x10005
Service Class ID List:
  "Obex File Transfer" (0x1105)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel/Port: 11
  "OBEX" (0x0008)
Profile Descriptor List:
  "Obex File Transfer" (0x1105)
    Version: 1
Канал для доступа ObexFTP - 11.

Пользоваться ObexFTP просто. Получить листинг корневой директории: obexftp -b 00:CP:AD:RE:SS -B 11 -l / . Листинг директории Pictures: obexftp -b 00:CP:AD:RE:SS -B 11 -l /Pictures. Листинги директорий ObexFTP выдаёт в XML. Можно этот XML отпарсить и получить полезную информацию. Чтение файлов из телефона: obexftp -b 00:CP:AD:RE:SS -B 11 -c Pictures -g Dog.jpg - перейти в директорию Pictures и считать (get) файл Dog.jpg. Загрузить (put) файл в телефон: obexftp -b 00:CP:AD:RE:SS -B 11 -c Java -p Chess.jar.

Протокол OBEX позволяет создавать и удалять файлы и директории, и ObexFTP все эти операции полностью реализует. Автор создал VFS - виртуальную файловую систему для Midnight Commander. MC - замечательный менеджер файлов для тех, кто привык к клонам Commnder'ов, и автор давно уже хотел научиться писать VFS для MC, а тут такой случай представился! Скрипт написан на языке Python, во-первых, потому что это замечательный язык, а во-вторых, потому что нужен парсер XML для чтения листингов, которые выдаёт ObexFTP. На shell такой парсер написать было бы нелегко.

GPRS

В стандарте GSM можно передавать по речевому каналу разнообразные данные - например, факсы, трафик Интернет. Но это, во-первых, очень медленно - речевой канал передаёт данные со скоростью 9600 бит в секунду, максимум 14400. Во-вторых, очень дорого - занят целый канал, оплата ведётся по времени передачи данных. Поэтому в GSM помимо передачи речи есть несколько способов передачи данных - SMS, USSD, GPRS. Их достоинство в том, что они передаются не по речевому каналу, а либо по дополнительным каналам, либо разделением основного канала на сегменты или пакеты; и оплата берётся не за время использования, а за объём трафика. SMS и USSD передают текстовые сообщения, GPRS - произвольные данные, скажем, трафик Интернет, или мультимедийные сообщения (MMS). Передача трафика GPRS ведётся путём разделения канала на тайм-слоты. Один тайм-слот может передавать данные со скоростью 13.5-14.3 и даже 21 Кбит/сек. в зависимости от способа кодирования. Но одному пользователю может быть выделено несколько тайм-слотов, в зависимости от оборудования, установленного у оператора, в зависимости от возможностей мобильного устройства, и в зависимости от загруженности сети. Максимальная пропускная способность канала GPRS - 172 Кбит/сек (8 тайм-слотов по 21 Кбит/сек). Максимальная, конечно, не достигается никогда, особенно если учесть, что трафик GPRS у операторов имеет обычно меньший приоритет, чем голосовой.

Использовать GPRS в телефоне совсем просто. Подключаете у оператора услугу, включаете GPRS в телефоне - и пользуетесь. Шлите и принимайте мультимедийные сообщения (MMS). Пишите и читайте email, если телефон реализует постовые протоколы (SMTP, POP3, IMAP). Или загрузить в телефон мидлет Java, реализующий эти протоколы, плюс, скажем, ICQ/IRC/Jabber, и выходите в Сеть пообщаться.

Использовать GPRS в компьютере не намного сложнее. Подключаете телефон к компьютеру кабелем, через инфракрасный порт (IrDA), или Bluetooth, и запускаете программу доступа к Интернету через модем. В Linux это программа pppd. Для доступа к сотовому оператору надо настроить pppd.

В Сети есть подробные инструкции по использованию GPRS в Linux, в том числе и посредством Bluetooth. Остаётся адаптировать их для конкретных условий. Это совсем просто.

Файл /etc/ppp/peers/beeline-gprs (автор пользуется услугами Би Лайн GSM) и пояснения:

# Most GPRS phones don't reply to LCP echo's
lcp-echo-failure 0
lcp-echo-interval 0
Не использовать LCP echo - большинство провайдеров GPRS не отвечают на сигналы LCP echo.
# Connect chat
connect /etc/ppp/peers/beeline-gprs-connect-chat
Процедура установки связи описана в отдельном файле /etc/ppp/peers/beeline-gprs-connect-chat (см. ниже).
#/dev/ttyUSB0 for USB
#/dev/ttyS0 # serial port one
#/dev/ttyS1 # serial port two
#/dev/ircomm0 # IrDA serial port one
/dev/rfcomm0 # Bluetooth serial port
Использовать указанное устройство, эмулирующее TTY. При подключении посредством транспорта Bluetooth эмуляцию терминала надо включить командой rfcomm bind 0 00:CP:AD:RE:SS 1; здесь 0 - номер устройства /dev/rfcomm0, а 1 - номер канала DUN (Dial-Up Networking).
# Serial port line speed
115200 # fast enough
#57600 # perhaps useful with IrDA as some phones don't like
       # speeds higher than this
Скорость порта TTY. Для инфракрасного порта рекомендуется понизить.
# Hardware flow control:
# Use hardware flow control with cable, Bluetooth and USB but not with IrDA.
crtscts  # serial cable, Bluetooth and USB, on some occasions with IrDA too
#nocrtscts # IrDA
Для всех типов подключения, кроме ИК использовать аппаратное управление потоком данных.
# Ignore carrier detect signal from the modem:
local
Игнорировать управляющие сигналы модема.
# pppd must not propose any IP address to the peer!
noipdefault

# Accept peers idea of our local address
ipcp-accept-local
Не предлагать никаких адресов по умолчанию. Использовать для создаваемого интерфейса ppp0 адрес, предложенный провайдером.
# Add the ppp interface as default route to the IP routing table
defaultroute

# Newer pppd's also support replacing the default route, if one is
# already present, when the GPRS connection should be set as the default route
# to the network
#replacedefaultroute
Установить маршрутизацию по умолчанию используя создаваемый интерфейс ppp0. В тех версиях pppd, которые это умеют - заменить маршрутизацию по умолчанию, если она была установлена (например, локальная сеть); не забудьте раскомментировать replacedefaultroute, если Ваш pppd это позволяет; узнать, позволяет или нет, можно в man pppd.
# DNS servers from the phone:
# some phones support this, some don't.
usepeerdns
Использовать сервера DNS, предоставляемые провайдером GPRS.
# ppp compression:
# ppp compression may be used between the phone and the pppd, but the
# serial connection is usually not the bottleneck in GPRS, so the
# compression is useless (and with some phones need to disabled before
# the LCP negotiations succeed).
novj
nobsdcomp
novjccomp
nopcomp
noaccomp
Отключить все виды сжатия заголовков и данных PPP.
# The phone is not required to authenticate:
noauth
Аутентификация телефона не требуется.
# Username and password:
# If username and password are required by the APN, put here the username
# and put the username-password combination to the secrets file:
# /etc/ppp/pap-secrets for PAP and /etc/ppp/chap-secrets for CHAP
# authentication. See pppd man pages for details.
user beeline
Имя пользователя для подключения. Пароль берётся из файла /etc/ppp/pap-secrets (см. ниже).

Файл /etc/ppp/peers/beeline-gprs-connect-chat:

exec chat -vS  \
    '' \rAT \
    TIMEOUT 12 \
    OK ATH \
    OK ATE1 \
    OK 'AT+CGDCONT=1,"IP","internet.beeline.ru"' \
    OK ATD*99***1# \
    TIMEOUT 22 \
    SAY "\nwaiting for connect...\n" \
    CONNECT "" \
    SAY "\nConnected."
Выполняет процедуру установки связи - посылает GPRS-модему управляющие AT-команды, дожидается ответов OK и CONNECT, или сообщает об ошибке установки связи.

Файл /etc/ppp/pap-secrets:

beeline * beeline
Это имя пользователя и пароль, использующиеся для аутентификации.

В директориях /etc/ppp/ip-up.d и ip-down.d можно создать скрипты, которые будут вызываться при каждом включении и выключении ppp. Там могут быть изменение настроек сетевого экрана (firewall), proxy и тому подобное.

Редактируем /usr/local/bluez/etc/bluetooth/rfcomm.conf, пишем туда секцию для Dial-up Networking:

rfcomm0 {
   bind no;
   device 00:CP:AD:RE:SS;
   channel 1;
   comment "DUN";
}
Запускаем rfcomm bind 0. Эта команда загружает драйвер для /dev/rfcomm0, который прописан в /etc/ppp/peers/beeline-gprs в качестве серийного порта для pppd.

Всё готово. Запускаем pon beeline-gprs, и наблюдаем в syslog, как pppd устанавливает связь.

Всякая нормальная связь должна иногда рваться. Страдает этим и GPRS; хотя всё же это не настоящий модем и не телефонная линия; связь без перерыва может держаться и час, и больше. В случае же обрыва связи надо просто остановить pppd командой poff, освободить эмулятор TTY командой rfcomm release 0, включить эмулятор заново - rfcomm bind 0, и перезапустить pppd указанной выше командой pon. При остановке pppd укажет в syslog время, потраченное на связь, и количество принятых и отправленных байтов. Бывает, что глючит связь Bluetooth - программа (pppd или obexftp) уже отсоединилась, а телефон показывает, что соединение ещё есть, и, соответственно, не даёт установить новое соединение по тому же каналу. В такой ситуации достаточно просто выключить и включить Bluetooth в телефоне. Перезагружать телефон (полностью выключить и включить питание) автору не приходилось ещё ни разу.

Алё, говорит Linux. Слышу вас хорошо. Приём...


См. также:
  • Пингвин показывает зубки (Linux + Bluetooth...) (Олег Бройтман)
  • Алё! Пингвин ищет телефон (Linux + Siemens...) (Олег Бройтман)
          
  • Связь | О проекте LinuxRSP | Реклама | О Linux
    © 1999-2016 LinuxRSP