ワイヤレスネットワーク管理GUIソリューションの作成

ワイヤレスネットワーク管理GUIソリューションの作成

私はAlpine Linuxをインストールしましたが、ワイヤレスネットワークを除くすべてが期待どおりにスムーズに行われています(XFCEの電源ボタンと再起動ボタンは灰色で表示されていますが、ここでは関係ありません)。

私はコンピュータを使用している人ではありません。コンピュータがしなければならない唯一の2つのことは、ワイヤレスネットワークに接続し、ブラウザを介してインターネットにアクセスすることです。しかし、このコンピュータを使用している人はまったく技術的な知識がないので、彼らにそうするように言うことはできません。この(アルパインLinuxワイヤレス接続ガイド)ネットワークを変更するたびにターミナルを見るだけで怖いです。だから彼らにGUIを提供する必要があります。

Alpine Linux用のネットワーク管理者のGUIを見つけようとしています。私にとって本当に必要なのは、Wicdのようなものですが、Alpineのテストリポジトリでconnmanとnetworkmanagerだけを見つけましたが、どちらも正しく起動せず、APKBUILDを作成してコンパイルする方法を学んでも、wicdがそれ自体で動作できるかどうか疑問に思います。時に..

だから結局、あきらめる前にスクリプトで何かを作れないかという気がしました。私の言うことは、私がしなければならないことは、Alpine Linux Wikiのワイヤレス接続ガイドでsudoのように言うことだけです。

走ったばかり

iwlist wlan0 scanning

ESSIDを見つけ、信号強度でソートしてきれいにリストします。 1つを選択すると、パスワードの入力を求めるパスワードプロンプトが表示されます。以来...

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ファイルを設定する必要がありました。次の行があります。 (私はAlpine 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ユーザーとして(または使用) 次のコマンドを実行します。

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のパスの1つが間違っています。 、コマンドのいずれかをchmodすることを忘れました。ワイヤレスインターフェイスはwlan0と呼ばれません(使用設定されている場合またはIPリンクwlan0へのすべての言及を見つけて、名前をインターフェース名に変更します。それ以外の場合は依存関係がありません。

理想的な設定は次のとおりです。ワイヤレスチェックデスクトップ環境にログインするたびに実行されます。インターネット接続を確認して接続すると、通知を送信してから起動します。ワイヤレスグラフィックユーザーインターフェースそうでない場合。ワイヤレスGUIは、近くのすべてのESSIDを検索して一覧表示し、1つを選択してパスワードを入力します。接続に失敗すると、成功するまでパスワードを再入力するか拒否するかを尋ねられます。

Network Managerをインストールしたくない場合(または私のように)インストールできない場合は、これは非常に良いソリューションです。

おすすめ記事