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.
65 lines
2.0 KiB
Bash
Executable File
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"
|