Настройка сети Wi-Fi из консоли

Если старт сети производится из-под пользователя

su
Password:

Убиваем предыдущую сессию wpa_supplicant, если была запущена.

[ $(pidof wpa_supplicant) ] && kill $(pidof wpa_supplicant)

Если нет конфигурационного файла wpa_supplicant.conf, создаём

wpa_passphrase MYUSSID MYPASSWORD > /etc/wpa_supplicant.conf

Определяем интерфейс Wi-Fi

basename $(dirname /sys/class/net/*/phy80211)
wlan0

Запускаем соединение с Wi-Fi роутером

wpa_supplicant -B -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf
Successfully initialized wpa_supplicant

Получаем IP автоматически

dhcpcd wlan0
dhcpcd[2217]: version 6.4.7 starting
dhcpcd[2217]: DUID 00:01:00:01:1b:ee:81:e8:20:68:9d:3a:89:c2
dhcpcd[2217]: wlan0: IAID 9d:3a:89:c2
dhcpcd[2217]: wlan0: soliciting a DHCP lease
dhcpcd[2217]: wlan0: soliciting an IPv6 router
dhcpcd[2217]: wlan0: offered 192.168.1.100 from 192.168.1.1
dhcpcd[2217]: wlan0: leased 192.168.1.100 for 7200 seconds
dhcpcd[2217]: wlan0: adding route to 192.168.1.0/24
dhcpcd[2217]: wlan0: adding default route via 192.168.1.1
dhcpcd[2217]: forked to background, child pid 2248

Одна тонкость, для новых версий wpa_supplicant указать драйвер nl80211 вместо wext.

Все одним скриптом:

Запускать от root

#!/bin/sh
#wi-fi up (console). DdShurick 25.11.14 version 002 GPL
if [ $(whoami) = root ]; then
IFACE=$(basename $(dirname /sys/class/net/*/phy80211))
[ $(pidof dhcpcd) ] && dhcpcd -k $IFACE
[ $(pidof wpa_supplicant) ] && kill $(pidof wpa_supplicant)
 if [ "$(cat /sys/class/net/$IFACE/operstate)" != "up" ]; then
ifconfig $IFACE up
sleep 2
 fi
echo "Выберите сеть"
 if iwlist $IFACE scan | grep ESSID; then
echo -n "ESSID: "
read MYESSID
echo -n "Пароль "
read MYPASSWD
wpa_passphrase $MYESSID $MYPASSWD > /tmp/wpa.conf
wpa_supplicant -B -D wext -i $IFACE -c /tmp/wpa.conf
dhcpcd $IFACE
 else
echo "Доступные сети не найдены"
 fi
else
echo "У вас нет прав на выполнение wifiup, нужны права root"
fi

Обсуждение

14.07.11 DdShurick

GUI

По просьбе из обсуждения, то же но с GUI

#!/bin/sh
#wi-fi up. DdShurick 04.12.14 version 003
which loginroot && loginroot=loginroot || loginroot=sudo
[ `id -u` = 0 ] || exec $loginroot $0
IFACE=$(basename $(dirname /sys/class/net/*/phy80211))
[ $(pidof dhcpcd) ] && dhcpcd -k $IFACE
[ $(pidof wpa_supplicant) ] && kill $(pidof wpa_supplicant)
[ "$(cat /sys/class/net/$IFACE/operstate)" = "up" ] || ifconfig $IFACE up
sleep 2
iwlist $IFACE sc | egrep 'Address:|Channel:|Quality|Encryption key:|ESSID:' > /tmp/iwlist
export Window="<vbox>
  <text><label>Найдены сети Wi-Fi</label></text>
  <list>
   <variable>MYESSID</variable>
   $(awk -F \: '/ESSID/ {print "<item>"$2"</item>"}' /tmp/iwlist)
  </list>
  <button><label>Подключить</label></button>
 </vbox>"
eval $(gtkdialog -c --program "Window")

[ "$EXIT" = "Cancel" -o  "$EXIT" = "abort" ] && exit
[ "$MYESSID" ] || exit
[  "$EXIT" = "Подключить"  ] || exit
KEY=$(grep $MYESSID -B 1 /tmp/iwlist | awk '/Encryption/ {print $2}')
if [ "$KEY" = "key:on" ]; then
export Passw="<vbox>
  <text><label>Введите пароль для $MYESSID</label></text>
  <entry>
   <visible>password</visible>
   <variable>MYPASSWD</variable>
  </entry>
  <button><label>Подключить</label></button>
</vbox>"
eval $(gtkdialog -c --program "Passw") 
[ "$EXIT" = "Cancel" -o  "$EXIT" = "abort" ] && exit
[ "$MYPASSWD" ] || exit
[  "$EXIT" = "Подключить"  ] || exit
wpa_passphrase $MYESSID $MYPASSWD | grep -v '#psk' > /tmp/wpa.conf
wpa_supplicant -B -D nl80211 -i $IFACE -c /tmp/wpa.conf
#wpa_supplicant -B -D wext -i $IFACE -c /tmp/wpa.conf #для старых версий wpa_supplicant
dhcpcd $IFACE
 if [ "$?" = 0 ]; then
export Addr="<vbox>
  <text><label>Соединение с сетью ${MYESSID} установлено.Сохранить настройки для сети ${MYESSID}?</label></text>
  <button><label>Сохранить</label></button>
</vbox>"
eval $(gtkdialog -c --program "Addr") 
[ "$EXIT" = "Cancel" -o  "$EXIT" = "abort" ] && exit
[  "$EXIT" = "Сохранить"  ] || exit
MYADDR=$(grep -B 5 USSR /tmp/iwlist | awk '/Address/ {print $5}')
cp /tmp/wpa.conf /etc/network-wizard/wireless/wpa_profiles/${MYADDR}.wpa.conf
 fi
elif [ "$KEY" = "key:off" ]; then
iwconfig $IFACE essid $MYESSID key off
dhcpcd $IFACE
fi

Для gtk3 <list> заменить на <tree>

Испытано: PRA, PR-1312-XFCE, AltLinux Simply, Richy. Теоретически должно работать в любом Linux.

Добавлено DdShurick

Печать/экспорт