{"id":453167,"date":"2025-03-24T15:03:07","date_gmt":"2025-03-24T15:03:07","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=453167"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=453167","title":{"rendered":"<span>Linux-\u0434\u0435\u0441\u043a\u0442\u043e\u043f \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438: WiFi-manager<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u043e \u043f\u0440\u043e\u0441\u044c\u0431\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0442\u043e\u0440\u043e\u0432 &#171;\u0447\u0442\u043e-\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443 \u0438 \u0432\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u043e\u0431\u043e\u0437\u0440\u0435\u043d\u0438\u0435&#187; &#8212; \u043d\u0443 \u0432\u043e\u0442, \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0438 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e:<\/p>\n<p>\u0421\u0443\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438: \u043a\u0430\u043a, \u043d\u0435 \u0438\u043c\u0435\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e Desktop Environment, \u0441 Network Manager \u0438 systemd, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043a Wi-Fi \u0441\u0435\u0442\u044f\u043c \u0431\u0435\u0437 \u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c?<br \/>\u0423\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u0435: \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443 \u043d\u0430\u0441 \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Wi-Fi \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432, \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0441\u0435\u0442\u044f\u043c.<\/p>\n<p>\u041b\u0435\u0433\u043a\u043e!<br \/>\u041d\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 &#8212; \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e \u0442\u043e\u043c, &#171;\u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c&#187; (\u043a\u043e\u043c\u0443 \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e &#8212; \u043f\u0440\u043e\u0441\u043a\u0430\u043a\u0438\u0432\u0430\u0435\u043c)<\/p>\n<h4>\u0412\u043e\u0441\u0445\u043e\u0434 \u0421\u043e\u043b\u043d\u0446\u0430 \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/h4>\n<p>\u0421\u0440\u0430\u0437\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0443 \u0440\u0430\u043c\u043a\u0438:<br \/>\u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u043f\u043e\u0447\u0442\u0438 \u0432\u0435\u0437\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f WPA\/WPA2, \u0434\u0430\u0436\u0435 \u0432 \u043a\u0430\u043a\u0438\u0445-\u043d\u0438\u0431\u0443\u0434\u044c ESP8266, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0447\u0435\u0440\u0435\u0437 WPA.<\/p>\n<p>\u0417\u0430 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0432 Linux \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 wpa_supplicant. \u041f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430 \u043e\u043d\u0430 \u0435\u0449\u0435 \u0438 \u0442\u0435\u043c, \u0447\u0442\u043e \u043a\u0440\u043e\u043c\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u043f\u043e\u043b\u043d\u0435 \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c\u0438 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u043c\u0438 \u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0447\u0435\u0440\u0435\u0437 wpa_cli.<\/p>\n<p>\u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0435\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u0432 \/etc\/wpa_supplicant, \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043e\u043d\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445, \u0432\u0438\u0441\u0438\u0442 \u0434\u0435\u043c\u043e\u043d\u043e\u043c, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044f \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435-\u043f\u0440\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0439 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u043d\u0438\u043c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u043e.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0451 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0447\u0435\u0440\u0435\u0437 &#171;control interface socket&#187;, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \/var\/run\/wpa_supplicant, \u0447\u0435\u043c \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f wpa_cli.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0443\u0436\u0435\u043d \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f:<br \/>\/etc\/wpa_supplicant.conf<\/p>\n<pre><code>ctrl_interface=\/run\/wpa_supplicant update_config=1 country=US  network={   ssid = \"MyNet\"   psk = \"MyPassword\" }<\/code><\/pre>\n<p>(country \u0442\u0443\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u044b WiFi)<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0451:<\/p>\n<p>wpa_supplicant -i wlan0 -c \/etc\/wpa_supplicant.conf<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 wlan0 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u0441\u0435\u0442\u0438 MyNet.<br \/>\u041e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c IP-\u0430\u0434\u0440\u0435\u0441 \u043f\u043e DHCP&#8230;<\/p>\n<p>\u041d\u043e \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u0430\u0446\u0438\u043e\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0442\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, Wi-Fi \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u0437-\u043f\u043e\u0434 \u0440\u0443\u0442\u0430.<\/p>\n<p>\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435.<br \/>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0434\u0430\u0432\u0430\u0442\u044c Wi-Fi \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430\u043c &#171;\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u0435 \u0438\u043c\u0435\u043d\u0430&#187; (\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u0435 \u0432 \u0442\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435, \u0447\u0442\u043e \u043e\u043d\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0443, \u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u043a\u043e\u0447\u0430\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e wlan0 &lt;-&gt; wlan1).<br \/>\u041d\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e wlan0 \u0442\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0442\u0438\u043f\u0430 wl557hwej24, \u0438 \u0432\u043e\u0442 \u044d\u0442\u043e-\u0442\u043e \u0432\u044b \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0436\u0435\u0442\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044f USB-\u0434\u043e\u043d\u0433\u043b.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0438 \u0443 \u043d\u0438\u0445 \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u0430 &#8212; \u043d\u0430\u0434\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0438\u0445 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c wpa_supplicant \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0418 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u043e\u0443\u0442\u0431\u0443\u043a &#8212; \u0432\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u043d\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u0432\u0430\u043c \u0441\u0435\u0442\u0438, \u0430 \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0443\u0431\u0438\u0432\u0430\u044f \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b &#8212; \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435 \u0442\u043e \u0435\u0449\u0435.<br \/>\u041a\u0430\u043a \u0440\u0430\u0437 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u0435\u0442 wpa_cli: \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u043c\u0443 wpa_supplicant, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u044c \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u0443\u044e:<\/p>\n<p>scan &#8212; \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<br \/>scan_results &#8212; \u043f\u043e\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e<br \/>list_networks &#8212; \u043f\u043e\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e<\/p>\n<p>add_network &#8212; \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043d\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u044c (\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435) \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c N<br \/>set_network N ssid &#171;MyNet&#187;<br \/>set_network N psk &#171;MyPass&#187;<br \/>save_config<\/p>\n<p>select_network N &#8212; \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0435\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439<\/p>\n<p>remove_network N &#8212; \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0435<\/p>\n<p>\u0418 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u043b\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434. \u0423\u0436\u0435 \u043b\u0443\u0447\u0448\u0435, \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e &#171;\u0432\u0440\u0443\u0447\u043d\u0443\u044e&#187;.<br \/>\u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e wpa_cli \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043e\u0442 \u0440\u0443\u0442\u0430.<\/p>\n<p>\u041d\u0443 \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 &#8212; \u0443 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043f\u0438\u0442\u0430\u043d\u0438\u0435 (\u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c Power Save) &#8212; \u0442\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u043e \u0435\u0433\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c.<\/p>\n<p>\u0418\u0442\u043e\u0433\u043e, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439:<br \/>1 &#8212; \u043d\u0430\u0439\u0442\u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440(\u044b)<\/p>\n<p>2 &#8212; \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0438\u0442\u0430\u043d\u0438\u0435<br \/>3 &#8212; \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u0430\u043a \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (\u044d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0435)<br \/>4 &#8212; \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0433\u043e wpa_supplicant<br \/>5 &#8212; \u0435\u0441\u043b\u0438 \u0441\u0435\u0442\u044c \u043d\u043e\u0432\u0430\u044f &#8212; \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0435 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443<br \/>6 &#8212; \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a AP &#8212; \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c IP-\u0430\u0434\u0440\u0435\u0441.<\/p>\n<p>\u0412\u043e\u0442 \u044d\u0442\u043e \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c<\/p>\n<h4>\u041f\u0443\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u043e\u043d \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0439<\/h4>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 &#8212; \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0438\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u0435\u043c\u043e\u043d\u043e\u0432:<\/p>\n<pre><code class=\"bash\">#!\/bin\/sh -x  # \/etc\/wpa_supplicant\/start_wpa_supplicant.sh  PATH=\/sbin:$PATH; export PATH  CONFIG_DIR=\/etc\/wpa_supplicant CTL_DIR=\/run\/wpa_supplicant  exec &gt;&gt; \/var\/log\/wpa_auto.log exec 2&gt;&amp;1  check_config_file(){   if [ -n \"${CONFIG_FILE}\" ] &amp;&amp; [ ! -f \"${CONFIG_FILE}\" ] ; then     (       echo \"ctrl_interface=${CTL_DIR}\"       echo \"update_config=1\"       echo \"country=US\"     ) &gt; \"${CONFIG_FILE}\"   fi }  which iw NO_IW=$?  if [ ${NO_IW} ] ; then   IFACES=$(iwconfig 2&gt;&amp;1 | grep IEEE | awk '{ print $1 }') else   IFACES=$(iw dev | grep Interface | awk '{ print $2 }') fi  for i in ${IFACES} ; do   echo ${i}    CONFIG_FILE=${CONFIG_DIR}\/iface_${i}.conf    x=$(ps ax | grep -v grep | grep \"${CONFIG_FILE}\" | wc -l)   if [ \"$x\" -eq \"0\" ] ; then     echo \"No wpa_supplicant for ${i} found\"      # \u0412\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u0438\u0442\u0430\u043d\u0438\u0435 \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439     if [ ${NO_IW} ] ; then       iwconfig ${i} power on     else       iw dev ${i} set power_save off     fi      check_config_file      # \u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441     ip link set \"${i}\" up      # \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c wpa_supplicant     wpa_supplicant -i \"${i}\" -c \"${CONFIG_FILE}\" -B -C ${CTL_DIR}     chown -R root:netdev ${CTL_DIR}      # \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c wpa_cli, \u0447\u0442\u043e\u0431\u044b \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c DHCP \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438     wpa_cli -a \/etc\/wpa_supplicant\/wpa_dhcp.sh -i ${i} -B    fi  done  exit  <\/code><\/pre>\n<p>\u0414\u0430, \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043e\u0431\u044b\u043a\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439 shell-\u0441\u043a\u0440\u0438\u043f\u0442. \u041e\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u0430\u043a\u0438\u0435 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b \u0435\u0441\u0442\u044c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f iw \u0438\u043b\u0438 iwconfig, \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0434\u043b\u044f \u043d\u0438\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0435\u0449\u0435 \u043d\u0435\u0442, \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0434\u0435\u043c\u043e\u043d\u0430.<br \/>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432 \u0444\u043e\u043d\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c dhclient:<\/p>\n<pre><code class=\"bash\">#!\/bin\/sh  # \/etc\/wpa_supplicant\/wpa_dhcp.sh  PATH=\/sbin:$PATH; export PATH  exec &gt;&gt; \/var\/log\/wpa_dhcp.log exec 2&gt;&amp;1  INTERFACE=\"$1\" EVENT=\"$2\"  echo \"Event received: $EVENT on interface $INTERFACE\"   if [ \"$EVENT\" = \"CONNECTED\" ]; then   echo \"Wi-Fi connected on $INTERFACE, requesting DHCP...\"   dhclient -r \"$INTERFACE\"   dhclient \"$INTERFACE\" fi <\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0447\u0435\u0440\u0435\u0437 udevd:<\/p>\n<p>\/etc\/udev\/rules.d\/99-wifi-autostart.rules<\/p>\n<pre><code>ACTION==\"add\", SUBSYSTEM==\"net\", KERNEL==\"wl*\", RUN+=\"\/etc\/wpa_supplicant\/start_wpa_supplicant.sh %k\"<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0438\u043f\u0430 wlan \u0441\u043a\u0440\u0438\u043f\u0442 \u0430\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f.<br \/>\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0435\u043c\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212; \u0438\u043c\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430?<br \/>\u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0443\u0442 \u043e\u043d \u043a\u0430\u043a \u0440\u0430\u0437 \u0435\u0449\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d, \u0442\u0443\u0442 \u0431\u0443\u0434\u0435\u0442 wlan0, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 \u0447\u0442\u043e-\u0442\u043e &#171;\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0435&#187;.<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u0443\u0436\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430: \u0435\u0441\u043b\u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433-\u0444\u0430\u0439\u043b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0441\u0435\u0442\u044c &#8212; wpa_supplicant \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u043a \u043d\u0435\u0439, wpa_cli, \u0436\u0434\u0443\u0449\u0438\u0439 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 dhclient \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0430\u0434\u0440\u0435\u0441.<br \/>\u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0439.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e &#8212; \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u0441 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043e\u043a\u043e\u0448\u043a\u0430\u043c\u0438, \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e &#8212; perl.<\/p>\n<pre><code class=\"perl\">#!\/usr\/bin\/perl use strict; use warnings; use Gtk3 '-init'; use IPC::Open2;  use Data::Dumper;  my $wpa_cli = \"\/sbin\/wpa_cli\";  my %networks;  # \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430 my $window = Gtk3::Window-&gt;new('toplevel'); $window-&gt;set_title(\"Wi-Fi Manager\"); $window-&gt;set_default_size(400, 400); $window-&gt;signal_connect(delete_event =&gt; sub { Gtk3-&gt;main_quit; });  # \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 (A) my $store_A = Gtk3::ListStore-&gt;new('Glib::String'); my $list_A = Gtk3::TreeView-&gt;new($store_A); my $colA1 = Gtk3::TreeViewColumn-&gt;new_with_attributes('Interface', Gtk3::CellRendererText-&gt;new, text =&gt; 0); $list_A-&gt;append_column($colA1);  # \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0435\u0442\u0435\u0439 (B) my $store_B = Gtk3::ListStore-&gt;new('Glib::String','Glib::String','Glib::String'); my $list_B = Gtk3::TreeView-&gt;new($store_B); my $colB1 = Gtk3::TreeViewColumn-&gt;new_with_attributes('#', Gtk3::CellRendererText-&gt;new, text =&gt; 0); my $colB2 = Gtk3::TreeViewColumn-&gt;new_with_attributes('SSID', Gtk3::CellRendererText-&gt;new, text =&gt; 1); my $colB3 = Gtk3::TreeViewColumn-&gt;new_with_attributes('Status', Gtk3::CellRendererText-&gt;new, text =&gt; 2); $list_B-&gt;append_column($colB1); $list_B-&gt;append_column($colB2); $list_B-&gt;append_column($colB3);  # \u041a\u043d\u043e\u043f\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f my $scan_button = Gtk3::Button-&gt;new_with_label(\"Add network\"); my $select_button = Gtk3::Button-&gt;new_with_label(\"Select\"); my $delete_button = Gtk3::Button-&gt;new_with_label(\"Remove\"); my $quit_button = Gtk3::Button-&gt;new_with_label(\"Quit\"); $_-&gt;set_sensitive(0) for ($scan_button, $select_button, $delete_button);  # \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043a\u043d\u0430 {   my $vbox = Gtk3::Box-&gt;new('vertical', 5);   $window-&gt;add($vbox);    $vbox-&gt;pack_start($list_A, 1, 1, 5);   $vbox-&gt;pack_start($list_B, 1, 1, 5);    my $button_box = Gtk3::ButtonBox-&gt;new('horizontal');   $button_box-&gt;pack_start($_, 1, 1, 5) for ($scan_button, $select_button, $delete_button, $quit_button);   $vbox-&gt;pack_start($button_box, 1, 1, 20); }  # ========================================= # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434 wpa_cli sub run_wpa_cli {   my ($cmd) = @_;   print STDERR \"cmd: ==$cmd==\\n\";   open2(my $out, my $in, \"$wpa_cli $cmd\");   my @result = &lt;$out&gt;;   print STDERR Dumper(@result);   return @result; }  # \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 (A) sub load_interfaces {   $list_A-&gt;get_model-&gt;clear;   my @interfaces = run_wpa_cli('interface');   foreach my $iface (@interfaces) {     next if($iface =~ \/\\w+\\s+\\w\/);     $iface =~ s\/\\s+$\/\/;     my $iter = $list_A-&gt;get_model-&gt;append();     $list_A-&gt;get_model-&gt;set($iter, 0 =&gt; $iface);   } }  # \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 sub get_selected_iface {   my $selection = $list_A-&gt;get_selection;   my ($model, $iter) = $selection-&gt;get_selected;   return $model-&gt;get($iter, 0); }  # \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 sub get_selected_network {   my $selection = $list_B-&gt;get_selection;   my ($model, $iter) = $selection-&gt;get_selected;   return $model-&gt;get($iter, 0); }  # \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0435\u0442\u0435\u0439 (B) \u0434\u043b\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 sub load_networks {   my ($iface) = @_;   $list_B-&gt;get_model-&gt;clear;   my @networks = run_wpa_cli(\"-i $iface list_network\");   shift @networks;   foreach my $net (@networks) {     my ($id, $ssid, $bssid, $flags) = split(\/\\s\/, $net);     my $iter = $list_B-&gt;get_model-&gt;append();     $list_B-&gt;get_model-&gt;set($iter, 0 =&gt; $id, 1 =&gt; $ssid, 2 =&gt; $flags);     $networks{$ssid} = $id;   }   $select_button-&gt;set_sensitive(0);   $delete_button-&gt;set_sensitive(0); }  # \u0412\u044b\u0431\u043e\u0440 \u0441\u0435\u0442\u0438 sub select_network {   my $iface = get_selected_iface();   my $id = get_selected_network();   run_wpa_cli(\"-i $iface select_network $id\");   run_wpa_cli(\"-i $iface save_config\");   load_networks($iface); }  # \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u0438 sub delete_network {   my $iface = get_selected_iface();   my $id = get_selected_network();   run_wpa_cli(\"-i $iface remove_network $id\");   run_wpa_cli(\"-i $iface save_config\");   %networks=();   load_networks($iface); }  # \u0412\u0432\u043e\u0434 \u043f\u0430\u0440\u043e\u043b\u044f sub show_password_dialog {   my ($iface, $ssid, $parent_window) = @_;    my $dialog = Gtk3::Dialog-&gt;new(\"Password\", $parent_window,     [ 'modal' ], 'gtk-ok', 'accept', 'gtk-cancel', 'cancel');   $dialog-&gt;set_default_size(300, 100);    my $entry = Gtk3::Entry-&gt;new();   $entry-&gt;set_visibility(0);   $dialog-&gt;get_content_area()-&gt;pack_start($entry, 1, 1, 5);    $dialog-&gt;signal_connect(response =&gt; sub {     my ($dialog, $response) = @_;     if ($response eq 'accept') {       my $pass= $entry-&gt;get_text();       if ($pass) {         my $id = $networks{ $ssid };         if(!defined $id){           my @output = run_wpa_cli(\"-i $iface add_network\");           if(defined $output[0] &amp;&amp; $output[0] =~ \/(\\d+)\/){             $id = $1;           }           else{             $dialog-&gt;destroy;             return;           }         }         run_wpa_cli(\"-i $iface set_network $id ssid '\\\"$ssid\\\"'\");         run_wpa_cli(\"-i $iface set_network $id psk '\\\"$pass\\\"'\");         run_wpa_cli(\"-i $iface enable_network $id\");         run_wpa_cli(\"-i $iface save_config\");         sleep(1);       }     }     load_networks($iface);     $dialog-&gt;destroy;     $parent_window-&gt;destroy;   });    $dialog-&gt;show_all; }  # \u0412\u044b\u0431\u043e\u0440 \u0441\u0435\u0442\u0435\u0439 \u0438\u0437 \u043e\u0442\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 sub scan_networks {   my $iface = get_selected_iface();   return unless $iface;    # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f   my $scan_window = Gtk3::Dialog-&gt;new(     \"Scan Wi-Fi\",     $window,     [ 'modal' ]   );   $scan_window-&gt;set_default_size(400, 300);    my $vbox_scan = Gtk3::Box-&gt;new('vertical', 5);   my $content_area = $scan_window-&gt;get_content_area();   $content_area-&gt;add($vbox_scan);    my $scrolled_window = Gtk3::ScrolledWindow-&gt;new();   $scrolled_window-&gt;set_policy('automatic', 'automatic');   $scrolled_window-&gt;set_min_content_height(400);    # \u0421\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 (C)  my $store_C = Gtk3::ListStore-&gt;new('Glib::String','Glib::String');   my $list_C = Gtk3::TreeView-&gt;new($store_C);   $scrolled_window-&gt;add($list_C);   $vbox_scan-&gt;pack_start($scrolled_window, 1, 1, 5);    my $colC1 = Gtk3::TreeViewColumn-&gt;new_with_attributes('SSID', Gtk3::CellRendererText-&gt;new, text =&gt; 0);   my $colC2 = Gtk3::TreeViewColumn-&gt;new_with_attributes(' ', Gtk3::CellRendererText-&gt;new, text =&gt; 1);   $list_C-&gt;append_column($colC1);   $list_C-&gt;append_column($colC2);    # \u041a\u043d\u043e\u043f\u043a\u0438   my $start_button = Gtk3::Button-&gt;new_with_label(\"Scan\");   my $close_button = Gtk3::Button-&gt;new_with_label(\"Close\");    my $button_box = Gtk3::ButtonBox-&gt;new('horizontal');   $button_box-&gt;pack_start($_, 1, 1, 5) for ($start_button, $close_button);   $vbox_scan-&gt;pack_start($button_box, 1, 1, 5);    $scan_window-&gt;show_all;    run_wpa_cli(\"-i $iface scan\");   sleep(1);    # -------------------------------------------   # \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u0435\u0442\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 C (\u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043d\u043e\u043f\u043a\u0443 \"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c\" \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439)   my $selection_C = $list_C-&gt;get_selection;   $selection_C-&gt;signal_connect(changed =&gt; sub {     my ($model, $iter) = $selection_C-&gt;get_selected;     my $sel_ssid = $list_C-&gt;get_model-&gt;get($iter, 0);     my $iface = get_selected_iface();      show_password_dialog($iface, $sel_ssid, $scan_window);    });      # -------------------------------------------   $start_button-&gt;signal_connect(clicked =&gt; sub {     my %scan_results;     $list_C-&gt;get_model-&gt;clear;      my @results = run_wpa_cli(\"-i $iface scan_results\");     shift @results;      my $list = {};      foreach my $line (@results) {       $line =~ s\/[\\n\\r]+\/\/gm;       print STDERR \"$line\\n\";       my ($bssid, $freq, $signal, $flags, $ssid) = split(\/\\s+\/, $line, 5);       next unless $ssid;        $list-&gt;{$ssid} = 1;     }          foreach my $ssid (keys(%$list)){       my $iter = $list_C-&gt;get_model-&gt;append();       my $fl = (defined $networks{ $ssid }) ? '*':'';       $list_C-&gt;get_model-&gt;set($iter, 0 =&gt; $ssid, 1 =&gt; $fl);     }   });    # -------------------------------------------   # \u0417\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u043e\u043a\u043d\u0430   $close_button-&gt;signal_connect(clicked =&gt; sub {     $scan_window-&gt;destroy;   });  }  # ========================================= my $selection_A = $list_A-&gt;get_selection; $selection_A-&gt;signal_connect(changed =&gt; sub {   my $iface = get_selected_iface();   if ($iface) {     %networks=();     load_networks($iface);     $scan_button-&gt;set_sensitive(1);   } });  my $selection_B = $list_B-&gt;get_selection; $selection_B-&gt;signal_connect(changed =&gt; sub {   $select_button-&gt;set_sensitive(1);   $delete_button-&gt;set_sensitive(1); });  $scan_button-&gt;signal_connect('clicked',sub {   scan_networks(); });  $select_button-&gt;signal_connect('clicked',sub {   select_network(); });  $delete_button-&gt;signal_connect('clicked',sub {   delete_network(); });  $quit_button-&gt;signal_connect(clicked =&gt; sub {   Gtk3-&gt;main_quit; });  ######################################################### # \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 load_interfaces();  $window-&gt;show_all; Gtk3-&gt;main;  <\/code><\/pre>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432 \u043e\u043a\u043e\u0448\u043a\u0430\u0445 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c.<br \/>\u0410 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0435\u0433\u043e \u043e\u0442 \u0440\u0443\u0442\u0430 &#8212; \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 start_wpa_supplicant.sh \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 control interface, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0430 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u044b netdev, \u0430 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 netdev.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b:<\/p>\n<p>sudo apt install wpasupplicant libgtk3-perl isc-dhcp-client iw<\/p>\n<p>\u043b\u044e\u0431\u044b\u043c \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0433\u0440\u0443\u043f\u043f\u0443 netdev, \u0438 \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u043f\u043e \u0441\u0432\u043e\u0438\u043c \u043c\u0435\u0441\u0442\u0430\u043c<\/p>\n<p>\/etc\/udev\/rules.d\/99-wifi-autostart.rules<br \/>\/etc\/wpa_supplicant\/start_wpa_supplicant.sh<br \/>\/etc\/wpa_supplicant\/start_wpa_dhcp.sh<br \/>\/usr\/local\/bin\/wifi_ctl.pl<\/p>\n<p>\u0427\u0435\u043c \u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0435 NetworkManager \u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438? \u0422\u0435\u043c, \u0447\u0442\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043a\u0443\u0447\u0438 \u0432\u0441\u0435\u0433\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u043e\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435.<br \/>\u0427\u0435\u043c \u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0435 iwd, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440? \u041d\u0435 \u0437\u043d\u0430\u044e. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0435\u043c, \u0447\u0442\u043e \u0442\u0443\u0442 \u0432\u0441\u0451 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e, \u043a\u0442\u043e \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442, \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u0438 \u0433\u0434\u0435 \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a.<br \/>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u044f \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0434\u0435\u043b\u0430\u043b, \u043c\u0435\u043d\u044f \u0432\u0440\u043e\u0434\u0435 \u043f\u043e\u043a\u0430 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/893854\/\"> https:\/\/habr.com\/ru\/articles\/893854\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u043e \u043f\u0440\u043e\u0441\u044c\u0431\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0442\u043e\u0440\u043e\u0432 &#171;\u0447\u0442\u043e-\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443 \u0438 \u0432\u044b\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u043e\u0431\u043e\u0437\u0440\u0435\u043d\u0438\u0435&#187; &#8212; \u043d\u0443 \u0432\u043e\u0442, \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0438 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e:<\/p>\n<p>\u0421\u0443\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438: \u043a\u0430\u043a, \u043d\u0435 \u0438\u043c\u0435\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e Desktop Environment, \u0441 Network Manager \u0438 systemd, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043a Wi-Fi \u0441\u0435\u0442\u044f\u043c \u0431\u0435\u0437 \u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c?<br \/>\u0423\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u0435: \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443 \u043d\u0430\u0441 \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Wi-Fi \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432, \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0441\u0435\u0442\u044f\u043c.<\/p>\n<p>\u041b\u0435\u0433\u043a\u043e!<br \/>\u041d\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 &#8212; \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e \u0442\u043e\u043c, &#171;\u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c&#187; (\u043a\u043e\u043c\u0443 \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e &#8212; \u043f\u0440\u043e\u0441\u043a\u0430\u043a\u0438\u0432\u0430\u0435\u043c)<\/p>\n<h4>\u0412\u043e\u0441\u0445\u043e\u0434 \u0421\u043e\u043b\u043d\u0446\u0430 \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/h4>\n<p>\u0421\u0440\u0430\u0437\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0443 \u0440\u0430\u043c\u043a\u0438:<br \/>\u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u043f\u043e\u0447\u0442\u0438 \u0432\u0435\u0437\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f WPA\/WPA2, \u0434\u0430\u0436\u0435 \u0432 \u043a\u0430\u043a\u0438\u0445-\u043d\u0438\u0431\u0443\u0434\u044c ESP8266, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0447\u0435\u0440\u0435\u0437 WPA.<\/p>\n<p>\u0417\u0430 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0432 Linux \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 wpa_supplicant. \u041f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430 \u043e\u043d\u0430 \u0435\u0449\u0435 \u0438 \u0442\u0435\u043c, \u0447\u0442\u043e \u043a\u0440\u043e\u043c\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u043f\u043e\u043b\u043d\u0435 \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c\u0438 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u043c\u0438 \u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0447\u0435\u0440\u0435\u0437 wpa_cli.<\/p>\n<p>\u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0435\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u0432 \/etc\/wpa_supplicant, \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043e\u043d\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445, \u0432\u0438\u0441\u0438\u0442 \u0434\u0435\u043c\u043e\u043d\u043e\u043c, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044f \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435-\u043f\u0440\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0439 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u043d\u0438\u043c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u043e.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0451 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0447\u0435\u0440\u0435\u0437 &#171;control interface socket&#187;, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \/var\/run\/wpa_supplicant, \u0447\u0435\u043c \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f wpa_cli.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0443\u0436\u0435\u043d \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f:<br \/>\/etc\/wpa_supplicant.conf<\/p>\n<pre><code>ctrl_interface=\/run\/wpa_supplicant update_config=1 country=US  network={   ssid = \"MyNet\"   psk = \"MyPassword\" }<\/code><\/pre>\n<p>(country \u0442\u0443\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u044b WiFi)<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0451:<\/p>\n<p>wpa_supplicant -i wlan0 -c \/etc\/wpa_supplicant.conf<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 wlan0 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u0441\u0435\u0442\u0438 MyNet.<br \/>\u041e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c IP-\u0430\u0434\u0440\u0435\u0441 \u043f\u043e DHCP&#8230;<\/p>\n<p>\u041d\u043e \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u0430\u0446\u0438\u043e\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0442\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, Wi-Fi \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u0437-\u043f\u043e\u0434 \u0440\u0443\u0442\u0430.<\/p>\n<p>\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435.<br \/>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0434\u0430\u0432\u0430\u0442\u044c Wi-Fi \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430\u043c &#171;\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u0435 \u0438\u043c\u0435\u043d\u0430&#187; (\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u0435 \u0432 \u0442\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435, \u0447\u0442\u043e \u043e\u043d\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0443, \u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u043a\u043e\u0447\u0430\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e wlan0 &lt;-&gt; wlan1).<br \/>\u041d\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e wlan0 \u0442\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0442\u0438\u043f\u0430 wl557hwej24, \u0438 \u0432\u043e\u0442 \u044d\u0442\u043e-\u0442\u043e \u0432\u044b \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0436\u0435\u0442\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044f USB-\u0434\u043e\u043d\u0433\u043b.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0438 \u0443 \u043d\u0438\u0445 \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u0430 &#8212; \u043d\u0430\u0434\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0438\u0445 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c wpa_supplicant \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0418 \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u043e\u0443\u0442\u0431\u0443\u043a &#8212; \u0432\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u043d\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u0432\u0430\u043c \u0441\u0435\u0442\u0438, \u0430 \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0443\u0431\u0438\u0432\u0430\u044f \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b &#8212; \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435 \u0442\u043e \u0435\u0449\u0435.<br \/>\u041a\u0430\u043a \u0440\u0430\u0437 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u0435\u0442 wpa_cli: \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u043c\u0443 wpa_supplicant, \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u044c \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0430\u0440\u0443\u044e:<\/p>\n<p>scan &#8212; \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<br \/>scan_results &#8212; \u043f\u043e\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e<br \/>list_networks &#8212; \u043f\u043e\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e<\/p>\n<p>add_network &#8212; \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043d\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u044c (\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435) \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c N<br \/>set_network N ssid &#171;MyNet&#187;<br \/>set_network N psk &#171;MyPass&#187;<br \/>save_config<\/p>\n<p>select_network N &#8212; \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0435\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439<\/p>\n<p>remove_network N &#8212; \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0435<\/p>\n<p>\u0418 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u043b\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434. \u0423\u0436\u0435 \u043b\u0443\u0447\u0448\u0435, \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e &#171;\u0432\u0440\u0443\u0447\u043d\u0443\u044e&#187;.<br \/>\u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e wpa_cli \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043e\u0442 \u0440\u0443\u0442\u0430.<\/p>\n<p>\u041d\u0443 \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 &#8212; \u0443 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043f\u0438\u0442\u0430\u043d\u0438\u0435 (\u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c Power Save) &#8212; \u0442\u043e\u0433\u0434\u0430 \u043d\u0430\u0434\u043e \u0435\u0433\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c.<\/p>\n<p>\u0418\u0442\u043e\u0433\u043e, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439:<br \/>1 &#8212; \u043d\u0430\u0439\u0442\u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440(\u044b)<\/p>\n<p>2 &#8212; \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0438\u0442\u0430\u043d\u0438\u0435<br \/>3 &#8212; \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u0430\u043a \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (\u044d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0435)<br \/>4 &#8212; \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0433\u043e wpa_supplicant<br \/>5 &#8212; \u0435\u0441\u043b\u0438 \u0441\u0435\u0442\u044c \u043d\u043e\u0432\u0430\u044f &#8212; \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0435 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443<br \/>6 &#8212; \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a AP &#8212; \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c IP-\u0430\u0434\u0440\u0435\u0441.<\/p>\n<p>\u0412\u043e\u0442 \u044d\u0442\u043e \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c<\/p>\n<h4>\u041f\u0443\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u043e\u043d \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0439<\/h4>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 &#8212; \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0438\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u0435\u043c\u043e\u043d\u043e\u0432:<\/p>\n<pre><code class=\"bash\">#!\/bin\/sh -x  # \/etc\/wpa_supplicant\/start_wpa_supplicant.sh  PATH=\/sbin:$PATH; export PATH  CONFIG_DIR=\/etc\/wpa_supplicant CTL_DIR=\/run\/wpa_supplicant  exec &gt;&gt; \/var\/log\/wpa_auto.log exec 2&gt;&amp;1  check_config_file(){   if [ -n \"${CONFIG_FILE}\" ] &amp;&amp; [ ! -f \"${CONFIG_FILE}\" ] ; then     (       echo \"ctrl_interface=${CTL_DIR}\"       echo \"update_config=1\"       echo \"country=US\"     ) &gt; \"${CONFIG_FILE}\"   fi }  which iw NO_IW=$?  if [ ${NO_IW} ] ; then   IFACES=$(iwconfig 2&gt;&amp;1 | grep IEEE | awk '{ print $1 }') else   IFACES=$(iw dev | grep Interface | awk '{ print $2 }') fi  for i in ${IFACES} ; do   echo ${i}    CONFIG_FILE=${CONFIG_DIR}\/iface_${i}.conf    x=$(ps ax | grep -v grep | grep \"${CONFIG_FILE}\" | wc -l)   if [ \"$x\" -eq \"0\" ] ; then     echo \"No wpa_supplicant for ${i} found\"      # \u0412\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u0438\u0442\u0430\u043d\u0438\u0435 \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439     if [ ${NO_IW} ] ; then       iwconfig ${i} power on     else       iw dev ${i} set power_save off     fi      check_config_file      # \u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441     ip link set \"${i}\" up      # \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c wpa_supplicant     wpa_supplicant -i \"${i}\" -c \"${CONFIG_FILE}\" -B -C ${CTL_DIR}     chown -R root:netdev ${CTL_DIR}      # \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c wpa_cli, \u0447\u0442\u043e\u0431\u044b \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c DHCP \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438     wpa_cli -a \/etc\/wpa_supplicant\/wpa_dhcp.sh -i ${i} -B    fi  done  exit  <\/code><\/pre>\n<p>\u0414\u0430, \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043e\u0431\u044b\u043a\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439 shell-\u0441\u043a\u0440\u0438\u043f\u0442. \u041e\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u0430\u043a\u0438\u0435 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b \u0435\u0441\u0442\u044c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f iw \u0438\u043b\u0438 iwconfig, \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0434\u043b\u044f \u043d\u0438\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0435\u0449\u0435 \u043d\u0435\u0442, \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0434\u0435\u043c\u043e\u043d\u0430.<br \/>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432 \u0444\u043e\u043d\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c dhclient:<\/p>\n<pre><code class=\"bash\">#!\/bin\/sh  # \/etc\/wpa_supplicant\/wpa_dhcp.sh  PATH=\/sbin:$PATH; export PATH  exec &gt;&gt; \/var\/log\/wpa_dhcp.log exec 2&gt;&amp;1  INTERFACE=\"$1\" EVENT=\"$2\"  echo \"Event received: $EVENT on interface $INTERFACE\"   if [ \"$EVENT\" = \"CONNECTED\" ]; then   echo \"Wi-Fi connected on $INTERFACE, requesting DHCP...\"   dhclient -r \"$INTERFACE\"   dhclient \"$INTERFACE\" fi <\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0447\u0435\u0440\u0435\u0437 udevd:<\/p>\n<p>\/etc\/udev\/rules.d\/99-wifi-autostart.rules<\/p>\n<pre><code>ACTION==\"add\", SUBSYSTEM==\"net\", KERNEL==\"wl*\", RUN+=\"\/etc\/wpa_supplicant\/start_wpa_supplicant.sh %k\"<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0438\u043f\u0430 wlan \u0441\u043a\u0440\u0438\u043f\u0442 \u0430\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f.<br \/>\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0435\u043c\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#8212; \u0438\u043c\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430?<br \/>\u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0443\u0442 \u043e\u043d \u043a\u0430\u043a \u0440\u0430\u0437 \u0435\u0449\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d, \u0442\u0443\u0442 \u0431\u0443\u0434\u0435\u0442 wlan0, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 \u0447\u0442\u043e-\u0442\u043e &#171;\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0435&#187;.<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u0443\u0436\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430: \u0435\u0441\u043b\u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433-\u0444\u0430\u0439\u043b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0441\u0435\u0442\u044c &#8212; wpa_supplicant \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u043a \u043d\u0435\u0439, wpa_cli, \u0436\u0434\u0443\u0449\u0438\u0439 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 dhclient \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0430\u0434\u0440\u0435\u0441.<br \/>\u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0439.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e &#8212; \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u0441 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043e\u043a\u043e\u0448\u043a\u0430\u043c\u0438, \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e &#8212; perl.<\/p>\n<pre><code class=\"perl\">#!\/usr\/bin\/perl use strict; use warnings; use Gtk3 '-init'; use IPC::Open2;  use Data::Dumper;  my $wpa_cli = \"\/sbin\/wpa_cli\";  my %networks;  # \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430 my $window = Gtk3::Window-&gt;new('toplevel'); $window-&gt;set_title(\"Wi-Fi Manager\"); $window-&gt;set_default_size(400, 400); $window-&gt;signal_connect(delete_event =&gt; sub { Gtk3-&gt;main_quit; });  # \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 (A) my $store_A = Gtk3::ListStore-&gt;new('Glib::String'); my $list_A = Gtk3::TreeView-&gt;new($store_A); my $colA1 = Gtk3::TreeViewColumn-&gt;new_with_attributes('Interface', Gtk3::CellRendererText-&gt;new, text =&gt; 0); $list_A-&gt;append_column($colA1);  # \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0435\u0442\u0435\u0439 (B) my $store_B = Gtk3::ListStore-&gt;new('Glib::String','Glib::String','Glib::String'); my $list_B = Gtk3::TreeView-&gt;new($store_B); my $colB1 = Gtk3::TreeViewColumn-&gt;new_with_attributes('#', Gtk3::CellRendererText-&gt;new, text =&gt; 0); my $colB2 = Gtk3::TreeViewColumn-&gt;new_with_attributes('SSID', Gtk3::CellRendererText-&gt;new, text =&gt; 1); my $colB3 = Gtk3::TreeViewColumn-&gt;new_with_attributes('Status', Gtk3::CellRendererText-&gt;new, text =&gt; 2); $list_B-&gt;append_column($colB1); $list_B-&gt;append_column($colB2); $list_B-&gt;append_column($colB3);  # \u041a\u043d\u043e\u043f\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f my $scan_button = Gtk3::Button-&gt;new_with_label(\"Add network\"); my $select_button = Gtk3::Button-&gt;new_with_label(\"Select\"); my $delete_button = Gtk3::Button-&gt;new_with_label(\"Remove\"); my $quit_button = Gtk3::Button-&gt;new_with_label(\"Quit\"); $_-&gt;set_sensitive(0) for ($scan_button, $select_button, $delete_button);  # \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043a\u043d\u0430 {   my $vbox = Gtk3::Box-&gt;new('vertical', 5);   $window-&gt;add($vbox);    $vbox-&gt;pack_start($list_A, 1, 1, 5);   $vbox-&gt;pack_start($list_B, 1, 1, 5);    my $button_box = Gtk3::ButtonBox-&gt;new('horizontal');   $button_box-&gt;pack_start($_, 1, 1, 5) for ($scan_button, $select_button, $delete_button, $quit_button);   $vbox-&gt;pack_start($button_box, 1, 1, 20); }  # ========================================= # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434 wpa_cli sub run_wpa_cli {   my ($cmd) = @_;   print STDERR \"cmd: ==$cmd==\\n\";   open2(my $out, my $in, \"$wpa_cli $cmd\");   my @result = &lt;$out&gt;;   print STDERR Dumper(@result);   return @result; }  # \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 (A) sub load_interfaces {   $list_A-&gt;get_model-&gt;clear;   my @interfaces = run_wpa_cli('interface');   foreach my $iface (@interfaces) {     next if($iface =~ \/\\w+\\s+\\w\/);     $iface =~ s\/\\s+$\/\/;     my $iter = $list_A-&gt;get_model-&gt;append();     $list_A-&gt;get_model-&gt;set($iter, 0 =&gt; $iface);   } }  # \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 sub get_selected_iface {   my $selection = $list_A-&gt;get_selection;   my ($model, $iter) = $selection-&gt;get_selected;   return $model-&gt;get($iter, 0); }  # \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 sub get_selected_network {   my $selection = $list_B-&gt;get_selection;   my ($model, $iter) = $selection-&gt;get_selected;   return $model-&gt;get($iter, 0); }  # \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0435\u0442\u0435\u0439 (B) \u0434\u043b\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 sub load_networks {   my ($iface) = @_;   $list_B-&gt;get_model-&gt;clear;   my @networks = run_wpa_cli(\"-i $iface list_network\");   shift @networks;   foreach my $net (@networks) {     my ($id, $ssid, $bssid, $flags) = split(\/\\s\/, $net);     my $iter = $list_B-&gt;get_model-&gt;append();     $list_B-&gt;get_model-&gt;set($iter, 0 =&gt; $id, 1 =&gt; $ssid, 2 =&gt; $flags);     $networks{$ssid} = $id;   }   $select_button-&gt;set_sensitive(0);   $delete_button-&gt;set_sensitive(0); }  # \u0412\u044b\u0431\u043e\u0440 \u0441\u0435\u0442\u0438 sub select_network {   my $iface =<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-453167","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/453167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=453167"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/453167\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=453167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=453167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=453167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}