Wireless autodetection

From ArchWiki

Jump to: navigation, search
Image:Tango-dialog-warning.png This article is out of date.
It concerns an older version of netcfg, and is a candidate for deletion.


You should have your network profiles up and running. You have to perform every step as root.

In general, it's always a good idea to back up your files before editing them, especially in this case as this workaround may need some modifications to get it to work on your setup.

First of all, you should rename your existing network profiles to the MAC addresses of the appropriate routers. For example:

mv /etc/network-profiles/EXISTING_PROFILE_NAME /etc/network-profiles/00:11:22:33:44:55

Do this for every profile that should be included within the auto-detection.

Therefore, I use a fallback LAN DHCP profile called lan-dhcp (see the 'netdetect' script below).

Next, you'll have to edit the network script

nano /etc/rc.d/network

Search for the following lines...

elif [ "$NET_PROFILES" ]; then
        if [ "$NET_PROFILES" = "menu" ]; then
                /usr/bin/netcfg --menu --timeout 5
        else
                for prof in ${NET_PROFILES[@]}; do
                        if [ "$prof" = "${prof#!}" ]; then
                                /usr/bin/netcfg -c $prof
                        fi
                done
        fi
fi

... and replace them with these:

elif [ "$NET_PROFILES" ]; then
       if [ "$NET_PROFILES" = "menu" ]; then
               /usr/bin/netcfg --menu --timeout 5
       elif [ "$NET_PROFILES" = "detect" ]; then
               /usr/bin/netdetect
               else
                       for prof in ${NET_PROFILES[@]}; do
                               if [ "$prof" = "${prof#!}" ]; then
                                      /usr/bin/netcfg -c $prof
                               fi
               done
       fi
fi

Save and exit.

To avoid losing this modification in future updates, tell pacman to leave this script as it is. Add this line to your general options within /etc/pacman.conf - hope this works ;) - not tested

NoUpgrade   = etc/rc.d/network

Now that the network script should do its job fine for us, we'll edit /etc/rc.conf

nano /etc/rc.conf

Go to the network-profiles section and modify it like this:

aKNOWNMACS=("00:11:22:33:44:55" "66:77:88:99:00:AA" "BB:CC:DD:EE:FF:42")
NET_PROFILES=(detect)

Replace the nice MAC addresses with the MAC addresses of the access points you trust in.

Finally, you need my small AP-detection script... you should save it as /usr/bin/netdetect and make it executable - here it comes:

#!/bin/bash
. /etc/rc.conf
aSCANNEDMACS=(`iwlist wlan0 scanning | grep Address | awk '{print $5;}'`)
for J in ${aSCANNEDMACS[*]} ; do
        for K in ${aKNOWNMACS[*]} ; do
                if [ $J == $K ]
                then
                        DETECTEDMAC=$K
                        DET_ESSID=`cat /etc/network-profiles/$K | grep ESSID= | tr -d ESSID=`
                        break
                fi
        done
        if [ $DETECTEDMAC ]
        then
                break
        fi
done
if [ $DETECTEDMAC ]
then
        netcfg -c $DETECTEDMAC
else
        echo "could not detect a known AP... falling back to LAN"
        netcfg -c lan-dhcp
fi
chmod +x /usr/bin/netdetect
Personal tools