Linux32 - Блог



LINUX32

Свобода выбирать


ArchLinux
Блог >> 2014 >> Май


16.05.2014

Общий интернет по bluetooth




Добрый день.

Сегодня постараюсь помочь тем, у кого нет в наличии хорошего интернета, но пользоваться им очень хочется. Речь пойдет о мобильном интернете, причем не о usb-модемах, а именно о интернете с мобильного телефона.

В современных (читай сенсорных) мобильных телефонах, в большинстве своем, в настройках есть функция "использовать телефон как модем" (ну или как-то так). Эта функция разделяется на подфункции:

- проводной модем;
- точка доступа Wi-Fi;
- точка доступа Bluetooth.

В данной статье обратим внимание на третью из них: расшаривание мобильного интернета на компьютер с помощью bluetooth.

К сожалению, не все мобильные телефоны поддерживают данную функциональность, поэтому в первую очередь нужно определиться: поддерживает ли ее ваш телефон. Это можно сделать или покопавшись в настройках bluetooth самого телефона, или на компьютере (об этом чуть позже).

Итак, определившись что ваш телефон может все что нужно, приступим к настройке.

Моя домашняя система Archlinux, поэтому все действия описываются касательно нее. Хотя в других linux-системах они не особо должны отличаться.

В первую очередь устанавливаем необходимые пакеты, если они еще не установлены:

sudo pacman -S bluez bluez-utils wvdial


Третий пакет wvdial будет использоваться непосредственно для подключения мобильного интернета, с первыми двумя думаю ясно из названия. Запускаем bluetooth и помещаем его в автозапуск при старте компьютера:

sudo systemctl start bluetooth
sudo systemctl enable bluetooth


Запускаем bluetoothctl в терминале:

bluetoothctl
[NEW] Controller 00:10:20:30:40:50 pi [default]


Вывод должен быть похож на этот, но с вашими значениями MAC-адреса. Далее включаем в настройках bluetooth телефона "общий интернет по bluetooth" и разрешаем обнаружение телефона, также в настройках активируем передачу данных (собственно это и есть мобильный интернет) и запускаем сканирование на компьютере:

[bluetooth]# scan on
Discovery started
[CHG] Controller 00:10:20:30:40:50 Discovering: yes
[NEW] Device 00:12:34:56:78:90 myPhone
[CHG] Device 00:12:34:56:78:90 LegacyPairing: yes


Как видите найдено новое устройство myPhone. Теперь проведем его сопряжение с компьютером:

[bluetooth]# pair 00:12:34:56:78:90
Attempting to pair with 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
[CHG] Device 00:12:34:56:78:90 Connected: no
[CHG] Device 00:12:34:56:78:90 Connected: yes
Request PIN code
[agent] Enter PIN code: 1234
[CHG] Device 00:12:34:56:78:90 Paired: yes
Pairing successful
[CHG] Device 00:12:34:56:78:90 Connected: no


Эта операция потребует введения произвольного одинакового пароля на телефоне и на компьютере в терминале, после этого телефон и компьютер будут успешно сопряжены. Выходим из bluetoothctl:

[bluetooth]# quit


Проверим на каком канале находится сервис Dial-Up Networking:

sdptool browse 00:12:34:56:78:90


И ищем в выводе секцию с заветным "Dial-Up Networking", в которой смотрим на цифру справа от слова channel. Вот это и есть тот метод определения возможности вашего телефона раздавать интернет по bluetooth с помощью компьютера, о котором я упомянул выше. То есть если в выводе предыдущей команды вы не найдете эту секцию - увы, ваш телефон так не умеет. Отвлеклись. Итак, пусть это будет цифра 4. Теперь создадим в папке /dev устройство нашего телефонного модема:

sudo rfcomm bind /dev/rfcomm0 00:12:34:56:78:90 4


Где 4 - номер канала (ну вы поняли). Эта команда создает в папке /dev файл модема с именем rfcomm0, который мы будем использовать для настройки подключения к интернету через wvdial. Теперь одна хитрость: чтобы не вводить вручную эту команду после каждой загрузки системы создадим в папке /etc/systemd/system файл bluetooth.service с таким содержимым:

.include /usr/lib/systemd/system/bluetooth.service

[Service]
ExecStartPost=/usr/bin/rfcomm bind /dev/rfcomm0 00:12:34:56:78:90 4 # myPhone1
ExecStartPost=/usr/bin/rfcomm bind /dev/rfcomm1 90:80:70:60:50:40 5 # myPhone2
ExecStopPost=/usr/bin/rfcomm release /dev/rfcomm0
ExecStopPost=/usr/bin/rfcomm release /dev/rfcomm1


С его помощью файл модема вашего телефона не только сам будет создаваться в папке /dev, но и будут создаваться файлы модемов всех ваших телефонов через которые вы планируете выходить в интернет и которые вы внесете в bluetooth.service. Кроме этого после остановки bluetooth сервиса модемы будут удаляться. После создания этого файла дайте systemd команду перечитать все свои сервисы:

sudo systemctl daemon-reload


Теперь перейдем к настройке wvdial. В папке /etc создайте файл wvdial.conf:

[Dialer defaults]
# myPhone1
Modem = /dev/rfcomm0
Baud = 115200
Init2 = AT+CGDCONT=1,"IP","internet.tele2.ru"
Phone = *99#
Username = tele2
Password = tele2
Stupid Mode = yes
New PPPD = yes
Auto DNS = 1

[Dialer tele2]
# myPhone1
Modem = /dev/rfcomm0
Baud = 115200
Init2 = AT+CGDCONT=1,"IP","internet.tele2.ru"
Phone = *99#
Username = tele2
Password = tele2
Stupid Mode = yes
New PPPD = yes
Auto DNS = 1

[Dialer mts]
# myPhone2
Modem = /dev/rfcomm1
Baud = 115200
Init2 = AT+CGDCONT=1,"IP","internet.mts.ru"
Phone = *99#
Username = mts
Password = mts
Stupid Mode = yes
New PPPD = yes
Auto DNS = 1


В качестве примера приведены настройки для двух сотовых операторов: Теле2 и МТС. Для других операторов wvdial настраивается сменой необходимых для дозвона параметров. Настройки заданы таким образом, чтобы происходило автопереподключение при обрыве. Подробнее остановимся только на строке:

Modem = /dev/rfcomm0


В секции каждого мобильного оператора необходимо указать имя файла модема телефона, использующего сим-карту оператора обозначенной секции, которое берем из файла bluetooth.service. Также в примере wvdial.conf я привел три секции, первые две из которых полностью одинаковые за исключением названия. Это сделано для того чтобы можно было определить мобильного оператора по умолчанию. В данном случае это Теле2. Теперь еще одна хитрость:

sudo chmod u+s /usr/bin/wvdial


Дело в том, что по умолчанию wvdial можно запустить только от рута. Этой командой мы устанавливаем бит SUID на исполняемый файл wvdial, что позволяет запускать этот файл от имени его владельца, то есть от суперпользователя. Поэтому теперь запуск wvdial не будет требовать от вас введения пароля. Однако, одно но: после каждого обновления wvdial придется заново присваивать этот бит.

Снова отвлеклись... В принципе почти все: запускать интернет на компьютере теперь можно введя в терминале:

wvdial


если нужен мобильный оперетор по умолчанию (у нас был теле2). Или можно задать оператора явно:

wvdial tele2


Или же подключиться через другого оператора:

wvdial mts


Мобильный телефон, кстати, может выдать запрос на разрешение подключения компьютера. А может и не выдать... Мой старый кнопочный телефон все делал молча. Просто нажмите "Разрешить". После введения команды в консоли будет отображаться информация о подключении.

Если не нравится запускать интернет из консоли, то можно, например, сделать средствами вашего DE так называемый "ярлык на рабочем столе". Тогда все будет еще проще и прозрачнее. Просматривать статистику подключения можно такой командой:

ifconfig ppp0


Отслеживая значения RX и TX.

На этом все. Вроде бы подробно изложил. Появятся вопросы, задавайте в комментариях.

Статья


Ваш комментарий:

Имя:
E-mail:
Код с картинки:
Комментарий: