Conky, un ligero monitor de sistemas

INSTRODUCCIÓN

¿Qué es Conky

Conky es un monitor de sistema de software libre para el sistema X Window, es altamente configurable y capaz de controlar muchas variables del sistema, incluyendo el estado de la CPU, la memoria, el espacio de intercambio, el almacenamiento en disco, las temperaturas, los procesos, las interfaces de red, carga de la batería, mensajes del sistema, las bandejas de entrada de correo electrónico, actualizaciones de Arch Linux, muchos reproductores de música populares (MPD, XMMS2, BMPx, audaz, etc), actualizaciones del clima, noticias, y mucho más.
A diferencia de los monitores del sistema de los widgets para rendir su información, Conky se dibuja directamente en una ventana de X. Esto permite un consumo menor de recursos del sistema a los plasmoides.
Aclaración: Conky no es independiente de librerías tantos GTK como Qt.




INSTALACIÓN

Sólo hay que instalar el paquete «conky-std».

sudo apt-get install conky-std



CONFIGURACIÓN

La configuración es creando el archivo ~/.conkyrc.



Ajustes del formato

Alineación, aquí se utiliza la opción alignment con la combinación de dos letras, la primera es la alineación vertical (t arriba o b abajo) y la alineación vertical (l izquierda y r derecha).

alignment tr

Las opciones gap_x y gap_y es para correr Conky.

gap_x 5
gap_y 0

La opción default_bar_size es para dar por defecto el tamaño de las barras (ancho y alto).

default_bar_size 150 6

Las opción own_window en yes es para decirle a Conky que funcione como si fuese un ventana (con decoración y aparezca en lo que KDE denomina "gestor de trabajo"). Pero, como queremos que funcione como widget (o plasmoide), usaremos la opción own_window_hints con los siguientes valores: undecorated (sin decoración), below (debajo de las ventanas), sticky (que esté en todos los escritorios), skip_taskbar (que no aparezca del gestor de tareas) y skip_pager (que no aparezca de los paginadores).

own_window yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

Para lograr la transparencia lo primero que hay que hacer es poner en yes la opción own_window_argb_visual.

own_window_argb_visual yes

Luego hay dos formas, la primera es agregar la opción own_window_transparent en yes

own_window_transparent yes

La segunda es ponerle un valor a gusto entre 0 (totalmente transparente) y 255 (totalmente opaco) a own_window_argb_value.

own_window_argb_value 191

Equivaldría a un 75% de la opacidad.


Estas opciones son elementales para que Conky funcione bien.

double_buffer yes
update_interval 1.0

Estas opciones son para las opciones predeterminadas de los formatos de tipografías.

use_xft yes
xftfont Monoscape:size=7
xftalpha 1.0
override_utf8_locale yes
draw_outline no
draw_shades no

Estas opciones es para darle el color predeterminado a las tipografías.

default_color 999
default_outline_color 444
default_shade_color 000

color0 FFF
color1 CCC
color2 9CD
color3 AFC

Las opciones default_outline_color y default_shade_color funcionan si draw_outline y draw_shades están en yes.



Contenido

Para empezar a crear nuestro Conky, en el mismo archivo, en una nueva linea escribimos TEXT. Los que escribamos debajo de la linea TEXT será parte del contenido de nuestro Conky.
A las variables de Conky se les antepone el signo pesos «$» y, si es una variable con atributos, se utilizan las llaves «{» y «}».
Por ejemplo: $variable o ${variable atributo}
Yo suelo hacer Conky a través de bloques y, a cada unas de ellas, le asigno un nombre (Sistemas, Núcleos, Batería, Memorias, Temperaturas, Redes, Procesos, Música, Repositorios) con color (color0), el nombre de la variable con otro color (color1) y el valor de la variable a la derecha sin color. Si utilizo barras gráficas o graficos, lo hago con el color que le asigno a los nombres de las variables. También desarrollo tablas en las utilizo la variable ${goto X}.
Un ejemplo sería:

Bloque1
Variable1			Valor1
Variable2			Valor2
Variable3			Valor3

Como las barras tienen un tamaño fijo, las puse en una misma posición X: ${goto 60)
Aclaro: Para que Conky entre en pantalla completamente, en cada linea en blanco, puse: ${voffset 7}\.


Bloque Sistema
${voffset -5}\
${color0}Sistema $hr$color
${color1}Kernel:${color}${alignr}$kernel
#{execi 200 uname -r | awk 'BEGIN{FS="-"}END{print $1"-"$2}'}
${color1}Encendido:${color}${alignr}$uptime
${color1}Frecuencia$color$alignr$freq_g GHz
${color1}Escritorio:$color$alignr$desktop de $desktop_number

Bloque Núcleos
${color0}Núcleos $hr$color
${color1}CPU 0${goto 62}${cpubar cpu0}$color$alignr${cpu cpu0}%
${color1}CPU 1${goto 62}${cpubar cpu1}$color$alignr${cpu cpu1}%
${color1}CPU 2${goto 62}${cpubar cpu2}$color$alignr${cpu cpu2}%
${color1}CPU 3${goto 62}${cpubar cpu3}$color$alignr${cpu cpu3}%

Bloque Batería

${color0}Batería$font $hr$color
${if_existing /sys/class/power_supply/BAT1/uevent}#
${color1}Carga${goto 62}${battery_bar BAT1}$color$alignr${battery_percent BAT1}%
${if_empty ${battery_time BAT1}}#
${alignc}Carga completa
$else#
${color1}Queda:$color $alignr${battery_time BAT1}
$endif#
$else#
${alignc}La batería está desconectada
${alignc}o es una PC de escritorio
$endif#

¡¡¡ATENCIÓN!!!
Para configurar la batería tiene que estar conectada y, seguramente, tenga otro "nombre". Para averiguarlo, hay que fijarse en el directorio: /sys/class/power_supply/

ls -1 /sys/class/power_supply/

Bloques Memorias
${color0}Memorias $hr$color
${color2}Volátil
${color1}RAM${goto 62}${membar}$color$alignr$memperc%
${color1}Swap${goto 62}${swapbar}$color$alignr$swapperc%
${color3}Almacenamiento
${color1}/${goto 62}${fs_bar /}$color$alignr${fs_used_perc /}%
${color1}/home${goto 62}${fs_bar /home}$color$alignr${fs_used_perc /home}%
$color1${goto 63}Usado${goto 145}Libre${alignr}Total
${color2}RAM${goto 60}$mem${goto 140}$memfree$alignr$memmax
${color2}Swap${goto 60}$swap${goto 140}$swapfree$alignr$swapmax
${color3}/${goto 60}${fs_used /}${goto 140}${fs_free /}$alignr${fs_size /}
${color3}/home${goto 60}${fs_used /home}${goto 140}${fs_free /home}$alignr${fs_size /home}

En este bloque utilizo otros dos nuevos colores ($color2 y $color3) para diferenciar la volatil (RAM y Swap) de la de almacenamiento (discos).


Bloque Temperatura

${color0}Temperatura $hr$color
${color1}Sensor${goto 62}${entropy_bar ${hwmon temp 2}}$color${alignr}${hwmon temp 2}º C

Bloque Redes

${color0}Redes $hr$color
${if_existing /proc/net/route eth0}#
${color1}IP$alignr$color ${addr eth0}
${color1}Conexión$color${alignr}Ethernet
${color1}Señal$color${alignr}OK
${color1}↓$color ${downspeed eth0}${alignr} ${upspeed eth0} ${color1}↑
$color1${downspeedgraph eth0 20,120} ${alignr}${upspeedgraph eth0 20,120}$color
${color1}↓$color ${totaldown eth0}${alignr}${totalup eth0} ${color1}↑#
$else#
${if_existing /proc/net/route usb0}#
${color1}IP$alignr$color ${addr usb0}
${color1}Conexión$color${alignr}USB
${color1}Señal${goto 62}${wireless_link_bar usb0}$color$alignr${offset 7}${wireless_link_qual_perc usb0}${offset -7}%
${color1}↓$color ${downspeed usb0}${alignr} ${upspeed usb0} ${color1}↑
$color1${downspeedgraph usb0 20,120} ${alignr}${upspeedgraph usb0 20,120}$color
${color1}↓$color ${totaldown usb0}${alignr}${totalup usb0} ${color1}↑#
$else#
${if_existing /proc/net/route wlan0}#
${color1}IP$alignr$color ${addr wlan0}
${color1}Essid${color}$alignr${wireless_essid wlan0}
${color1}Señal${goto 62}${wireless_link_bar wlan0}$color$alignr${offset 7}${wireless_link_qual_perc wlan0}${offset -7}%
${color1}↓$color ${downspeed wlan0}${alignr} ${upspeed wlan0} ${color1}↑
$color1${downspeedgraph wlan0 20,120 000000 FFFF00 -l} ${alignr}${upspeedgraph wlan0 20,120 FFFF00 000000 -l}$color
${color1}↓$color ${totaldown wlan0}${alignr}${totalup wlan0} ${color1}↑#
$else
${voffset 10}
${alignc}${font PizzaDude Bullets:size=16}4${font} Sin conexión...
${voffset 17}
$endif#
$endif#
$endif

Aclaración: Este bloque está configurado para las interfaces eth0, usb0 y wlan0, desconozco si en el caso que se le coloque una antena Wi-Fi, reconozca el porcentaje de la señal.


Bloque Procesos

${color0}Procesos $hr$color
$color1${goto 120}CPU ${offset 20}MEM ${alignr}PID$color
$color0${top name 1} ${goto 110}${top cpu 1}*${goto 160}${top mem 1}${alignr}${top pid 1}$color
${top name 2} ${goto 110}${top cpu 2}*${goto 160}${top mem 2}${alignr}${top pid 2}
${top name 3} ${goto 110}${top cpu 3}*${goto 160}${top mem 3}${alignr}${top pid 3}
$color0${top_mem name 1} ${goto 110}${top_mem cpu 1}${goto 160}${top_mem mem 1}*${alignr}${top_mem pid 1}$color
${top_mem name 2} ${goto 110}${top_mem cpu 2}${goto 160}${top_mem mem 2}*${alignr}${top_mem pid 2}
${top_mem name 3} ${goto 110}${top_mem cpu 3}${goto 160}${top_mem mem 3}*${alignr}${top_mem pid 3}

Bloque Música
Este bloque funciona con «Music Player Daemon», pero se puede hacer que funcione con otras aplicaciones de audio.

${color0}Música$color $hr$color
$if_mpd_playing#
$alignc${scroll 20 $mpd_title}
${goto 30}$mpd_elapsed$alignc$color1${goto 62}$mpd_bar$color$alignr$mpd_length$font 
${color1}Artísta:$color $alignr$mpd_artist
${color1}Disco:$color $alignr${scroll 40 $mpd_album}#
$else#
$alignc${color1}Music Player Daemon$color
${alignc}No se está reproduciendo
${alignc}Ejecutar desde consola el comando:
$alignc${color0}ncmpcpp#
$endif
${goto 5}${color1}Repeat$color [$mpd_repeat]${alignc}$alignr[$mpd_random] ${color1}Shuffle$color
$if_mpd_playing#
${voffset -14}$alignc[$mpd_status]
$endif#
\
${color1}Izquierdo${goto 62}${execbar amixer get Master | grep Left | awk -F'[]%[]' '/%/ {if ($7 == "off") {print "0" } else {print $2}}'}${alignr}${exec amixer get Master | grep Left | awk -F'[]%[]' '/%/ {if ($7 == "off") {print "0" } else {print $2}}'}%
${color1}Derecho${goto 62}${execbar amixer get Master | grep Right | awk -F'[]%[]' '/%/ {if ($7 == "off") {print "0" } else {print $2}}'}${alignr}${exec amixer get Master | grep Right | awk -F'[]%[]' '/%/ {if ($7 == "off") {print "0" } else {print $2}}'}%

¡¡¡ ATENCIÓN !!!
Las dos últimas lineas son en reemplazo de la variable $mixerbar y $mixer, porque Canonical en los últimas versiones de Ubuntu eliminó el módulo snd-mixer-osd del kernel.


Bloque Repositorios
${color0}Repositorios $hr$color
$font${color1}Actualizaciones:$color$alignr${execi 60 aptitude search ~U | wc -l}

¡¡¡ ATENCIÓN !!!
Para este bloque se necesita tener instalado el paquete «aptitude».

sudo apt-get install aptitude



IMÁGENES

Haz click sobre Conky para ver cómo queda en el escritorio.




ENLACES RECOMENDADOS

Manual de configuraciones de Conky (en inglés).
Listado de variables de Conky (en inglés).