무선 네트워크 관리 GUI 솔루션 만들기

무선 네트워크 관리 GUI 솔루션 만들기

방금 Alpine Linux를 설치했는데 무선 네트워크를 제외한 모든 것이 예상대로 원활하게 진행되고 있습니다(XFCE의 전원 버튼과 재시작 버튼이 회색으로 표시되어 있지만 여기서는 관련이 없습니다).

저는 컴퓨터를 사용하는 사람이 아닙니다. 컴퓨터가 해야 할 유일한 두 가지 일은 무선 네트워크에 연결하고 브라우저를 통해 인터넷에 액세스하는 것입니다. 하지만 이 컴퓨터를 사용하는 사람들은 전혀 기술적인 지식이 없기 때문에 그들에게 그렇게 하라고 말할 수는 없습니다.이 (알파인 리눅스 무선 연결 가이드)네트워크를 변경할 때마다 터미널을 보는 것만으로도 겁이 납니다. 그래서 그들에게 GUI를 제공해야 합니다.

Alpine Linux용 네트워크 관리자 GUI를 찾으려고 합니다. 나에게 정말로 필요한 것은 Wicd와 같은 것이지만 Alpine의 테스트 저장소에서 connman과 networkmanager만 찾았지만 둘 다 올바르게 시작되지 않으며 APKBUILD를 만들고 컴파일하는 방법을 배우더라도 wicd가 자체적으로 작동할 수 있을지 의심됩니다. 시간에..

그래서 결국 포기하기 전에 스크립트로 뭔가를 만들 수 있지 않을까 하는 생각이 들었습니다. 내 말은, 내가 해야 할 일은 알파인 리눅스 위키의 무선 연결 가이드에서 sudo와 같이 말하는 것뿐입니다.

방금 달렸어

iwlist wlan0 scanning

ESSID를 찾아서 신호 강도별로 정렬하여 깔끔하게 나열하세요. 하나를 선택하면 비밀번호를 묻는 비밀번호 프롬프트가 나타납니다. 이후...

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

그게 다야. 연결성과 자동 프롬프트 등을 확인하는 나만의 방법을 알아낼 수 있지만 먼저 전체 GTK나 Qt 프로그램을 작성하지 않고도 이 작업을 수행할 수 있는지 알아야 합니다.

Zenity 같은 스크립트를 이용해서 빠르고 쉽게 하고 싶은데 가능할까요? 누군가 나에게 예를 들어 줄 수 있습니까? 감사해요.

(그런데 Alpine에는 BASH가 아닌 ASH가 함께 제공됩니다. ASH에서 스크립트를 작성할 수 있으면 좋겠지만 그렇지 않다면 BASH나 Python을 사용해도 괜찮습니다.)

답변1

말도 안되는 일 이후몇 시간이 걸렸어요나는 zenity와 일부 sudoers 변경 사항을 사용하여 괜찮은 것들을 요리할 수 있었습니다. 알려진 GUI를 얻을 수 있는 쉬운 방법 없이 오래된 무선 네트워킹 소프트웨어(예: 무선 도구)만 사용하여 Linux 배포판을 사용하는 추악한 상황에 다른 사람이 갇힐 경우를 대비하여 이 모든 작업을 수행한 방법을 단계별로 설명하겠습니다. 정말...

종속성:

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

또한 선택적으로 다음에 따라 달라집니다.알림이 전송되었습니다.(이러한 인스턴스는 다음으로 쉽게 대체될 수 있습니다.제니티 - 알림하지만)

먼저 나/모든 사용자가 특정 명령을 실행할 수 있도록 sudoers 파일을 설정해야 했습니다. 다음 줄이 있습니다. (나는 알파인 리눅스를 사용하고 있습니다. 여러분도 나와 동일한 프로그램을 가지고 있을 수 있지만 해당 실행 파일은 장소가 다르므로 먼저 각각에 대한 올바른 경로를 찾으세요.)

나중에 생성할 이상한 명령(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

이 작업을 수행한 후 로그인하세요.루트 사용자로(또는 사용) 다음 명령을 실행합니다.

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 선택 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 프롬프트를 종료하고 다음을 실행하십시오.무선 그래픽 사용자 인터페이스일단 사용자로서 모든 것이 제대로 작동하는지 확인하고 나면 작업이 완료됩니다.

작동하지 않으면 잘못될 수 있는 유일한 것은 Ash가 없다는 것입니다(#!/bin/ash를 #!/bin/bash로 대체하여 수정). sudoers의 경로 중 하나가 잘못되었습니다. , 명령 중 하나를 chmod하는 것을 잊었습니다. 무선 인터페이스가 wlan0이라고 불리지 않습니다(사용구성된 경우또는IP 링크wlan0에 대한 모든 언급을 찾아서 이름을 인터페이스 이름으로 바꾸십시오. 그렇지 않으면 종속성이 누락됩니다.

이상적인 설정은 다음과 같아야 합니다.무선 체크데스크탑 환경에 로그인할 때마다 실행됩니다. 인터넷 연결을 확인하고 연결되면 알림을 보낸 다음 시작됩니다.무선 그래픽 사용자 인터페이스그렇지 않은 경우. 무선 GUI는 근처의 모든 ESSID를 검색하고 나열하며, 하나를 선택하고 비밀번호를 입력합니다. 연결에 실패하면 성공할 때까지 비밀번호를 다시 입력할지 아니면 거부할지 묻는 메시지가 표시됩니다.

Network Manager를 설치하고 싶지 않거나 (나처럼) 설치할 수 없는 경우 이는 매우 좋은 솔루션입니다.

관련 정보