Подключение к WiFi без NetworkManager'a

Программы для конфигурации и управления операционной системой
Правила форума
Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа.
В сети
Аватара пользователя

Автор темы
Chocobo
Сообщения: 5503
Зарегистрирован: 27 авг 2016, 19:57
Решено: 128
Откуда: НН
Благодарил (а): 411 раз
Поблагодарили: 1427 раз

Подключение к WiFi без NetworkManager'a

Сообщение Chocobo » 19 июн 2017, 17:49

Итак, выпилив сразу после установки системы все следы Networkmanager и networking.service жил спокойно и счастливо, пользуясь systemd-networkd. Ровно до того момнта как потребовалось зацепиться к беспроводной сетке :smile:

решение, разумеется нашлось, не прибегая к озвученным выше удаленным компонентам.

1. Определим необходимый нам интерфейс

Код: Выделить всё

chocobo@desktop ~ $ ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 78:24:af:89:f7:cc brd ff:ff:ff:ff:ff:ff
3: wlx60e3271846e9: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether 60:e3:27:18:46:e9 brd ff:ff:ff:ff:ff:ff
У меня он оказался wlx60e3271846e9 - какой чудесный нейминг :crazy:

2. Активируем его c sudo ifconfig wlx60e3271846e9 up

3. Сканим доступные вокруг точки доступа (текстат там много, я сразу отгрепал по ESSID)

Код: Выделить всё

chocobo@desktop ~ $ sudo iwlist wlx60e3271846e9 scan | grep ESSID
                    ESSID:"Andreiko-smile"
                    ESSID:"homenet_"
                    ESSID:"DIR-300NRAlena"
                    ESSID:"Keenetic-2603"
                    ESSID:"WiFi-DOM.ru-4226"
                    ESSID:"WiFi-DOM.ru-7517"
                    ESSID:"DomRU-242"
                    ESSID:"win32"
Меня тут интересует homenet_

4. Далее - подключаемся к выбранной точке

Код: Выделить всё

sudo iwconfig wlx60e3271846e9 essid homenet_
тут стоит оговориться, что точка используемая в этом примере - открытая, поэтому синтаксис для WPA2 будет чуть другой.

5. На этом почти все, осталось поднять адресацию. В моем случае, при испльзовании systemd-networkd - надо задать описание интерфейсу в /etc/systemd/network/
Завожу конфиг /etc/systemd/network/25-wireless.network с следующим содержимым

Код: Выделить всё

[Match]
Name=wlx60e3271846e9

[Network]
DHCP=ipv4
Тут все прозрачно, имя интерфейса и DHCP-адресация (можно завести и статику при желании)

6. Даем рестарт сетевой службе

Код: Выделить всё

sudo systemctl restart systemd-networkd
7. Проверяем

Код: Выделить всё

chocobo@desktop ~ $ ip a
......
......
.....
3: wlx60e3271846e9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 60:e3:27:18:46:e9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.104/24 brd 192.168.0.255 scope global dynamic wlx60e3271846e9
       valid_lft 7138sec preferred_lft 7138sec
    inet6 fe80::62e3:27ff:fe18:46e9/64 scope link 
       valid_lft forever preferred_lft forever

Код: Выделить всё

chocobo@desktop ~ $ ping -I wlx60e3271846e9 linuxmint.com.ru
PING linuxmint.com.ru (82.146.54.131) from 192.168.0.104 wlx60e3271846e9: 56(84) bytes of data.
64 bytes from linuxmint.com.ru (82.146.54.131): icmp_seq=1 ttl=57 time=52.2 ms
64 bytes from linuxmint.com.ru (82.146.54.131): icmp_seq=2 ttl=57 time=44.9 ms
64 bytes from linuxmint.com.ru (82.146.54.131): icmp_seq=3 ttl=57 time=110 ms
64 bytes from linuxmint.com.ru (82.146.54.131): icmp_seq=4 ttl=57 time=14.9 ms
64 bytes from linuxmint.com.ru (82.146.54.131): icmp_seq=5 ttl=57 time=48.8 ms
64 bytes from linuxmint.com.ru (82.146.54.131): icmp_seq=6 ttl=57 time=237 ms
^C
--- linuxmint.com.ru ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5007ms
rtt min/avg/max/mdev = 14.934/84.802/237.000/73.774 ms
Вуаля, вроде как все на месте :smile:


Но данная заметка была расчитана не на еще одну красноглазую инструкцию :angel: (пусть ничего сложного тут и нет) - а на рассмотрение возможности алгоритмизации описанной выше последовательности для создания мышетыкательной оснастки без помощи NM.
Для начала думаю можно использовать zenity чтоб
  • спарсить и выдать список с выбором интефейса
  • просканить и вывести для выбора доступные точки
  • у выбранной проверить защиту, и при необходимости запросить пароль.
  • спросить адресацию (по умолчанию наверное в 95% случаев будет DHCP, но тем не менее)
  • сгенерить на основе этих данных команды подключения и конфиги
Вот как-то так. И если все пройдет гладко - можно попробовать завернуть все это и в апплет

В сети
Аватара пользователя

di_mok
Сообщения: 2204
Зарегистрирован: 27 авг 2016, 16:06
Решено: 15
Откуда: Арзамас
Благодарил (а): 573 раза
Поблагодарили: 339 раз

Подключение к WiFi без NetworkManager'a

Сообщение di_mok » 19 июн 2017, 18:20

Chocobo писал(а): Для начала думаю можно использовать zenity
И примостырить аплет Создание аплета Cinnamon
Настоящая водка — это не пьянство, а ключ к своей совести, с нее-то и начинается настоящая мудрость. (c)

В сети
Аватара пользователя

Автор темы
Chocobo
Сообщения: 5503
Зарегистрирован: 27 авг 2016, 19:57
Решено: 128
Откуда: НН
Благодарил (а): 411 раз
Поблагодарили: 1427 раз

Подключение к WiFi без NetworkManager'a

Сообщение Chocobo » 19 июн 2017, 18:28

di_mok, Да, тоже вспомнил эту тему, разумеется. Но так как JS со мной знаком очень отдаленно - я пока больше склоняюсь к выбору PyGTK.

Но об этом еще рано пока, надо сначала на баше домучать :smile:

В сети
Аватара пользователя

di_mok
Сообщения: 2204
Зарегистрирован: 27 авг 2016, 16:06
Решено: 15
Откуда: Арзамас
Благодарил (а): 573 раза
Поблагодарили: 339 раз

Подключение к WiFi без NetworkManager'a

Сообщение di_mok » 19 июн 2017, 18:38

Да там жавы то будет - одно название.На быдлокодинге можно выехать. :-D Блин, со временем тяжко для поковыряться.
Настоящая водка — это не пьянство, а ключ к своей совести, с нее-то и начинается настоящая мудрость. (c)

В сети
Аватара пользователя

Автор темы
Chocobo
Сообщения: 5503
Зарегистрирован: 27 авг 2016, 19:57
Решено: 128
Откуда: НН
Благодарил (а): 411 раз
Поблагодарили: 1427 раз

Подключение к WiFi без NetworkManager'a

Сообщение Chocobo » 20 июн 2017, 06:06

di_mok, ну я пока набрасываю Bash-функции для zenity, оттуда можно выдрать примитивы будет

Код: Выделить всё

iface=$(ifconfig -a | sed 's/[ \t].*//;/^\(lo\|\)$/d');
select_iface ()
{
        iface=`echo $iface | sed 's/ /\n/' | sed 's/^/FALSE\n/g' |\
            zenity --width=350 --height=250  --list --radiolist --separator=' ' \
                    --title="Выбор Интерфейса" \
                    --text="Пожалуйста выберите интерфейс:" --column="" --column="Iface"`
}
Снимок экрана от 2017-06-20 09-01-34.png

Код: Выделить всё

select_network ()
{
        sudo iwlist $iface scan | grep ESSID | cut -f2 -d"\"" > /tmp/aplist
        network=`cat /tmp/aplist | sed 's/^/FALSE\n/g' |\
            zenity --width=350 --height=250  --list --radiolist --separator=' ' \
                    --title="Выбор сети" \
                    --text="Пожалуйста выберите сеть:" --column="" --column="сеть"`
}
Снимок экрана от 2017-06-20 09-01-44.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя

SemenSinchenko
Сообщения: 315
Зарегистрирован: 17 фев 2017, 09:01
Решено: 2
Откуда: Москва
Благодарил (а): 40 раз
Поблагодарили: 41 раз

Подключение к WiFi без NetworkManager'a

Сообщение SemenSinchenko » 20 июн 2017, 07:26

Раньше был такой баг в ноутбуках, что если таким макаром примостить Wi-Fi сеть, добавить ее в systemd, то потом, если попытаться включить ноутбук в том месте, где этой сети нет, то он зависал минуты на три в тщетных попытках подключиться к сети.

Повторюсь, баг был раньше (когда Debian только перешел на systemd, а это было черти когда), был в Debian (за других не скажу), но я очень хорошо помню, что на сайте Debian была написана рекомендация не пользоваться таким способом подключения Wi-Fi, а использовать что-нибудь более современное типо NM или wicd...

Я бы на всякий случай проверил, как компьютер будет включаться когда такой сети (описанной в /etc/systemd/network/) рядом нет.

В сети
Аватара пользователя

Автор темы
Chocobo
Сообщения: 5503
Зарегистрирован: 27 авг 2016, 19:57
Решено: 128
Откуда: НН
Благодарил (а): 411 раз
Поблагодарили: 1427 раз

Подключение к WiFi без NetworkManager'a

Сообщение Chocobo » 20 июн 2017, 18:21

SemenSinchenko, в /etc/systemd/network описан только сам сетевой интерфейс и адресация, ssid там не фигурирует


А я, как обычно наигравшись в баш-программирование, переписал все на python3+PyQt5 :smile:
никогда раньше толком не имел делов с Qt, поэтому знатно прошелся по всем граблям :grabli:, но в необходимые основы вроде уже въехал

Неказистое окошко пока выглядит так, основные события выделены в функции - можно дальше прорабатывать логику.
Снимок экрана от 2017-06-20 21-13-48.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.

В сети
Аватара пользователя

Автор темы
Chocobo
Сообщения: 5503
Зарегистрирован: 27 авг 2016, 19:57
Решено: 128
Откуда: НН
Благодарил (а): 411 раз
Поблагодарили: 1427 раз

Подключение к WiFi без NetworkManager'a

Сообщение Chocobo » 21 июн 2017, 10:12

Можно уже сказать, что кое-что готово.
набросал остатки функционала для подключений - оно работает :ok: .
Код пока показывать не буду, надо все причесать :sry:
Снимок экрана от 2017-06-21 12-51-36.png
В ходе работы над этой штукой уяснил что можно пойти несколькими путями. В шапке был указан отход от NM, при этом networking.service c одной стороны нафиг не нужен когда есть systemd-networkd, с другой стороны особо против него ничего не имею, ну и по умолчанию в системе он задействован. Так что, возможно тут должен быть выбор.

Использовать iwlist, описанный в первом посте получится только для открытых сеток, с WEP/WPA он не дружит. так что не самая подходящая утилита, хоть к открытым и цепляется на ура в одну незамысловатую строку.

При использовании модуля wifi в питоне - помимо базовых операций с адаптером он умеет конфигруть и сохранять подключения в /etc/network/interfaces. Но весь дебаний networking.serviсe использует ifup/ifdown и dhcpd Т.е решение вполне работоспособно не дергая по коду баш, но без systemd-networkd.

Ну и самый логичный вариант - вызвать wpa_supplicant, который умеет все вышеперечисленное, и не рулит сам адресацией интерфейсов. Он сохраняет у себя в конфиге PSK-пароли в явном и хешированном виде и монопольно держит интерфейс когда задействован, за что тоже можно зацепиться при разнообразных проверках.


В общем это мысли вслух, чтоб не чересчур не костылировать (пока писал еще кое-что домыслил :joke:)
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя

SemenSinchenko
Сообщения: 315
Зарегистрирован: 17 фев 2017, 09:01
Решено: 2
Откуда: Москва
Благодарил (а): 40 раз
Поблагодарили: 41 раз

Подключение к WiFi без NetworkManager'a

Сообщение SemenSinchenko » 21 июн 2017, 10:38

Chocobo писал(а): описан только сам сетевой интерфейс и адресация, ssid там не фигурирует
Я вспомнил как все было.
Я ставил Debian "чистым" методом, соответственно после установки настраивал сеть руками через wpa-supplicant. Все отлично работало, пока я не попытался включить ноут в макдаке - он запускался минуты три.
Потом уже прочитал на сайте Debian, что использование wpa-supplicant не рекомендовано пользователям продвинутых DE именно по этой причине...
Не знаю, как это может помочь, но вроде проблема была и не решалась (по другому к сети с WPA2 не подключится). Ну или может флаг auto убирать, но это опять же неудобно - каждый раз после включения ноута подключать сеть...

В сети
Аватара пользователя

Автор темы
Chocobo
Сообщения: 5503
Зарегистрирован: 27 авг 2016, 19:57
Решено: 128
Откуда: НН
Благодарил (а): 411 раз
Поблагодарили: 1427 раз

Подключение к WiFi без NetworkManager'a

Сообщение Chocobo » 21 июн 2017, 11:01

SemenSinchenko, Спасибо за инфу. Все это еще предстоит проверять)

Вернуться в «Системные утилиты»