Conky: Debian GNU/Linux

11 minuto(s) de lectura

Debian

Conky es un monitor de sistema liviano y gratuito diseñado inicialmente para entornos gráficos X.

Se distribuye bajo licencia GPL 3.0, su configuración se basa en un fichero de texto plano, donde le indicaremos los parámetros que queremos monitorear y controlar para que sean mostrados en el escritorio.

Conky no solo tiene muchos complementos incorporados, sino que también puede mostrar casi cualquier información mediante el uso de scripts y otros programas externos.

Dicho de otra forma, de un simple vistazo poder conocer el estado del Servidor y actuar en consecuencia.

Para ampliar información recomiendo:

En esta entrada voy a compartir la configuración que he estado usando en Mate y posteriormente adaptando en el servidor, dejo unas capturas de pantalla:

DualCore Celeron HexaCore QuadCore

Instalación GNU/Linux 64bits

Previo paso de instalación Conky, comentar que debemos de tener instalado y configurado LM-SENSORS

Dicho esto, entramos en materia según sistema.

Dependencias: Debian 10 Buster

Comenzamos actualizando repositorios del sistema e instalando dependencias:

sudo apt-get update && \
sudo apt-get -y install compton conky-all

Realizado este paso podemos pasar al apartado común de configuración.

Dependencias: Debian 11 Bullseye

Comenzamos actualizando repositorios del sistema e instalando dependencias:

sudo apt-get update && \
sudo apt-get -y install picom conky-all

Realizado este paso podemos pasar al apartado común de configuración.

Configuración: Debian GNU/Linux

Creamos en caso de no disponer de ello de la carpeta donde alojaremos la fuente gráfica que usa el perfil y la carpeta de autoarranque del script:

mkdir -p $HOME/.local/share/fonts && \
mkdir -p $HOME/.config/autostart

Bajamos la fuente y la alojamos en la carpeta de nuestro usuario:

curl -o $HOME/.local/share/fonts/ConkySymbols.ttf \
https://lordpedal.github.io/lordpedal/ConkySymbols.ttf

Creamos el lanzador de autoarranque para que Conky se ejecute al arrancar el entorno X:

cat << EOF | tee $HOME/.config/autostart/conky.desktop
[Desktop Entry]
Type=Application
Exec=conky -p 5
Hidden=false
X-MATE-Autostart-enabled=true
Name[es_ES]=Conky
Name=Conky
Comment[es_ES]=Conky
Comment=Conky
EOF

Descargamos el fichero de configuración:

curl -o $HOME/.conkyrc \
https://lordpedal.github.io/lordpedal/conkyrc

A continuación veremos como adaptarlo paso a paso.

Configuración: Conky

Para evitar errores de configuración partimos del fichero $HOME/.conkyrc que hemos obtenido.

La configuración se basa en un procesador QuadCore + Sistema RAID + Red Bridge aunque vamos a revisar de adaptarla por ejemplo a sistemas DualCore o HexaCore.

Abrimos el editor de texto y vamos configurando según secciones.

nano $HOME/.conkyrc

En la estructura del fichero veremos dos secciones diferenciadas:

  • conky.config = { ... }: Apartado donde ajustamos tamaño, ubicación, resolución, colores … de los datos a mostrar

  • conky.text = { ... }: Apartado donde ajustamos las variables a mostrar

Conky: Resolución

Una forma sencilla de adaptarlo según resolución del sistema es ajustar la siguiente variable:

    font = 'Roboto Mono:size=8',

Que no es otra opción que la fuente usada del sistema y su tamaño

Roboto Mono:size=6 Roboto Mono:size=9 Roboto Mono:size=8

Conky: GNU/Linux

De un simple vistazo aporta gran información de administración del servidor como pueda ser:

  • Actividad: Tiempo que lleva Online
  • Promedios: Carga del sistema en 1min, 5min y 15min
  • Total Procesos: Procesos activos

A priori esta sección es universal independientemente de configuración sistema.

Contenido representado en la siguiente sección:

${color2}${font ConkySymbols:size=16}s${font} ${voffset -10} GNU/Linux${color}
${color1}${goto 35}OS: ${color}${execi 86400 cat `ls -atr /etc/*-release | tail -2` | grep "PRETTY_NAME" | cut -d= -f2 |  sed 's/"//g'}
${color1}${goto 35}Kernel: ${color}$kernel on $machine
${color1}${goto 35}Usuario: ${color}${exec whoami}
${color1}${goto 35}Fecha: ${color}${time %a,%d %B}
${color1}${goto 35}Hora: ${color}${time %k:%M:%S}
${color1}${goto 35}Actividad: ${color}$uptime
${color1}${goto 35}Promedios: ${color}$loadavg
${color1}${goto 35}Total Procesos: ${color}$processes

Conky: Sistema

Aquí obtenemos información de la carga y velocidad de cada uno de los cores del Sistema.

Contenido representado en la siguiente sección:

${color2}${font ConkySymbols:size=16}f${font} ${voffset -10} Sistema${color}
${color1}${goto 35}Core 0 : ${color}${freq_g 0}GHz ${alignr}${cpu cpu0}% ${cpubar cpu0 4,100}
${color1}${goto 35}Core 1 : ${color}${freq_g 1}GHz ${alignr}${cpu cpu1}% ${cpubar cpu1 4,100}
${color1}${goto 35}Core 2 : ${color}${freq_g 2}GHz ${alignr}${cpu cpu2}% ${cpubar cpu2 4,100}
${color1}${goto 35}Core 3 : ${color}${freq_g 3}GHz ${alignr}${cpu cpu3}% ${cpubar cpu3 4,100}
${color1}${goto 35}Core 4 : ${color}${freq_g 4}GHz ${alignr}${cpu cpu4}% ${cpubar cpu4 4,100}
${color1}${goto 35}Core 5 : ${color}${freq_g 5}GHz ${alignr}${cpu cpu5}% ${cpubar cpu5 4,100}
${color1}${goto 35}Core 6 : ${color}${freq_g 6}GHz ${alignr}${cpu cpu6}% ${cpubar cpu6 4,100}
${color1}${goto 35}Core 7 : ${color}${freq_g 7}GHz ${alignr}${cpu cpu7}% ${cpubar cpu7 4,100}

Este apartado si debemos de configurarlo según nuestro sistema.

DualCore Celeron

Lo primero es conocer como se identifica cada core:

sensors | grep Core | cut -c1-7

En el miniPC obtengo el siguiente valor:

lordpedal@miniPC:~$ sensors | grep Core | cut -c1-7
Core 0:
Core 2:

Por lo tanto para evitar errores dejaría el apartado de la siguiente forma:

${color2}${font ConkySymbols:size=16}f${font} ${voffset -10} Sistema${color}
${color1}${goto 35}Core 0 : ${color}${freq_g 0}GHz ${alignr}${cpu cpu0}% ${cpubar cpu0 4,100}
#${color1}${goto 35}Core 1 : ${color}${freq_g 1}GHz ${alignr}${cpu cpu1}% ${cpubar cpu1 4,100}
${color1}${goto 35}Core 2 : ${color}${freq_g 2}GHz ${alignr}${cpu cpu2}% ${cpubar cpu2 4,100}
#${color1}${goto 35}Core 3 : ${color}${freq_g 3}GHz ${alignr}${cpu cpu3}% ${cpubar cpu3 4,100}
#${color1}${goto 35}Core 4 : ${color}${freq_g 4}GHz ${alignr}${cpu cpu4}% ${cpubar cpu4 4,100}
#${color1}${goto 35}Core 5 : ${color}${freq_g 5}GHz ${alignr}${cpu cpu5}% ${cpubar cpu5 4,100}
#${color1}${goto 35}Core 6 : ${color}${freq_g 6}GHz ${alignr}${cpu cpu6}% ${cpubar cpu6 4,100}
#${color1}${goto 35}Core 7 : ${color}${freq_g 7}GHz ${alignr}${cpu cpu7}% ${cpubar cpu7 4,100}

Quedando comentados los cores que se emplean.

QuadCore

No necesaria modificación, ya configurado para leer la configuración de los 4 cores físicos y los 4 virtuales.

HexaCore

Lo primero es conocer como se identifica cada core:

sensors | grep Core | cut -c1-7

En el PC obtengo el siguiente valor:

lordpedal@miniOverclock:~$ sensors | grep Core | cut -c1-7
Core 0:
Core 1:
Core 2:
Core 3:
Core 4:
Core 5:

En este caso debo de agregar los cores que faltan, 6 cores físicos y 6 virtuales, dejando el apartado de la siguiente forma:

${color2}${font ConkySymbols:size=16}f${font} ${voffset -10} Sistema${color}
${color1}${goto 35}Core 0 : ${color}${freq_g 0}GHz ${alignr}${cpu cpu0}% ${cpubar cpu0 4,100}
${color1}${goto 35}Core 1 : ${color}${freq_g 1}GHz ${alignr}${cpu cpu1}% ${cpubar cpu1 4,100}
${color1}${goto 35}Core 2 : ${color}${freq_g 2}GHz ${alignr}${cpu cpu2}% ${cpubar cpu2 4,100}
${color1}${goto 35}Core 3 : ${color}${freq_g 3}GHz ${alignr}${cpu cpu3}% ${cpubar cpu3 4,100}
${color1}${goto 35}Core 4 : ${color}${freq_g 4}GHz ${alignr}${cpu cpu4}% ${cpubar cpu4 4,100}
${color1}${goto 35}Core 5 : ${color}${freq_g 5}GHz ${alignr}${cpu cpu5}% ${cpubar cpu5 4,100}
${color1}${goto 35}Core 6 : ${color}${freq_g 6}GHz ${alignr}${cpu cpu6}% ${cpubar cpu6 4,100}
${color1}${goto 35}Core 7 : ${color}${freq_g 7}GHz ${alignr}${cpu cpu7}% ${cpubar cpu7 4,100}
${color1}${goto 35}Core 8 : ${color}${freq_g 8}GHz ${alignr}${cpu cpu8}% ${cpubar cpu8 4,100}
${color1}${goto 35}Core 9 : ${color}${freq_g 9}GHz ${alignr}${cpu cpu9}% ${cpubar cpu9 4,100}
${color1}${goto 35}Core 10 : ${color}${freq_g 10}GHz ${alignr}${cpu cpu10}% ${cpubar cpu10 4,100}
${color1}${goto 35}Core 11 : ${color}${freq_g 11}GHz ${alignr}${cpu cpu11}% ${cpubar cpu11 4,100}

Conky: Temperaturas

Aquí obtenemos información de la carga y velocidad de cada uno de los cores del Sistema.

Contenido representado en la siguiente sección:

${color2}${font ConkySymbols:size=16}h${font} ${voffset -10} Temperaturas${color}
${color1}${goto 35}Core 0 : ${color}${execi 3 sensors | grep 'Core 0' | cut -c16-25} ${color1}TSH : ${color}${execi 3 sensors | grep 'Core 0' | cut -c34-41} ${color1}TSHH : ${color}${execi 3 sensors | grep 'Core 0' | cut -c51-59}
${color1}${goto 35}Core 1 : ${color}${execi 3 sensors | grep 'Core 1' | cut -c16-25} ${color1}TSH : ${color}${execi 3 sensors | grep 'Core 1' | cut -c34-41} ${color1}TSHH : ${color}${execi 3 sensors | grep 'Core 1' | cut -c51-59}
${color1}${goto 35}Core 2 : ${color}${execi 3 sensors | grep 'Core 2' | cut -c16-25} ${color1}TSH : ${color}${execi 3 sensors | grep 'Core 2' | cut -c34-41} ${color1}TSHH : ${color}${execi 3 sensors | grep 'Core 2' | cut -c51-59}
${color1}${goto 35}Core 3 : ${color}${execi 3 sensors | grep 'Core 3' | cut -c16-25} ${color1}TSH : ${color}${execi 3 sensors | grep 'Core 3' | cut -c34-41} ${color1}TSHH : ${color}${execi 3 sensors | grep 'Core 3' | cut -c51-59}
${color1}${goto 35}Core 4 : ${color}Virtual
${color1}${goto 35}Core 5 : ${color}Virtual
${color1}${goto 35}Core 6 : ${color}Virtual
${color1}${goto 35}Core 7 : ${color}Virtual

Este apartado si debemos de configurarlo según nuestro sistema.

DualCore Celeron

Lo primero es conocer como se identifica cada core:

sensors | grep Core

En el miniPC obtengo el siguiente valor:

lordpedal@miniOverclock:~$ sensors | grep Core
Core 0:        +40.0°C  (high = +105.0°C, crit = +105.0°C)
Core 2:        +38.0°C  (high = +105.0°C, crit = +105.0°C)

En esta caso debería de dejar el apartado de la siguiente forma:

${color2}${font ConkySymbols:size=16}h${font} ${voffset -10} Temperaturas${color}
${color1}${goto 35}Core 0:${color}${execi 3 sensors | grep 'Core 0' | cut -c16-25} ${color1}TSH:${color}${execi 3 sensors | grep 'Core 0' | cut -c34-42} ${color1}TSHH:${color}${execi 3 sensors | grep 'Core 0' | cut -c51-60}
${color1}${goto 35}Core 1: ${color}Virtual
${color1}${goto 35}Core 2:${color}${execi 3 sensors | grep 'Core 2' | cut -c16-25} ${color1}TSH:${color}${execi 3 sensors | grep 'Core 2' | cut -c34-42} ${color1}TSHH:${color}${execi 3 sensors | grep 'Core 2' | cut -c51-60}
${color1}${goto 35}Core 3: ${color}Virtual

QuadCore

No necesaria modificación, ya configurado para leer la configuración de los 4 cores físicos.

HexaCore

Lo primero es conocer como se identifica cada core:

sensors | grep Core

En el PC obtengo el siguiente valor:

lordpedal@miniOverclock:~$ sensors | grep Core
Core 0:        +28.0°C  (high = +69.0°C, crit = +79.0°C)
Core 1:        +28.0°C  (high = +69.0°C, crit = +79.0°C)
Core 2:        +29.0°C  (high = +69.0°C, crit = +79.0°C)
Core 3:        +21.0°C  (high = +69.0°C, crit = +79.0°C)
Core 4:        +26.0°C  (high = +69.0°C, crit = +79.0°C)
Core 5:        +22.0°C  (high = +69.0°C, crit = +79.0°C)

En este caso debo de agregar los cores que faltan, 6 cores físicos y 6 virtuales, dejando el apartado de la siguiente forma:

${color2}${font ConkySymbols:size=16}h${font} ${voffset -10} Temperaturas${color}
${color1}${goto 35}Core 0 : ${color}${execi 3 sensors | grep 'Core 0' | cut -c16-25} ${color1}TSH : ${color}${execi 3 sensors | grep 'Core 0' | cut -c34-41} ${color1}TSHH : ${color}${execi 3 sensors | grep 'Core 0' | cut -c51-58}
${color1}${goto 35}Core 1 : ${color}${execi 3 sensors | grep 'Core 1' | cut -c16-25} ${color1}TSH : ${color}${execi 3 sensors | grep 'Core 1' | cut -c34-41} ${color1}TSHH : ${color}${execi 3 sensors | grep 'Core 0' | cut -c51-58}
${color1}${goto 35}Core 2 : ${color}${execi 3 sensors | grep 'Core 2' | cut -c16-25} ${color1}TSH : ${color}${execi 3 sensors | grep 'Core 2' | cut -c34-41} ${color1}TSHH : ${color}${execi 3 sensors | grep 'Core 0' | cut -c51-58}
${color1}${goto 35}Core 3 : ${color}${execi 3 sensors | grep 'Core 3' | cut -c16-25} ${color1}TSH : ${color}${execi 3 sensors | grep 'Core 3' | cut -c34-41} ${color1}TSHH : ${color}${execi 3 sensors | grep 'Core 0' | cut -c51-58}
${color1}${goto 35}Core 4 : ${color}${execi 3 sensors | grep 'Core 3' | cut -c16-25} ${color1}TSH : ${color}${execi 3 sensors | grep 'Core 3' | cut -c34-41} ${color1}TSHH : ${color}${execi 3 sensors | grep 'Core 0' | cut -c51-58}
${color1}${goto 35}Core 5 : ${color}${execi 3 sensors | grep 'Core 3' | cut -c16-25} ${color1}TSH : ${color}${execi 3 sensors | grep 'Core 3' | cut -c34-41} ${color1}TSHH : ${color}${execi 3 sensors | grep 'Core 0' | cut -c51-58}
${color1}${goto 35}Core 6 : ${color}Virtual
${color1}${goto 35}Core 7 : ${color}Virtual
${color1}${goto 35}Core 8 : ${color}Virtual
${color1}${goto 35}Core 9 : ${color}Virtual
${color1}${goto 35}Core 10 : ${color}Virtual
${color1}${goto 35}Core 11 : ${color}Virtual

Conky: Almacenamiento

Aquí obtenemos información del espacio consumido/libre de las unidades de almacenamiento montadas en el Sistema.

Contenido representado en la siguiente sección:

${color2}${font ConkySymbols:size=16}k${font} ${voffset -10} Almacenamiento${color}
${color1}${goto 35}SSD${color} $alignr ${fs_used /} / ${fs_size /}
${goto 35}${fs_bar /}
${color1}${goto 35}RAID${color} $alignr ${fs_used /media/raidnas} / ${fs_size /media/raidnas} 
${goto 35}${fs_bar /media/raidnas}

Este apartado si debemos de configurarlo según nuestro sistema, dependiendo de unidades montadas o particionado sistema.

SSD + HD USB Externo

Voy a plantear una situación alternativa en la que por ejemplo en vez de tener montado una sistema RAID en /media tenemos un HD USB denominado Toshiba.

Primeramente identificamos las unidades de almacenamiento:

df -h

Obtendriamos algo similar a esto:

lordpedal@miniPC:~$ df -h
S.ficheros     Tamaño Usados  Disp Uso% Montado en
udev             1,9G      0  1,9G   0% /dev
tmpfs            380M    46M  334M  13% /run
/dev/sda2         55G    11G   41G  22% /
tmpfs            1,9G      0  1,9G   0% /dev/shm
tmpfs            5,0M   4,0K  5,0M   1% /run/lock
tmpfs            1,9G      0  1,9G   0% /sys/fs/cgroup
tmpfs            1,9G   4,0K  1,9G   1% /tmp
/dev/sda1        511M   3,3M  508M   1% /boot/efi
/dev/sdb1        2,0T   1,0T  1,0T  50% /media/Toshiba

En ese caso deberiamos dejar la sección de Almacenamiento de la siguiente forma:

${color2}${font ConkySymbols:size=16}k${font} ${voffset -10} Almacenamiento${color}
${color1}${goto 35}SSD${color} $alignr ${fs_used /} / ${fs_size /}
${goto 35}${fs_bar /}
${color1}${goto 35}HD USB${color} $alignr ${fs_used /media/Toshiba} / ${fs_size /media/Toshiba} 
${goto 35}${fs_bar /media/Toshiba}

Conky: Memoria

Aquí obtenemos información del consumo de la memoria RAM y SWAP en el Sistema.

Contenido representado en la siguiente sección:

${color2}${font ConkySymbols:size=16}J${font} ${voffset -10} Memoria${color}
${color1}${goto 35}RAM${color} $alignr $mem / $memmax
${goto 35}${membar}
${color1}${goto 35}SWAP${color} $alignr $swap / $swapmax
${goto 35}$swapbar

A priori esta sección es universal independientemente de configuración sistema.

Conky: Procesos

Aquí obtenemos un Top 5 de consumos de recursos tanto a nivel de CPU como de RAM en el Sistema.

Contenido representado en la siguiente sección:

${color2}${font ConkySymbols:size=16}n${font} ${voffset -10} Procesos${color}
${color1}${goto 35}Top consumo CPU${color}
${goto 35}${top name 1}$alignr${top cpu 1}%
${goto 35}${top name 2}$alignr${top cpu 2}%
${goto 35}${top name 3}$alignr${top cpu 3}%
${goto 35}${top name 4}$alignr${top cpu 4}%
${goto 35}${top name 5}$alignr${top cpu 5}%
${color1}${goto 35}Top consumo RAM${color}
${goto 35}${top_mem name 1}$alignr${top_mem mem 1}%
${goto 35}${top_mem name 2}$alignr${top_mem mem 2}%
${goto 35}${top_mem name 3}$alignr${top_mem mem 3}%
${goto 35}${top_mem name 4}$alignr${top_mem mem 4}%
${goto 35}${top_mem name 5}$alignr${top_mem mem 5}%

A priori esta sección es universal independientemente de configuración sistema.

Conky: Red

Aquí obtenemos información de la carga y velocidad de Red.

Contenido representado en la siguiente sección:

${color2}${font ConkySymbols:size=16}i${font} ${voffset -10} Red${color}
${color1}${goto 35}IP Red: ${color}${addr br0}
${color1}${goto 35}Subida: ${color}${totalup br0}  ${color1}Velocidad: ${color}${upspeed br0}/s
${goto 35}${upspeedgraph br0 30,250 0000ff ff0000}
${color1}${goto 35}Bajada: ${color}${totaldown br0}  ${color1}Velocidad: ${color}${downspeed br0}/s
${goto 35}${downspeedgraph br0 30,250 01df01 10fd10}

Este apartado si debemos de configurarlo según nuestro sistema, si no estamos usando una red Bridge.

bond0

Voy a plantear una situación alternativa en la que por ejemplo en vez de usar una red Bridge usamos una red Bond.

Primeramente identificamos las conexiones de red:

ip -br addr show | grep UP

Obtendriamos algo similar a esto:

lordpedal@miniOverclock:~$ ip -br addr show | grep UP
enp5s0f0         UP
enp5s0f1         UP             
bond0            UP             

En ese caso deberiamos dejar la sección de Red de la siguiente forma:

${color2}${font ConkySymbols:size=16}i${font} ${voffset -10} Red${color}
${color1}${goto 35}IP Red: ${color}${addr bond0}
${color1}${goto 35}Subida: ${color}${totalup bond0}  ${color1}Velocidad: ${color}${upspeed bond0}/s
${goto 35}${upspeedgraph bond0 30,250 0000ff ff0000}
${color1}${goto 35}Bajada: ${color}${totaldown bond0}  ${color1}Velocidad: ${color}${downspeed bond0}/s
${goto 35}${downspeedgraph bond0 30,250 01df01 10fd10}

Notas

Al finalizar guardaremos los cambios, saldremos del editor y reiniciamos el entorno X.

sudo reboot

Para finalizar dejo un video para ver Conky de forma dinámica en un obsoleto Macbook Pro 2010 para Apple

Ser libres de modificar el script a vuestro sistema.

Y listo!