Depois de brincar por horas eu consegui cozinhar algo decente usando zenity e algumas mudanças de sudoers. Eu vou dar um passo a passo como eu fiz tudo, no caso de alguém ser pego na feia situação de estar em uma distribuição linux que só tem obsoleto software de rede sem fio (como ferramentas sem fio) sem qualquer maneira fácil de obter um GUI conhecido como wicd ...
Dependências:
ash(or bash), sudo, zenity, awk, wget, ping, wpa_supplicant, wireless-tools (ip, iwlist, iwconfig, wpa_passphrase)
Também depende opcionalmente de notify-send (essas instâncias podem ser facilmente substituídas por zenity --notification )
Primeiro tive que configurar o arquivo sudoers para permitir que meus / todos os usuários executassem alguns comandos específicos, esta é a linha (note que estou usando o linux alpino, você pode ter os mesmos programas que eu, mas seus executáveis pode estar localizado em um lugar diferente, encontrar o caminho correto para cada um primeiro)Você verá um comando estranho lá (wpa_restart) nós criaremos esse arquivo mais tarde.
em sudoers (visudo):
ALL ALL=(ALL) NOPASSWD: /usr/sbin/iwlist, /usr/sbin/iwconfig, /sbin/ip /sbin/wpa_restart
Antes de continuar, vamos definir o wpa_supplicant para iniciar na inicialização (usuários Open-RC; os usuários systemd precisarão fazer isso da maneira do systemd)
rc-update add wpa_supplicant boot
Depois de fazer este login como root (ou use su ) e execute o seguinte:
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
Em seguida, vamos realmente preencher esses arquivos com alguns scripts ...
/ sbin / wpa_restart (isso só funciona para open-rc, os usuários systemd precisarão de algo diferente, esse arquivo é usado para reiniciar o wpa_supplicant, por exemplo, se você estiver alternando entre conexões ou se sua conexão falhar e você precisar reconectar e tal):
#!/bin/ash
rc-service wpa_supplicant restart
/ usr / sbin / wireless_check (verifica a conectividade e inicia a seleção do ssid se não houver nenhum):
#!/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 (o negócio principal):
#!/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
Agora é isso que eu chamo de trabalhar com o que você tem:)
Agora saia desse prompt root / su, execute wireless_gui uma vez como usuário e veja se tudo está funcionando e pronto.
Se não funcionar, a única coisa que pode estar errada é que você não tem cinza (substitua #! / bin / ash com #! / bin / bash para corrigir), você tem um dos caminhos errado em sudoers, você esqueceu um dos comandos chmod, sua interface wireless não é chamada wlan0 (use ifconfig ou ip link para descobrir e renomeie todas as menções de wlan0 para seja qual for a sua interface é chamada) ou, claro, você está perdendo uma dependência.
A maneira ideal de configurar isso é que wireless_check seja executado toda vez que você fizer login em um ambiente de área de trabalho. Ele verifica a conectividade com a Internet e, em seguida, gera uma notificação se você estiver conectado, inicia o wireless_gui se não estiver. A GUI sem fio procurará e listará todos os ESSIDs próximos, você escolhe um e, em seguida, insere uma senha. Se não conseguir conectar, ele perguntará se você deseja repetir a digitação da senha até ter sucesso ou dizer não.
Uma solução muito boa se você não quiser instalar um gerenciador de rede ou se você (como eu) não puder.