Создание обходного интерфейса GUI беспроводной сети

Я просто установил Alpine linux, и все прошло так гладко, как я надеялся, за исключением беспроводной сети (и кнопка питания XFCE и кнопки перезагрузки были серыми, но это не имеет значения здесь).

Я не буду использовать компьютер, единственное, что ему нужно сделать, это подключиться к беспроводным сетям и получить доступ к Интернету через браузер. Но поскольку люди, использующие этот компьютер, являются полноправными разработчиками технологий, я не могу сказать им, что они делают это (alpine linux wireless connection guide) каждый раз, когда они меняют сети; простое зрелище терминала издевается над ними. И поэтому мне нужно получить их графический интерфейс.

Я попытался возиться с поиском графических интерфейсов сетевого менеджера для Alpine linux. Мне действительно нужно что-то вроде Wicd, но я только нашел connman и networkmanager в тестовых репозиториях Alpine, однако ни один из них не запускался должным образом, у меня есть сомнения, что я мог бы заставить wicd работать самостоятельно, даже если мне удастся научиться создавать APKBUILDs и скомпилировать его вовремя ..

Поэтому я подумал, что, прежде чем я сдадусь, возможно, я смогу создать что-то со сценарием. Я имею в виду все, что мне нужно, это то, что он говорит в руководстве по беспроводному подключению на альпийской вики Linux, как sudo.

Просто работает

iwlist wlan0 scanning 

Grepping мой путь к ESSIDs и перечисление их все аккуратно, возможно, упорядочено по силе сигнала. Затем, после того, как вы выбрали, в приглашении пароля появится запрос на кодовую фразу. И после этого…

 iwconfig wlan0 essid MyNet #set SSID wpa_passphrase PASSPHRASE > wpa.conf #set Passphrase wpa_supplicant -Dwext -iwlan0 -c ./wpa.conf #Connect 

и это должно сделать это. Я могу найти способы проверить подключение и автоматизировать подсказку и т. Д., Но мне нужно знать, с чего начать, если не написать полную программу GTK или Qt.

Я хотел бы сделать это в сценарии, как быстро и легко с чем-то вроде Zenity, можно ли это сделать? Может ли кто-нибудь дать мне пример? Благодарю.

(Btw Alpine поставляется с ASH, а не с BASH, было бы лучше, если бы я мог писать сценарии в ASH, но если нет, я не против использования BASH или Python)

One Solution collect form web for “Создание обходного интерфейса GUI беспроводной сети”

После долгих часов работы мне удалось приготовить что-то приличное, используя зенит, и некоторые изменения в суде. Я дам шаг за шагом, как я сделал все это, в случае, если кто-то попадает в уродливую ситуацию в дистрибутиве Linux, у которого есть только устаревшее беспроводное сетевое программное обеспечение (например, беспроводные инструменты) без какого-либо простого способа получить известный графический интерфейс, как wicd …

зависимости:

 ash(or bash), sudo, zenity, awk, wget, ping, wpa_supplicant, wireless-tools (ip, iwlist, iwconfig, wpa_passphrase) 

Он также необязательно зависит от notify-send (эти экземпляры могут быть легко заменены на zenity -notification, хотя)

Во-первых, мне пришлось установить файл sudoers, чтобы позволить моим / всем пользователям запускать несколько конкретных команд, это строка (обратите внимание, что я использую альпийский Linux, у вас могут быть те же программы, что и у меня, но их исполняемые файлы могут быть расположены в другом месте, сначала найдите правильный путь для каждого)

Вы увидите там одну странную команду (wpa_restart), которую мы создадим позже.

в sudoers (visudo):

 ALL ALL=(ALL) NOPASSWD: /usr/sbin/iwlist, /usr/sbin/iwconfig, /sbin/ip /sbin/wpa_restart 

Прежде чем продолжить, давайте установим wpa_supplicant для запуска при загрузке (пользователи Open-RC, пользователи systemd должны будут сделать это способом systemd)

 rc-update add wpa_supplicant boot 

После этого войдите в систему как root (или используйте su ) и запустите следующее:

 echo > /etc/wpa_supplicant/wpa_supplicant.conf chmod +777 /etc/wpa_supplicant/wpa_supplicant.conf chmod -r /etc/wpa_supplicant/wpa_supplicant.conf echo > /usr/sbin/wireless_gui chmod +x /usr/sbin/wireless_gui echo > /usr/sbin/wireless_check chmod +x /usr/sbin/wireless_check echo > /sbin/wpa_restart chmod +x /sbin/wpa_restart 

Далее позволяет фактически заполнить эти файлы с помощью некоторых скриптов …

/ sbin / wpa_restart (это работает только для open-rc, для пользователей systemd потребуется что-то другое, этот файл используется для перезапуска wpa_supplicant, например, если вы переключаетесь между соединениями, или если ваше соединение терпит неудачу, и вам нужно снова подключиться)

 #!/bin/ash rc-service wpa_supplicant restart 

/ usr / sbin / wireless_check (проверяет подключение и запускает ssid selection gui, если их нет):

 #!/bin/ash wget -q -s http://google.com if [[ $? -eq 0 ]]; then eth=$(ifconfig eth0 | grep inet addr) if [ $eth !=" " ];then SSID=$(iwconfig wlan0 | grep ESSID | cut -d: -f2 ) notify-send "Connected to Wireless Network" "$SSID" else notify-send "Connected Via Ethernet" "" fi else /usr/sbin/wireless_gui fi 

/ usr / sbin / wireless_gui (основная сделка):

 #!/bin/ash sudo ip link set wlan0 up ssid=$(sudo iwlist wlan0 scanning | awk -F: 'BEGIN{ printf "zenity --list --text \"Available Networks\" --list --column ESSID --column Security --column Signal "; }/Quality/{ split($0,x,"="); Quality = int(x[2]*100/70+.5); }/Encryption/{ Encryption = $2; }/ESSID/{ ESSID = $2; printf "%s \"%s\" \"%s%%\" \\\n", ESSID, Encryption, Quality}' |sh); if [ $ssid !=" " ]; then zenity --warning --text "Failed to select network!" else $1="30" echo $1 sudo ip link set wlan0 down sudo iwconfig wlan0 essid $ssid wpa_passphrase $ssid > /etc/wpa_supplicant/wpa_supplicant.conf $(zenity --password --title "Secured Network") sudo ip link set wlan0 up sudo wpa_restart sleep 2 success=$(ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error) if [ $success = "error" ]; then echo $success zenity --question --title "Wrong Password" --text "Retry?" while [[ $? -eq 0 ]]; do wpa_passphrase $ssid > /etc/wpa_supplicant/wpa_supplicant.conf $(zenity --password --title "Secured Network") sudo wpa_restart sleep 2 success=$(ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error) if [ $success = "error" ]; then zenity --question --title "Wrong Password" --text "Retry?" else notify-send "Connected to Wireless Network" "$ssid" break fi done else notify-send "Connected to Wireless Network" "$ssid" fi fi 

Теперь это то, что я называю работой с тем, что у вас есть 🙂

Теперь выйдите из этого приглашения root / su, запустите wireless_gui один раз в качестве пользователя и посмотрите, все ли работает, и все готово.

Если это не сработает, единственное, что может быть неправильным, это то, что у вас нет золы (замените #! / Bin / ash на #! / Bin / bash, чтобы исправить), вы получили один из путей неправильно в sudoers, вы забыли одну из команд chmod, ваш беспроводной интерфейс не называется wlan0 (используйте ifconfig или ip-ссылку, чтобы узнать, а затем переименуйте все упоминания wlan0 на то, что называется вашим интерфейсом), или, конечно же, вам не хватает зависимость.

В идеале это должно быть идеальным, так как Wireless_check запускается каждый раз при входе в среду рабочего стола. Он проверяет подключение к Интернету и затем выдает уведомление, если вы подключены, запускает wireless_gui, если вы этого не делаете. Беспроводной графический интерфейс сканирует и перечисляет все соседние ESSID, вы выбираете один, а затем вводите пароль. Если он не сможет подключиться, он спросит вас, хотите ли вы повторить ввод пароля до тех пор, пока вы не добьетесь успеха или не скажете «нет».

Очень приятное решение, если вы либо не хотите устанавливать сетевой менеджер, либо если вы (как и я) не можете.

  • Изменить скрипт для использования whiptail вместо zenity
  • Есть ли какая-либо программа для получения пароля GPG из GUI
  • Сохранять диалоги «Zenity» всегда на верхнем плане на переднем плане
  • вызывать скрипт, если окно zenity минимизировано, изменено или перемещено
  • Повторное использование пользовательского ввода в скрипте
  • Как применить индикатор прочности трубы / yad?
  • Почему вход в канал хорошо подходит для zenity, но <файловые неполадки?
  • zenity --notification: кнопка «Действие по умолчанию»
  • Окно сообщения GUI в SLES 11
  • Что случилось с моим диалогом зенитности? селектор не распространяется по вертикали
  • Отображение отрицательных чисел в zenity -list
  • Linux и Unix - лучшая ОС в мире.