#! /bin/bash # Originally contributed by Neuro: http://bbs.archlinux.org/viewtopic.php?pid=278148#p278148 . /usr/lib/network/network . $SUBR_DIR/rfkill . $SUBR_DIR/8021x # wifi_auto # autoconnect wireless interface # $1 - wireless interface wifi_auto() { local interface="$1" report_try "Scanning for networks" [[ -f "$IFACE_DIR/$interface" ]] && source "$IFACE_DIR/$interface" if [[ -n "$RFKILL" ]]; then set_rf_state "$interface" up || exit $? fi bring_interface up "$interface" # uses iproute methods---is it there any value to providing option to use ifconfig? networks=$(list_networks "$interface") if [[ -z "$networks" ]]; then bring_interface forcedown "$interface" exit_fail "- No networks available." fi # Loop through all the found essid's, then find a matching profile. local found_profile # JP: add ability to use AP instead of ESSID while read ap essid; do while read network; do ( unset CONNECTION INTERFACE AP ESSID load_profile "$network" case "$CONNECTION" in wireless-old|wireless|wireless-dbus) if [[ "$interface" = "$INTERFACE" ]]; then if [[ "$ap" == "$AP" ]]; then exit 2 elif [[ -z "$found_profile" ]]; then if [[ "$essid" == "$ESSID" ]]; then exit 1 fi fi fi ;; esac exit 0 ) case $? in 2) found_profile="$network" break 2 ;; 1) found_profile="$network" ;; esac done < <(list_profiles) # avoid subshell we'd get by piping list_profiles to while read done < "$networks" # avoid subshell; list_networks returns name of a tmp file rm -f "$networks" # shouldn't we delete the tmp file? if [[ -n "$found_profile" ]]; then report_success if profile_up "$found_profile"; then exit 0 else bring_interface forcedown "$interface" exit_fail "Couldn't connect profile $found_profile." fi else bring_interface forcedown "$interface" exit_fail "No profiles matched the local networks." fi } if [[ $(id -u) -ne 0 ]]; then exit_stderr "This script needs to be run with root privileges" fi if [[ -z "$1" ]]; then exit_stderr "Please supply an interface to connect" fi wifi_auto "$1" # vim: ft=sh ts=4 et sw=4: