[arch-projects] [netctl][PATCH 2/2] wifi-menu: handle interface's rfkill switch

Ivan Shapovalov intelfx100 at gmail.com
Sat Sep 21 11:37:23 EDT 2013


Temporarily enable the interface's rfkill (if specified) before issuing a scan
and restore its state afterwards.

---
 src/wifi-menu | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/wifi-menu b/src/wifi-menu
index a62881e..9f0fbea 100755
--- a/src/wifi-menu
+++ b/src/wifi-menu
@@ -2,6 +2,7 @@
 
 . /usr/lib/network/globals
 . "$SUBR_DIR/wpa"
+. "$SUBR_DIR/rfkill"
 
 
 usage()
@@ -208,10 +209,25 @@ if [[ ! -d "/sys/class/net/$INTERFACE" ]]; then
     exit_error "No such interface: $INTERFACE"
 fi
 
+if [[ -x "$PROFILE_DIR/interfaces/$INTERFACE" ]]; then
+    source "$PROFILE_DIR/interfaces/$INTERFACE"
+fi
+
+if [[ $RFKill ]] && ! rf_is_enabled "$INTERFACE" "$RFKill"; then
+    enable_rf "$INTERFACE" "$RFKill" || exit_error "Cannot enable rfkill"
+    RFKILL_WAS_ENABLED=1
+fi
+
 echo -n "Scanning for networks... "
 CONNECTION=$(wpa_call "$INTERFACE" status 2> /dev/null | sed -n "s/^ssid=//p")
 NETWORKS=$(wpa_supplicant_scan "$INTERFACE" 3,4,5)
-if [[ $? -eq 0 ]]; then
+SCAN_RESULT=$?
+
+if (( RFKILL_WAS_ENABLED )); then
+    disable_rf "$INTERFACE" "$RFKill"
+fi
+
+if [[ $SCAN_RESULT -eq 0 ]]; then
     trap 'rm -f "$NETWORKS"' EXIT
     echo "done"
     init_profiles "$INTERFACE"
@@ -256,6 +272,7 @@ case $RETURN in
         RETURN=7
         ;;
 esac
+
 exit $RETURN
 
 
-- 
1.8.4



More information about the arch-projects mailing list