122 lines
3.2 KiB
Bash
Executable File
122 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
notify() {
|
|
notify-send " Netzwerk" "$1"
|
|
}
|
|
|
|
require_nmcli() {
|
|
if ! command -v nmcli >/dev/null 2>&1; then
|
|
notify "nmcli ist nicht installiert."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
wofi_pick() {
|
|
wofi --dmenu --prompt "$1" --insensitive
|
|
}
|
|
|
|
wifi_status() {
|
|
nmcli -t -f WIFI general | head -n 1
|
|
}
|
|
|
|
active_connection() {
|
|
nmcli -t -f NAME,TYPE connection show --active | awk -F: '$2 ~ /wireless|ethernet/ {print $1; exit}'
|
|
}
|
|
|
|
connect_wifi() {
|
|
nmcli radio wifi on
|
|
nmcli device wifi rescan >/dev/null 2>&1 || true
|
|
|
|
local selection ssid security password
|
|
selection="$(
|
|
nmcli -t -f IN-USE,SSID,SECURITY,SIGNAL device wifi list |
|
|
awk -F: '
|
|
$2 != "" {
|
|
icon = $1 == "*" ? "" : ""
|
|
lock = $3 == "" ? "offen" : "gesichert"
|
|
printf "%s %s [%s, %s%%]\n", icon, $2, lock, $4
|
|
}
|
|
' |
|
|
wofi_pick " WLAN verbinden"
|
|
)"
|
|
|
|
[ -n "$selection" ] || exit 0
|
|
ssid="$(printf '%s\n' "$selection" | sed -E 's/^[^ ]+ //; s/ \[.*$//')"
|
|
security="$(nmcli -t -f SSID,SECURITY device wifi list | awk -F: -v ssid="$ssid" '$1 == ssid {print $2; exit}')"
|
|
|
|
if [ -n "$security" ]; then
|
|
password="$(printf '' | wofi --dmenu --password --prompt " Passwort fuer $ssid")"
|
|
[ -n "$password" ] || exit 0
|
|
nmcli device wifi connect "$ssid" password "$password" && notify "Verbunden mit $ssid."
|
|
else
|
|
nmcli device wifi connect "$ssid" && notify "Verbunden mit $ssid."
|
|
fi
|
|
}
|
|
|
|
saved_connections() {
|
|
local selection name
|
|
selection="$(
|
|
nmcli -t -f NAME,TYPE connection show |
|
|
awk -F: '$2 ~ /wireless|ethernet/ {printf " %s\n", $1}' |
|
|
wofi_pick " Gespeicherte Verbindungen"
|
|
)"
|
|
|
|
[ -n "$selection" ] || exit 0
|
|
name="${selection#* }"
|
|
nmcli connection up "$name" && notify "Verbindung $name gestartet."
|
|
}
|
|
|
|
disconnect_network() {
|
|
local conn
|
|
conn="$(active_connection)"
|
|
|
|
if [ -z "$conn" ]; then
|
|
notify "Keine aktive Netzwerkverbindung gefunden."
|
|
exit 0
|
|
fi
|
|
|
|
nmcli connection down "$conn" && notify "Verbindung $conn getrennt."
|
|
}
|
|
|
|
require_nmcli
|
|
|
|
current="$(active_connection)"
|
|
[ -n "$current" ] || current="Nicht verbunden"
|
|
|
|
choice="$(
|
|
printf '%s\n' \
|
|
" WLAN verbinden" \
|
|
" WLAN ein/aus" \
|
|
" Gespeicherte Verbindungen" \
|
|
" Aktive Verbindung trennen" \
|
|
" Netzwerk neu scannen" \
|
|
" Status: $current" |
|
|
wofi_pick " Netzwerk"
|
|
)"
|
|
|
|
case "$choice" in
|
|
*"WLAN verbinden"*)
|
|
connect_wifi
|
|
;;
|
|
*"WLAN ein/aus"*)
|
|
if [ "$(wifi_status)" = "enabled" ]; then
|
|
nmcli radio wifi off && notify "WLAN ausgeschaltet."
|
|
else
|
|
nmcli radio wifi on && notify "WLAN eingeschaltet."
|
|
fi
|
|
;;
|
|
*"Gespeicherte Verbindungen"*)
|
|
saved_connections
|
|
;;
|
|
*"Aktive Verbindung trennen"*)
|
|
disconnect_network
|
|
;;
|
|
*"Netzwerk neu scannen"*)
|
|
nmcli device wifi rescan && notify "WLAN-Scan gestartet."
|
|
;;
|
|
*"Status:"*)
|
|
nmcli general status | wofi --dmenu --prompt " Netzwerkstatus"
|
|
;;
|
|
esac
|