Problema en red i3blocks.conf

Buenas noches, me he dado cuenta que en mi panel de red de i3wm no registra correctamente el tráfico de red (siempre marca 0). He revisado el fichero de configuración i3blocks.conf y veo que ejecuta el script bandwidth2 pero ya me pierdo con el código y según creo entender recupera los datos a mostrar de la ruta /proc/net/dev .

¿ Alguien me puede decir si le sucede lo mismo…?
¿ Alguien sabe el motivo y como solucionarlo…?
Actualmente mi sistema está virtualizado con VirtualBox.

Gracias

¿Podría publicar la configuración de i3blocks?

@aldebaran
¿Estableció la ‘INTERFACE’ correcta en la configuración de i3blocks?

Ponga esto en el módulo de ancho de banda en la configuración de i3blocks

INTERFACE=wlan0

Cambie “wlan0” a la interfaz que usa.
Puede conocer el nombre de la interfaz ejecutando este comando.

ifconfig

Este es el trozo de mi fichero i3blocks.conf

[bandwidth]
command=~/.config/i3/scripts/bandwidth2
color=#e07221
interval=persist

el código del script es el siguiente:

#!/usr/bin/env bash
#
# Copyright (C) 2015 James Murphy
# Licensed under the terms of the GNU GPL v2 only.
#
# i3blocks blocklet script to monitor bandwidth usage

iface="${BLOCK_INSTANCE}"
iface="${IFACE:-$iface}"
dt="${DT:-3}"
unit="${UNIT:-Mb}"
LABEL="${LABEL:-<span font='FontAwesome'> </span>}" # down arrow up arrow
printf_command="${PRINTF_COMMAND:-"printf \"${LABEL}%-5.1f/%5.1f %s/s\\n\", rx, wx, unit;"}"

function default_interface {
    ip route | awk '/^default via/ {print $5; exit}'
}

function check_proc_net_dev {
    if [ ! -f "/proc/net/dev" ]; then
        echo "/proc/net/dev not found"
        exit 1
    fi
}

function list_interfaces {
    check_proc_net_dev
    echo "Interfaces in /proc/net/dev:"
    grep -o "^[^:]\\+:" /proc/net/dev | tr -d " :"
}

while getopts i:t:u:p:lh opt; do
    case "$opt" in
        i) iface="$OPTARG" ;;
        t) dt="$OPTARG" ;;
        u) unit="$OPTARG" ;;
        p) printf_command="$OPTARG" ;;
        l) list_interfaces && exit 0 ;;
        h) printf \
"Usage: bandwidth3 [-i interface] [-t time] [-u unit] [-p printf_command] [-l] [-h]
Options:
-i\tNetwork interface to measure. Default determined using \`ip route\`.
-t\tTime interval in seconds between measurements. Default: 3
-u\tUnits to measure bytes in. Default: Mb
\tAllowed units: Kb, KB, Mb, MB, Gb, GB, Tb, TB
\tUnits may have optional it/its/yte/ytes on the end, e.g. Mbits, KByte
-p\tAwk command to be called after a measurement is made. 
\tDefault: printf \"<span font='FontAwesome'>  </span>%%-5.1f/%%5.1f %%s/s\\\\n\", rx, wx, unit;
\tExposed variables: rx, wx, tx, unit, iface
-l\tList available interfaces in /proc/net/dev
-h\tShow this help text
" && exit 0;;
    esac
done

check_proc_net_dev

iface="${iface:-$(default_interface)}"
while [ -z "$iface" ]; do
    echo No default interface
    sleep "$dt"
    iface=$(default_interface)
done

case "$unit" in
    Kb|Kbit|Kbits)   bytes_per_unit=$((1024 / 8));;
    KB|KByte|KBytes) bytes_per_unit=$((1024));;
    Mb|Mbit|Mbits)   bytes_per_unit=$((1024 * 1024 / 8));;
    MB|MByte|MBytes) bytes_per_unit=$((1024 * 1024));;
    Gb|Gbit|Gbits)   bytes_per_unit=$((1024 * 1024 * 1024 / 8));;
    GB|GByte|GBytes) bytes_per_unit=$((1024 * 1024 * 1024));;
    Tb|Tbit|Tbits)   bytes_per_unit=$((1024 * 1024 * 1024 * 1024 / 8));;
    TB|TByte|TBytes) bytes_per_unit=$((1024 * 1024 * 1024 * 1024));;
    *) echo Bad unit "$unit" && exit 1;;
esac

scalar=$((bytes_per_unit * dt))
init_line=$(cat /proc/net/dev | grep "^[ ]*$iface:")
if [ -z "$init_line" ]; then
    echo Interface not found in /proc/net/dev: "$iface"
    exit 1
fi

init_received=$(awk '{print $2}' <<< $init_line)
init_sent=$(awk '{print $10}' <<< $init_line)

(while true; do cat /proc/net/dev; sleep "$dt"; done) |\
    stdbuf -oL grep "^[ ]*$iface:" |\
    awk -v scalar="$scalar" -v unit="$unit" -v iface="$iface" '
BEGIN{old_received='"$init_received"';old_sent='"$init_sent"'}
{
    received=$2
    sent=$10
    rx=(received-old_received)/scalar;
    wx=(sent-old_sent)/scalar;
    tx=rx+wr;
    old_received=received;
    old_sent=sent;
    if(rx >= 0 && wx >= 0){
        '"$printf_command"';
        fflush(stdout);
    }
}
'

Sugiero usar la versión bash original de ‘bandwidth’

  1. Descarga el guion
cd ~/.config/i3/scripts
wget https://raw.githubusercontent.com/vivien/i3blocks-contrib/master/bandwidth/bandwidth
  1. Agregue el módulo de ancho de banda a la configuración de i3blocks.
[bandwidth]
command=~/.config/i3/scripts/bandwidth
interval=5
#INTERFACE=wlan0
#INLABEL=IN 
#OUTLABEL=OUT 
#TREAT_UNKNOWN_AS_UP=0

Cambie el valor de INTERFACE a su interfaz. Mi interfaz wifi es “wlan0”. Puede conocer el nombre de la interfaz con el comando ifconfig.

1 Like

muchas gracias, ahora si me funciona.

1 Like