--- title: Доступ в интернет через связку Linux+Bluetooth+Mobile+GPRS на примере Arch Linux tags: bluetooth, hardware, archlinux --- В этом руководстве без лишних слов и очень кратко описывается весь процесс настройки USB Bluetooth адаптера и ppp соединения для доступа в интернет через мобильный телефон. В качестве примера приведены настройки для двух операторов сотовой связи Приморья: [НТК](http://www.vntc.ru/) и [МегаФон Дальний Восток](http://www.megafondv.ru/). Для начала давайте разберемся, что мы будем делать и для чего нам это нужно. Наша конечная цель - заставить работать связку Linux+Bluetooth+Mobile+GPRS. То есть первое, что нам нужно: - Заставить работать Bluetooth адаптер (в этом руководстве речь пойдет о USB адаптерах). - Настроить соединение между телефоном и компьютером посредством bluetooth. Будем использовать стек [Bluez](http://www.bluez.org/). - Настроить соответствующим образом pppd. - Ура! Работает! Или не работает... Ну, а теперь обо всем по порядку. Настройка ядра --------------- Я настраивал адаптер Tekram TM-304. Для того, чтоб заставить эту штуку работать, сначала скомпилируем некоторые модули ядра. Если вы используете ``make menuconfig`` для конфигурирования ядра, то вот как нужно расставить флажки: Networking support Bluetooth subsystem support ---> L2CAP protocol support < > SCO links support RFCOMM protocol support [*] RFCOMM TTY support < > BNEP protocol support HIDP protocol support Bluetooth device drivers ---> HCI USB driver Ну а если вы используете make config или решили вручную включить нужные опции в конфиге ядра (обычно это файл `/ust/src/linux/.config`), то вот они: CONFIG_BT=m CONFIG_BT_L2CAP=m CONFIG_BT_RFCOMM=m CONFIG_BT_RFCOMM_TTY=y CONFIG_BT_HIDP=m CONFIG_BT_HCIUSB=m Все. Можно собирать модули. Не забудьте позаботиться о загрузке необходимых модулей при каждой перезагрузке (если udev не настроен должным образом). Если у вас нет желания возиться с модулями или религия не позволяет их использовать, можете собрать ядро монолитно. Должно работать. Не проверял. А сейчас подгрузим эти модули вручную, так как перезагружаться для этого нам лень. $ modprobe bluetooth По зависимостям он должен автоматически потянуть модули: rfcomm, hidp, l2cap, hci_usb. Если этого не произошло, то грузим их все по порядку, а в самую последнюю очередь модуль bluetooth. Переходим к настройке стека bluetooth и сопутствующих утилит ------------------------------------------------------------- Ставим необходимый набор утилит для работы с bluetooth стеком [Bluez](http://www.bluez.org/). Через зависимости тянется пакет bluez-libs. ``$ pacman -S bluez-utils`` Запускаем всю bluetooth подсистему: ``$ /etc/rc.d/bluetooth start`` Сразу не забываем добавить автоматический запуск этого скрипта при загрузке системы. Для этого в файле `/etc/rc.conf` в переменную DEAMONS добавляем соответствующую запись. Проверяем, что в телефоне включен bluetooth и что он виден всем. Теперь попытаемся найти все bluetooth устройства, находящихся в зоне досигаемости нашего bluetooth адаптера. ``$ hcitool scan`` Запомните (шутка) запишите адрес bluetooth адаптера, соответствующий вашему телефону. В файле `/etc/rfcomm.conf` в параметре device указываем адрес нашего телефона. И не забываем установить значение параметра "bind" в "yes"! Иначе не будет автоматически создан файл устройства `/dev/rfcomm0` и его созданием придется заморачиваться отдельно. В файле `/etc/hcid.conf` в качестве параметра pin_helper указываем `/usr/bin/simplepin`. Разбираться с навороченым bluezpin, который идет в комплекте, да еще и написан на питоне, совсем не охота. Мы напишем скрипт немного проще: `/usr/bin/simplepin`: #!/bin/sh echo "PIN:1234" Вот и весь скрипт. Перезапускаем всю bluetooth подсистему: $ /etc/rc.d/bluetooth stop $ /etc/rc.d/bluetooth start Теперь можно проверить, работает ли у нас bluetooth соединение. Для этого установим соединение: ``$ hcitool cc <адрес bluetooth адаптера вашего телефона>`` Если все прошло гладко, то команда ``$ hcitool con`` должна выдать информацию об установленном соединении. Теперь попробуем отправить запрос на аутентификацию: ``$ hcitool auth <адрес bluetooth адаптера вашего телефона>`` После выполнения этой команды телефон должен у вас спросить PIN. Вводим то, что вы указали в скрипте `simplepine`. В нашем случае 1234. Если все прошло гладко, то соединение будет установлено и в списке активных устройств вашего телефона должна появиться соответствующая запись. Для удобства использования я добавил в своем телефоне адрес bluetooth адаптера компьютера в список сопряженных устройств и разрешил этому устройству подключаться автоматически. После этого можно включить скрытый режим в параметрах bluetooth и больше не вводить pin-код при каждом подключении. Переходим к настройке ppp соединения ------------------------------------- Вот здесь есть, где напороть косяков и потом долго догадываться: почему у меня все правильно, но нифига не работает. Содержимое файла `/etc/ppp/peers/ntc-gprs`: lcp-echo-failure 0 lcp-echo-interval 0 connect /etc/ppp/peers/ntc-gprs-connect-chat /dev/rfcomm0 115200 crtscts local noipdefault ipcp-accept-local defaultroute #replacedefaultroute usepeerdns novj nobsdcomp novjccomp nopcomp noaccomp noauth mtu 1400 Здесь стоит обратить внимание на последнюю строку: "mtu 1400". По умолчанию значение параметра [mtu](http://ru.wikipedia.org/wiki/MTU) (Maximum Transfer Unit) равно 1500. А у нашего провайдера максимальный размер пакета ограничен цифоркой несколько меньшей. Какая это точно цифра, мне узнать не удалось, но со значением 1400 все работает на ура. Если этот параметр не указать, то интернет у вас тоже будет работать, но, поработав немного, вы заметите, что, оказывается, не можете добавлять в форумы сообщения, состоящие более чем из одной-двух строк. Неприятно. mtu 1400 спасет отца русской демократии. Содержимое файла `/etc/ppp/peers/ntc-gprs-connect-chat`: exec chat -vS \ '' \rAT \ TIMEOUT 12 \ OK ATH \ OK ATE1 \ OK 'AT+CGDCONT=1,"IP","internet.ntc"' \ OK ATD*99***1# \ TIMEOUT 22 \ SAY "\nwaiting for connect...\n" \ CONNECT "" \ SAY "\nConnected." Здесь, в зависимости от того, какой у вас оператор мобильной связи, может меняться только один параметр: APN (точка входа). Здесь я привел пример для [НТК](http://www.vntc.ru/). Если, например, у вас "Мегафон дальний восток", то в качестве APN нужно указать internet.dv. Содержимое файла `/etc/resolv.conf`: # Для NTC IP адреса DNS серверов будут такими: nameserver 80.243.64.67 nameserver 80.243.68.34 # Для "Мегафон дальний восток" такими: nameserver 83.149.52.77 nameserver 194.186.112.18 Вот и все. После этого все должно работать. Пробуем подключиться: $ pppd call ntc-gpts Материалы по теме: - [Пингвин показывает зубки (Linux + Bluetooth...)](http://www.linuxrsp.ru/artic/Linux-Bluetooth.html) - [Алё, говорит Linux. Как слышно? Приём! (Linux + OBEX + GPRS...)](http://www.linuxrsp.ru/artic/Linux-OBEX-GPRS.html) - [Подключение GPRS/EDGE в GNU/Linux](http://ru.wikibooks.org/wiki/%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_GPRS/EDGE_%D0%B2_GNU/Linux) P.S.: Очень рекомендую источник [[3](http://ru.wikibooks.org/wiki/%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_GPRS/EDGE_%D0%B2_GNU/Linux)]. Обнаружил я эту статью уже после того, как написал свою. Кстати, телефон у автора такой же как у меня ;) (c) Rayven, 2006.