3

Так что я просто настроил conky на своем арочном блоке для мониторинга различной статистики на рабочем столе, и у меня небольшая проблема. Соответствующий текст в моем конки конфиге:

down $alignr ${downspeedf enp9s0} kb/s - ${totaldown enp9s0}
up $alignr ${upspeedf enp9s0} kb/s - ${totalup enp9s0}

где enp9s0 - мое гигабитное проводное соединение. Я заметил, что conky всегда показывает нули, хотя для скоростей вверх / вниз и итогов только для этого интерфейса. У меня есть еще две строки в конфигурации, которые делают то же самое для моего беспроводного интерфейса (wlp7s0), и он работает нормально.

скриншот обоих интерфейсов

Чтобы увидеть, что происходит, я проверил вывод ifconfig и он показывает нули для всего:

enp9s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.21  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::7a45:c4ff:feb7:4471  prefixlen 64  scopeid 0x20<link>
        ether -----------------  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 17 

Но он показывает статистику как обычно для моего беспроводного интерфейса:

wlp7s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.20  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::86a6:c8ff:feaf:85c5  prefixlen 64  scopeid 0x20<link>
        ether ----------------  txqueuelen 1000  (Ethernet)
        RX packets 649  bytes 207876 (203.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 119  bytes 56765 (55.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Соответствующие строки lsmod :

alx                    27461  0 
mdio                    3525  1 alx

Соответствующий lspci -vv:

09:00.0 Ethernet controller: Qualcomm Atheros AR8161 Gigabit Ethernet (rev 10)
    Subsystem: Dell Device 057e
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0, Cache Line Size: 64 bytes
    Interrupt: pin A routed to IRQ 49
    Region 0: Memory at f7800000 (64-bit, non-prefetchable) [size=256K]
    Region 2: I/O ports at d000 [size=128]
    Capabilities: <access denied>
    Kernel driver in use: alx
    Kernel modules: alx

Кто-нибудь знает, что происходит? Это не серьезная проблема - доступ в интернет работает просто отлично - кажется, он не измеряет статистику, как это делает мой беспроводной интерфейс.

РЕДАКТИРОВАТЬ: Я отключил беспроводной интерфейс, чтобы убедиться, что он использует не только беспроводную проводную связь (я не совсем разбираюсь в том, как linux управляет несколькими сетевыми интерфейсами), и он по-прежнему не показывает статистику при использовании проводного интерфейса. исключительно, хотя у меня все еще был доступ в интернет.

1 ответ1

0

Я не смог найти способ исправить ifconfig, но я использовал nstat и некоторые умные вычисления на awk в моем conky-скрипте, чтобы добиться того же. Таким образом, вместо того, чтобы использовать «$ {downspeed eth0}/s» для получения скорости загрузки для eth0, вы можете использовать следующую однострочную строку:

${execi 1 /sbin/nstat | grep -i IpExtInOctets | awk '{if($2>1024*1024){mb=$2/1024/1024;printf "%.2F MB", mb} else if($2>1024){kb=$2/1024;printf "%.2F KB", kb} else {printf "%d B", $2}}' }/s

Вы должны использовать execi с интервалом в 1 секунду. nstat показывает разницу в байтах от предыдущего запуска. Если вы хотите запустить его с интервалами более 1 секунды, вы можете разделить результат в awk на это количество секунд, чтобы получить среднее значение.

Для загрузки используйте строку IpExtOutOctets из nstat. Вы можете адаптировать это к вашим потребностям. Пожалуйста, помните, что он будет отображать весь входящий и исходящий трафик, а не только для определенного интерфейса. Но я предполагаю, что у вас есть только один сетевой интерфейс, у меня есть только один на моем настольном ПК. Для нескольких интерфейсов может потребоваться другое решение.

ОБНОВЛЕНИЕ: однако, будьте осторожны, запустив команду один раз для входящих, затем для исходящих сразу после того, как первый покажет вам ноль для исходящих. Может быть, некоторые "спящие" команды тут и там исправят это.

ОБНОВЛЕНИЕ 2: вот как я решил проблему отображения и загрузки и выгрузки spedd в двух разных командах и все еще примерно правильно. Необходима адаптация к графикам и диаграммам, но только для текста вы можете попробовать это:

${goto 630}${font sansation:size=10,weight:bold}${color5} \
${texeci 2 /sbin/nstat | grep -i IpExtInOctets | awk '{if($2>1024*1024){mb=$2/1024/1024;printf "%.2F MB", mb} else if($2>1024){kb=$2/1024;printf "%.2F KB", kb} else {printf "%d B", $2}}' }/s \
${alignr 1}${color6} \
${texeci 2 sleep 1 && /sbin/nstat | grep -i IpExtOutOctets | awk '{if($2>1024*1024){mb=$2/1024/1024;printf "%.2F MB", mb} else if($2>1024){kb=$2/1024;printf "%.2F KB", kb} else {printf "%d B", $2}}' }/s

ОБНОВЛЕНИЕ: Или вы можете взять оба значения одновременно и отформатировать их с помощью awk для вывода.

U/D: ${execi 1 /sbin/nstat | grep -A1 -i IpExtInOctets | awk '{if($2>1024*1024){mb=$2/1024/1024;printf "%.2F MB/s ", mb} else if($2>1024){kb=$2/1024;printf "%.2F KB/s ", kb} else {printf "%d  B/s ", $2}}'}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .