Criando uma solução alternativa da GUI do Wireless Network Management

1

Acabei de instalar o Alpine linux, e tudo correu tão bem quanto eu esperava, exceto pela rede sem fio (e o botão Power e os botões de reinicialização do XFCE sendo acinzentados, mas isso é irrelevante aqui).

Eu não serei o único a usar o computador, as únicas duas coisas que ele precisa fazer é se conectar a redes sem fio e acessar a Internet através de um navegador. Mas como as pessoas que usam este computador são goofs completos com a tecnologia, eu não posso dizer a eles para fazerem isso (guia de conexão sem fio alpine linux) toda vez que eles mudam de rede; a mera visão de um terminal os assustaria. E então eu preciso de uma GUI para eles.

Eu tentei brincar procurando por GUIs do gerenciador de rede para o Alpine Linux. O que eu realmente preciso é algo como o Wicd, mas eu só encontrei o connman e o networkmanager nos repositórios de teste do Alpine, mas nenhum deles rodava corretamente, eu tenho dúvidas de que poderia trabalhar sozinha mesmo se eu conseguisse aprender a criar APKBUILDs e compilá-lo no tempo ..

Então eu pensei que no final antes de desistir talvez eu possa criar algo com um script. Quero dizer tudo que eu preciso fazer é o que diz no guia de conexão sem fio no wiki linux alpino, como sudo.

Apenas executando

iwlist wlan0 scanning

Arrastando meu caminho para os ESSIDs e listando-os todos nitidamente, talvez ordenados pela força do sinal. Em seguida, depois que um deles for selecionado, um prompt de senha será exibido solicitando a frase secreta. E depois disso ...

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

e isso deve ser feito. Eu posso descobrir maneiras de verificar a conectividade e automatizar o prompt e assim por diante, mas eu preciso saber para começar, se isso pode ser feito sem escrever apenas um programa completo do GTK ou Qt.

Eu gostaria de fazer isso em um script de maneira rápida e fácil com algo como Zenity, pode ser feito? Alguém poderia me dar um exemplo? Obrigado.

(Btw Alpine vem com ASH, não com BASH, seria melhor se eu pudesse fazer o script em ASH, mas se não, não me importaria em usar BASH ou Python)

    
por Cestarian 29.08.2015 / 21:42

1 resposta

1

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.

    
por 31.08.2015 / 02:15