wpa_supplicant y dhcpcd en vez de NetworkManager; fuera polkitd y rtkit

- wifi: menú de dmenu con wpa_cli (buscar, conectar y guardar redes).
- install.sh prepara wpa_supplicant.conf para wpa_cli sin root (wheel).
- polkitd ya no es un servicio: D-Bus lo arranca si algo lo pide.
- Audio en tiempo real con el grupo _pipewire en vez de rtkit.
- Clic derecho en la red: wpa_cli en una st flotante.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C5v1qWDwgkaVM5kjVHGGh8
This commit is contained in:
Alejandro Guerrero 2026-09-28 12:14:24 +02:00
parent a83294ace4
commit 9f3863ac33
Signed by: alejandrogs73
GPG key ID: 1CFF10953BEE333C
5 changed files with 134 additions and 27 deletions

73
home/.local/bin/wifi Executable file
View file

@ -0,0 +1,73 @@
#!/bin/sh
# Menú de WiFi con dmenu y wpa_cli (clic izquierdo en la red de la barra).
# Busca redes y las ordena por señal; * marca la actual. Si la elegida ya está
# guardada se conecta; si no, pide la contraseña (no se ve al escribirla) y la
# guarda en /etc/wpa_supplicant/wpa_supplicant.conf cuando la conexión va bien.
# wpa_cli funciona sin root para los de wheel (ctrl_interface_group, lo pone
# install.sh en el paso sistema).
avisar() {
notify-send -h string:x-dunst-stack-tag:wifi -i network-wireless "WiFi" "$1"
}
IF=
for w in /sys/class/net/*/wireless; do
[ -e "$w" ] && IF=${w%/wireless} && IF=${IF##*/} && break
done
[ -n "$IF" ] || { avisar "No hay tarjeta WiFi"; exit 1; }
wpa() { wpa_cli -i "$IF" "$@"; }
wpa scan >/dev/null || { avisar "wpa_supplicant no responde"; exit 1; }
sleep 3
actual=$(wpa status | sed -n 's/^ssid=//p')
# scan_results: bssid, frecuencia, señal, flags y ssid, separados por tabuladores
resultados=$(wpa scan_results | tail -n +2)
ssid=$(printf '%s\n' "$resultados" | sort -t "$(printf '\t')" -k3,3nr |
awk -F '\t' -v a="$actual" '$5 != "" && !visto[$5]++ {
print ($5 == a ? "* " : " ") $5
}' | menu -l 15 -p WiFi:)
[ -n "$ssid" ] || exit 0
ssid=${ssid#??}
id=$(wpa list_networks | awk -F '\t' -v s="$ssid" 'NR > 1 && $2 == s { print $1; exit }')
nueva=
if [ -z "$id" ]; then
nueva=1
id=$(wpa add_network | tail -1)
wpa set_network "$id" ssid "\"$ssid\"" >/dev/null
flags=$(printf '%s\n' "$resultados" | awk -F '\t' -v s="$ssid" '$5 == s { print $4; exit }')
case $flags in
*WPA* | *RSN* | *SAE*)
clave=$(menu -p "Contraseña de $ssid:" -nf "#2d353b" </dev/null)
if [ -z "$clave" ]; then
wpa remove_network "$id" >/dev/null
exit 0
fi
wpa set_network "$id" psk "\"$clave\"" >/dev/null
;;
*) wpa set_network "$id" key_mgmt NONE >/dev/null ;;
esac
fi
avisar "Conectando a $ssid..."
wpa select_network "$id" >/dev/null
i=0
while [ "$i" -lt 20 ] && ! wpa status | grep -qx wpa_state=COMPLETED; do
sleep 1
i=$((i + 1))
done
# select_network deshabilita las demás redes: se vuelven a habilitar para que
# siga cambiando sola a la que haya.
if wpa status | grep -qx wpa_state=COMPLETED; then
wpa enable_network all >/dev/null
wpa save_config >/dev/null
avisar "Conectado a $ssid"
else
[ -n "$nueva" ] && wpa remove_network "$id" >/dev/null
wpa enable_network all >/dev/null
avisar "No se pudo conectar a $ssid"
fi
pkill -USR1 -x slstatus