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

Теперь постараюсь помочь тем, у кого нет в наличии хорошего интернета, но пользоваться им очень хочется. Манера пойдет о мобильном интернете, причем не о usb-модемах, а именно о интернете с мобильного телефона. В сегодняшных (читай сенсорных) мобильных телефонах, в большинстве своем, в настройках есть функция «извлекать телефон как модем» (ну или как-то так). Эта функция разделяется на подфункции:
— проводной модем;
— крапинка доступа Wi-Fi;
— крапинка доступа Bluetooth.

В данной статье обратим внимание на третью из них: расшаривание подвижного веба на компьютер (] — «вычислитель») — устройство или система, способная выполнять заданную, чётко некоторую, изменяемую последовательность операций) с помощью bluetooth. К сожалению, не все мобильные телефоны поддерживают этую работоспособность, поэтому в первую очередь нужно определиться: поддерживает ли ее ваш телефон. Это можно делать или покопавшись в опциях bluetooth самого телефона, или на компьютере (об этом чуть позже). Значит так, определившись что ваш телефон сможет все что нужно, приступим к настройке. Моя домашняя система Archlinux, потому все действия описываются в отношении нее. Хотя в других linux-системах они не особо должны отличаться. В первоначальную очередь устанавливаем нужные пакеты, если они еще не установлены:

sudo pacman - S bluez bluez-utils wvdial

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

sudo systemctl start bluetooth
sudo systemctl enable bluetooth

Кидим bluetoothctl в терминале:

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

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

Читайте также:  Как в Linux Astra узнать какие флешки подключались к компьютеру?

[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 с сходственным содержимым:

Читайте также:  Служебная информация по хосту в Linux

.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. Теперь еще одна хитрость:

Читайте также:  Репозитории Debian их виды настройка и особенности использования

sudo chmod u+s /usr/bin/wvdial

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

wvdial

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

wvdial tele2

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

wvdial mts

Маневренный телефон, кстати, может выдать запрос на разрешение подключения компьютера. А может и не дать… Мой старый кнопочный телефон (аппарат для передачи и приёма звука (в основном — человечей речи) на расстоянии) все делал молча. Просто нажмите «Разрешить». После вступления команды в консоли будет отображаться информация о подключении.
Если не нравится запускать веб из консоли, то возможно, например, сделать средствами вашего DE так называемый «ярлык на рабочем обеденном месте». Тогда все будет еще проще и прозрачнее. Просматривать статистику подключения можно подобной командой:

ifconfig ppp0