Files
dotfiles/scripts/blob_wifi.sh
T
2026-04-09 16:23:57 -04:00

113 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
if [ "$EUID" -ne 0 ]; then
exec sudo "$0" "$@"
fi
# ==============================================================================
# Arch Linux: NetworkManager -> iwd Migration (GMU Eduroam Edition)
# ==============================================================================
#
# PREREQUISITES:
# 1. Run as root (sudo).
# 2. Know your GMU NetID and password.
#
# WHAT THIS DOES:
# 1. Disables NetworkManager & wpa_supplicant to prevent conflicts.
# 2. Enables iwd with built-in DHCP (network configuration).
# 3. Sets up systemd-resolved for DNS.
# 4. Creates the secure eduroam profile in /var/lib/iwd/
# ==============================================================================
# Colors
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
echo -e "${GREEN}=== Switching to iwd for GMU Eduroam ===${NC}"
# 1. INSTALL IWD (If missing)
if ! command -v iwctl &> /dev/null; then
echo "iwd not found. Installing..."
pacman -S --noconfirm iwd
fi
# 2. GATHER CREDENTIALS
echo ""
echo "Enter your GMU credentials."
read -p "GMU Email (e.g., jdoe@gmu.edu): " IDENTITY
read -s -p "Password: " PASSWORD
echo ""
# 3. STOP CONFLICTING SERVICES
echo -e "\n${GREEN}[1/5] Stopping NetworkManager & wpa_supplicant...${NC}"
systemctl stop NetworkManager
systemctl disable NetworkManager
pkill wpa_supplicant
# 4. CONFIGURE IWD (Enable Built-in DHCP)
echo -e "${GREEN}[2/5] Configuring iwd main.conf...${NC}"
mkdir -p /etc/iwd
cat > /etc/iwd/main.conf <<EOF
[General]
EnableNetworkConfiguration=true
[Network]
NameResolvingService=systemd
EOF
# 5. CONFIGURE DNS (systemd-resolved)
echo -e "${GREEN}[3/5] Setting up systemd-resolved DNS...${NC}"
systemctl enable --now systemd-resolved
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
# 6. CREATE EDUROAM CONFIG
echo -e "${GREEN}[4/5] Creating eduroam provisioning file...${NC}"
cat > /var/lib/iwd/eduroam.8021x <<EOF
[Security]
EAP-Method=PEAP
EAP-Identity=$IDENTITY
EAP-PEAP-Phase2-Method=MSCHAPV2
EAP-PEAP-Phase2-Identity=$IDENTITY
EAP-PEAP-Phase2-Password=$PASSWORD
EOF
chmod 600 /var/lib/iwd/eduroam.8021x
# 7. START IWD & CONNECT
echo -e "${GREEN}[5/5] Starting iwd and connecting...${NC}"
systemctl enable --now iwd
sleep 2
IFACE=$(iwctl device list | grep station | awk '{print $2}' | head -n 1)
if [ -z "$IFACE" ]; then
echo -e "${RED}Error: No wireless interface found!${NC}"
echo "Check 'iwctl device list' manually."
exit 1
fi
echo "Detected Interface: $IFACE"
echo "Scanning..."
iwctl station "$IFACE" scan
sleep 2
echo "Connecting to eduroam..."
iwctl station "$IFACE" connect eduroam
# 8. VERIFY
sleep 5
STATUS=$(iwctl station "$IFACE" show | grep "State" | awk '{print $2}')
if [ "$STATUS" == "connected" ]; then
echo -e "\n${GREEN}SUCCESS! Connected to eduroam.${NC}"
echo "Testing connectivity (pinging google.com)..."
if ping -c 1 google.com &> /dev/null; then
echo -e "${GREEN}Internet is WORKING.${NC}"
else
echo -e "${RED}Connected to WiFi, but no Internet.${NC}"
echo "Check DNS: cat /etc/resolv.conf"
fi
else
echo -e "\n${RED}Connection failed.${NC}"
echo "Debug with: iwctl station $IFACE get-networks"
fi