Files
dotfiles-violet-chaton/INSTALL/configs/waybar/scripts/network.sh
Tetardtek 59c39260d1 fix(waybar/network): détecter l'interface active via la route par défaut
Remplace la liste codée en dur d'interfaces (enp7s0, wlp8s0…) par
'ip route get 1.1.1.1' qui retourne l'interface réellement utilisée,
portable sur n'importe quelle machine sans configuration.
2026-02-23 22:16:41 +01:00

65 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# network.sh — bande passante réseau → JSON waybar
STATE_FILE="/tmp/waybar_net_state"
# Détecter l'interface active via la route par défaut (portable sur tous les PC)
IFACE=$(ip route get 1.1.1.1 2>/dev/null \
| awk '/dev/{for(i=1;i<=NF;i++) if($i=="dev") print $(i+1)}' \
| head -1)
if [[ -n "$IFACE" ]]; then
if [[ -d "/sys/class/net/$IFACE/wireless" || -d "/sys/class/net/$IFACE/phy80211" ]]; then
TYPE="wifi"
else
TYPE="eth"
fi
fi
if [[ -z "$IFACE" ]]; then
echo '{"text":"󰤭 déco","tooltip":"Déconnecté","class":"disconnected"}'
exit 0
fi
RX_NOW=$(cat "/sys/class/net/$IFACE/statistics/rx_bytes" 2>/dev/null || echo 0)
TX_NOW=$(cat "/sys/class/net/$IFACE/statistics/tx_bytes" 2>/dev/null || echo 0)
NOW=$(date +%s%N)
if [[ -f "$STATE_FILE" ]]; then
read -r RX_PREV TX_PREV TIME_PREV < "$STATE_FILE"
ELAPSED=$(( (NOW - TIME_PREV) / 1000000 )) # ms
if (( ELAPSED > 0 )); then
DOWN_BPS=$(( (RX_NOW - RX_PREV) * 1000 / ELAPSED ))
UP_BPS=$(( (TX_NOW - TX_PREV) * 1000 / ELAPSED ))
else
DOWN_BPS=0; UP_BPS=0
fi
else
DOWN_BPS=0; UP_BPS=0
fi
echo "$RX_NOW $TX_NOW $NOW" > "$STATE_FILE"
# Formatage humain
human() {
local B=$1
if (( B >= 1073741824 )); then LC_ALL=C awk "BEGIN{printf \"%.1fG\", $B/1073741824}"
elif (( B >= 1048576 )); then LC_ALL=C awk "BEGIN{printf \"%.1fM\", $B/1048576}"
elif (( B >= 1024 )); then LC_ALL=C awk "BEGIN{printf \"%.0fK\", $B/1024}"
else echo "${B}B"
fi
}
DOWN_H=$(human $DOWN_BPS)
UP_H=$(human $UP_BPS)
RX_TOTAL=$(human $RX_NOW)
TX_TOTAL=$(human $TX_NOW)
ICON_DOWN="󰇚"; ICON_UP="󰕒"
[[ "$TYPE" == "wifi" ]] && ICON_NET="󰤨" || ICON_NET="󰈀"
TEXT="${ICON_DOWN} ${DOWN_H}/s ${ICON_UP} ${UP_H}/s"
TOOLTIP="${ICON_NET} ${IFACE}\n${ICON_DOWN} ${DOWN_H}/s ${ICON_UP} ${UP_H}/s\n\n󰇚 Total reçu : ${RX_TOTAL}\n󰕒 Total envoyé : ${TX_TOTAL}"
printf '{"text":"%s","tooltip":"%s","class":"%s"}\n' "$TEXT" "$TOOLTIP" "$TYPE"