Le miniguide di UbaWeb

Conky: Come personalizzare Conky

Premessa Torna su

30 settembre 2014- GNU/Linux Ubuntu trusty 14.04.1 LTS , kernel: 3.13.0-36-generic, Bash: 4.3.11(1) -
Qualche mese fa provai l'ultima live di knoppix (per me la migliore live esistente); notai che sul desktop apparivano dinamicamente varie impostazioni di sistema, mi piacque molto ma non approfondii.
Un paio di settimane fa mi è capitato di leggere una pagina che parlava di Conky, l'ho installato e ho cominciato a smanettarci.
Quelli che seguono sono i miei appunti su come risolvere i problemi di blinking e di come usare: sfondi variabili interne e script esterni a conky.
Non parlerò dettagliatamente dell'installazione visto che, per Ubuntu, basta eseguire sudo apt-get install conky conky-all.
Per chi vuol provare configurazioni multiple, consiglio caldamente di installare anche conky-manager (sudo apt-get install conky-manager) che salva le varie configurazioni in directory distinte, all'interno della directory nascosta $HOME/.conky/, (invece di usare $HOME/.conkyrc come fa di default Conky) e permette di: attivare la configurazione voluta con un clic, vedere e creare le anteprime, modificare direttamente i file di configurazione, far partire Conky all'avvio e molto altro.
Per poter scaricare con conky dati da internet occorre Curl, per rilevare le temperature occorrono anche Sensors e Hddtemp quindi eseguire sudo apt-get install curl lm-sensors hddtemp
Una volta letta questa guida e con l'aiuto della pagina man di Conchy, si dovrebbe essere in grado di personalizzare Conky come si vuole, aiutandosi per i casi più complessi, con script Bash.

11 gennaio 2015 - Ho fatto uno script per visualizzare più Feed RSS utilizzando sempre lo stesso script. Vedere questa pagina.

Problema blinking Torna su

All'inizio non sapevo dell'esistenza di conky-manager quindi ho cominciato a modificare il mio $HOME/.conkyrc.
Come prima cosa, volevo che i bordi e lo sfondo della finestra di conky non fossero visibili in modo da integrarsi perfettamente con lo sfondo del desktop.
Mi sono letto man conky e in breve ho ottenuto (quasi) il risultato voluto, eccetto che per il lampeggiamento della finestra ad ogni aggiornamento dei dati, fenomeno detto blinking, molto fastidioso.
Non mi metto ad elencare tutte le prove fatte ma indico solo come risolvere il problema.
In pratica, per ottenere una finestra trasparente senza bordi, utilizzare le seguenti impostazioni:

background no draw_shades no double_buffer yes own_window yes own_window_transparent yes own_window_argb_visual yes own_window_type normal own_window_class conky-semi own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

Naturalmente si possono fare le prove che si vogliono, ad ogni salvataggio del file di configurazione, Conky riparte con le nuove impostazioni!
In caso di problemi si può interromperne l'esecuzione con: killall conky e farlo ripartire con : conky.

Impostazioni Torna su

Non starò a indicare tutte le opzioni disponibili, per questo basta leggere la sezione "CONFIGURATION SETTINGS" del manuale : man conky (oppure vedere questa pagina), ma spiegherò solo quelle più importanti, in base all'azione da compiere.
Per le prove si può usare il file di configurazione fornito con Conky e presente come file nascosto .conkyrc all'interno della propria home utente (o in $HOME/.config/conky/) , se non ci fosse, crearne uno facendo la copia del file /etc/conky/conky.conf.

Posizionamento della finestra di Conky sul desktop

Esistono posizioni già preconfigurate da impostare nella variabile alignment che sono: top_left, top_right, top_middle, bottom_left, bottom_right, bottom_middle, middle_left, middle_middle, middle_right o none che possono essere inserite abbreviate usando le prime lettere dell'impostazione voluta: tl, tr, tm, bl, br, bm, ml, mm, mr.
Per esempio, se si vuole conky in alto a destra si può inserire alignment top_right oppure alignment tr

Posizionamento "fine" della finestra di Conky sul desktop
Se si vuole posizionare la finestra in punto preciso del desktop, dopo aver usato l'impostazione precedente, si può aggiustarne la posizione spostando la finestra orizzontalmente e/o verticalmente dei pixel voluti, usando rispettivamente gap_x e gap_x.
Per esempio, per spostare la finestra 50 pixel a destra e 100 pixel in basso si usa

gap_x 50 gap_y 100
(si possono usare anche valori negativi).

Impostare l'intervallo di aggiornamento della finestra
Per impostare ogni quanti secondi o frazioni di secondo si deve aggiornare la finestra impostare update_interval
per esempio: update_interval 4.0 aggiorna ogni quattro secondi, update_interval 0.5 aggiorna ogni mezzo secondo.

Dimensioni della finestra
Per impostare le dimensioni della finestra basta inserire i valori in pixel per larghezza e altezza in maximum_width larghezza e/o minimum_size larghezza altezza;
per esempio:
maximum_width 300 imposta la larghezza massima della finestra a 300 pixel
minimum_size 300 500 imposta la larghezza minima della finestra a 300 pixel e l'altezza minima a 500 pixel.

Colore del testo e dei bordi
Per impostare un colore predefinito per testo e bordi si imposta default_color, inserendo il colore in formato esadecimale con formato #RRGGBB (Red, Green, Blue) oppure inserendo il nome del colore in inglese (red, grey, lightgrey etc.); è la stessa notazione che si usa in (X)HTML/CSS;
per esempio, per il rosso: default_color RED oppure default_color #FF0000.
Si possono impostare anche altre opzioni-colore personalizzate da richiamarsi direttamente con il nome assegnato nella parte superiore a "TEXT";
per esempio:
... default_color 060606 color0 ffffff color1 0077ff color2 ff0000 ...

Font
Per impostare un font predefinito si imposta use_xft yes e poi in xftfont il nome del font e la misura in pixel;
per esempio: xftfont Arial:size=8

Istruzioni (sotto "TEXT")Torna su

Istruzioni sotto la parola "TEXT"
Ciò che viene stampato nella finestra di Conky dipende da quanto scritto nel file di configurazione al disotto della stringa "TEXT".
Ogni riga rappresenta una o più istruzioni e stampa una riga in output, se si vogliono scrivere una o più istruzioni su più righe si può fare l'escape del carattere di fine-riga usando "\", in modo da far "credere" a Conky che si sia scritto tutto su una singola riga.

Formattazione del testo
La formattazione del testo, può essere cambiata dove si vuole per il testo che segue l'istruzione.
Impostando le caratteristiche in ${font OPZIONI} il colore utilizzando ${color OPZIONI}; per tornare al font predefinito basta inserire ${font}; per tornare al colore predefinito basta inserire ${color}.
Per esempio: ${font Arial:bold:size=10}${color white}questo testo sarà in Arial, carattere di 10 pixel, in grassetto e di colore bianco ${font}${color} questo testo avrà font e colore predefiniti!.
Oltre che al testo le istruzioni di colore e misura si possono applicare anche a $hr che stampa una barra orizzontale.

Allineamento e spostamento
L'allineamento di un oggetto è sempre relativo alla sua posizione, generalmente (eccetto che per le immagini di sfondo), rispetto all'oggetto che lo precede.
Esistono allineamenti predefiniti relativi non quantificati: come ${alignc} e ${alignr}, rispettivamente per allineare al centro e allineare a destra (l'allineamento a sinistra è predefinito).
Oltre agli allineamenti, gli oggetti possono essere spostati in orizzontale e/o in verticale di quantità precise di pixel; per farlo basta usare ${offset N_PIXEL} dove N_PIXEL è il valore di spostamento in pixel orizzontale, può essere anche negativo. Per lo spostamento in verticale, si può usare allo stesso modo, ${voffset N_PIXEL}oggetto.
Per spostare un oggetto in orizzontale di N_PIXEL si può usare anche ${goto N_PIXEL}oggetto.

Immagini di sfondo
Le immagini di sfondo a differenza degli altri oggetti, sono sempre posizionate nell'angolo in alto a sinistra della finestra di conky, fortunatamente queste immagini possono essere riposizionate con precisione e anche scalate come si vuole, (per le opzioni di caching vedere la pagina man).
Il codice per inserire, posizionare e scalare un'immagine è:
${image /PERCORSO/AL/FILE/IMG -p x,y -s LARGHEZZAxALTEZZA}
dove:
/PERCORSO/AL/FILE/IMG è il percorso assoluto (o relativo rispetto al file di configurazione) all'immagine
-p x,y: -p sta per posizione, x sta per spostamento in pixel in orizzontale e y sta per spostamento in pixel in verticale
-s LARGHEZZAxALTEZZA: -s sta per scale LARGHEZZA la larghezza voluta in pixel ALTEZZA altezza voluta in pixel. Naturalmente se non si indicano -p e -s l'immagine sarà posizionata nell'angolo in alto a sinistra nelle sue dimensioni originali.

Altre regole, oggetti e variabili le spiegherò illustrando il mio attuale file di configurazione di Conky.

Conky in praticaTorna su

Spiegazione passo-passo del mio .conkyrc
Il mio Conky, ottenuto modificando il file "miui" presente trai file di esempio di conky-manager
Come appare il mio conky
Il relativo file di configurazione:

## Imp Base update_interval 2 total_run_times 0 net_avg_samples 1 cpu_avg_samples 1 alignment tr gap_x 0 gap_y 40 minimum_size 150 0 ## Finestra own_window yes own_window_type override own_window_transparent yes own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager background no double_buffer yes no_buffers yes imlib_cache_size 0 use_spacer right use_xft yes draw_shades no draw_graph_borders no own_window_colour 000000 own_window_transparent yes own_window_argb_visual yes # fa sparire il bordo finestra sfumato own_window_argb_value 0 ## Testo draw_outline no draw_borders no xftfont AvantGarde LT Medium:size=40 override_utf8_locale yes text_buffer_size 2048 #xftalpha 0.7 uppercase no # bordi stippled_borders 0 border_margin 0 border_width 0 default_bar_size 60 8 default_color 060606 default_shade_color 1d1d1d color0 ffffff color1 0077ff color2 ffffff TEXT ${voffset 11} ${goto 28}${time %H} ${goto 110}${time %M} ${image ./b.png -p 0,0 -s 188x100} ${voffset -172} ${goto 224}${font AvantGarde LT Medium:size=10}${time %A} ${font} ${font AvantGarde LT Medium:size=38}${voffset -60}${goto 230}${time %d} ${font AvantGarde LT Medium:size=28}${voffset -3}${offset 64}${time %B} ${offset 175}${voffset -12}${time %Y} ${image ./c.png -p 206,0 -s 93x100} ${image ./b.png -p 0,95 -s 300x100} ${voffset -140} ${if_up ppp0}${execpi 1200 ./estrazione_meteo.sh }${endif} $color0${font arial black:size=9}$sysname $kernel $machine $color0${font arial black:size=9}Uptime: $uptime IP pub.: ${execi 60 /sbin/ifconfig | grep -Pzo "(?s)(ppp0).*?\K([0-9]+\.){3}[0-9]+"} $color0 CPU: ${cpu cpu0}% ${cpugraph cpu0 303030 C0C0C0} $color0${font arial black:size=10}Temp.°C: Cpu: ${hwmon temp 1 } - ${hwmon temp 2 }${alignr}Disco: ${hddtemp /dev/sda} ${font arial black:size=9}USO-root:${goto 110}${fs_used /}/${fs_size /}${alignr}${fs_bar 8 /} ${font arial black:size=9}USO-home:${goto 110}${fs_used /home}/${fs_size /home}${alignr}${fs_bar 8 /home} ${font arial black:size=9}USO-dos:${goto 110}${fs_used /dos}/${fs_size /dos}${alignr}${fs_bar 8 /dos} ${font arial black:size=9}USO-swap:${goto 110}$swap/$swapmax${alignr}${swapbar 8} ${font arial black:size=10}${color1}RAM: ${color0}$memperc% ${alignr}$mem/$memmax ${font arial black:size=9}Top: ${font Bitstream Vera Sans Mono:size=10}${color1}Processo PID CPU% MEM% ${font Bitstream Vera Sans Mono:size=10}$color0${top name 1}${tab 10,0}${top pid 1} ${top cpu 1} ${top mem 1} ${top name 2}${tab 10,0}${top pid 2} ${top cpu 2} ${top mem 2} ${top name 3}${tab 10,0}${top pid 3} ${top cpu 3} ${top mem 3} ${if_mounted /media/giovanni/1T_WD_ELEMENTS}1T_WD_EL.:${goto 110}${fs_used /media/giovanni/1T_WD_ELEMENTS}/${fs_size /media/giovanni/1T_WD_ELEMENTS}${alignr}${fs_bar 8 /media/giovanni/1T_WD_ELEMENTS} $endif ${if_mounted /media/giovanni/1T_SEAGATE}1T_SEAGATE.:${goto 110}${fs_used /media/giovanni/1T_SEAGATE}/${fs_size /media/giovanni/1T_SEAGATE}${alignr}${fs_bar 8 /media/giovanni/1T_SEAGATE} $endif ${if_mounted /media/giovanni/BACK_TOT}BACK_TOT:${goto 110}${fs_used /media/giovanni/BACK_TOT}/${fs_size /media/giovanni/BACK_TOT}${alignr}${fs_bar 8 /media/giovanni/BACK_TOT} $endif

Non parlerò delle impostazioni di base, non c'è niente di particolare; inizio a spiegare la prima riga del codice eseguito da Conky:
${voffset 11} ${goto 28}${time %H} ${goto 110}${time %M}
Sposto in basso di 11 pixel e a destra di 28px l'ora ${time %H} e a destra di 110px i minuti ${time %M}
per i formati data/ora vedere FORMAT in man date.

${image ./b.png -p 0,0 -s 188x100}
Inserisco l'immagine b.png senza spostarla scalandola alle dimensioni 188px per 100px

${voffset -172} ${goto 224}${font AvantGarde LT Medium:size=10}${time %A} ${font}
Sposto in alto di 172px e a destra di 224px, impostando font e misura, il giorno della settimana ${time %A} e ristabilisco il font predefinito

${font AvantGarde LT Medium:size=38}${voffset -60}${goto 230}${time %d}
Imposto font e misura spostando in alto di 60px e a destra di 230 il giorno del mese

${font AvantGarde LT Medium:size=28}${voffset -3}${offset 64}${time %B}
Imposto font e misura spostando in alto di 3px e a destra di 64 il mese

${offset 175}${voffset -12}${time %Y}
Sposto a destra di 175px e in alto di 12px l'anno

${image ./c.png -p 206,0 -s 93x100}
Posiziono l'immagine ./c.png a destra di 206px e la scalo a 90px per 100px

${image ./b.png -p 0,95 -s 300x100}
Posiziono e scalo l'immagine ./b.png

${voffset -140}
Spostamento in alto di 140px

${if_up ppp0}${execpi 1200 ./estrazione_meteo.sh }${endif}
Eseguo il mio script per la cattura e la stampa dei dati meteo, lo spiego dopo!
Da notare l'espressione condizionale: se l'interfaccia di connessione ppp0 è "up" (sono connesso) viene eseguito lo scipt ./estrazione_meteo.sh ogni 1200 secondi (20 minuti).
Ci sono varie espressioni condizionali disponibili e sono sempre nella forma:
${if_tipo_di_condizione parametri} codice_da_eseguire_se_la_condizione_è_vera ${endif}
È permesso anche l'uso di ${else} per eseguire istruzioni alternative.

$color0${font arial black:size=9}$sysname $kernel $
Imposto il testo per mostrare le variabili di conky $sysname (Linux) e $kernel (3.13.0-36-...)

$color0${font arial black:size=9}Uptime: $
Imposto colore, e font per la variabile di Conky $Uptime (da quanto tempo è avviato il sistema operativo)

IP priv.: ${execi 60 /sbin/ifconfig | grep -Pzo "(?s)(ppp0).*?\K([0-9]+\.){3}[0-9]+"}
Scrivo "IP priv.:" e con $execi 600 eseguo ogni 600 secondi il comando
/sbin/ifconfig | grep -Pzo "(?s)(ppp0).*?\K([0-9]+\.){3}[0-9]+"
al posto di ppp0 inserire la propria interfaccia di connessione, questo va bene per me che mi connetto con chiavetta 3G. questo comando serve ad estrarre il nostro IP privato cioè l'indirizzo di rete locale.
C'è da dire che:
C'è da dire anche che è obbligatorio usare la forma con il "pipe" "|"; avevo fatto una versione che lo evitava, funziona bene da terminale ma non con Conky, forse perché faceva uso del simbolo "<"??

$color0 CPU: ${cpu cpu0}% ${cpugraph cpu0 303030 C0C0C0}
Imposto il colore bianco (solo come dimostrazione dell'uso dei colori personalizzati) per mostrare la percentuale di CPU attiva seguita dal grafico d'uso
Io ho messo un solo controllo sulla cpu ma si può fare il controllo su ogni core con ${cpu ...} usando ${cpu cpu0}, ${cpu cpu1}, ${cpu cpu2}, ...
per quanto riguarda il grafico ${cpugraph ...} vale lo stesso discorso, ma in questo caso si possono indicare i colori della sfumatura; in questo caso da grigio scuro (303030) a sinistra al grigio chiaro (C0C0C0) a destra. Le dimensioni sono quelle date al testo che lo precede.

$color0${font arial black:size=10}Temp.°C: Cpu: ${hwmon temp 1 } - ${hwmon temp 2 }${alignr}Disco: ${hddtemp /dev/sda}
Imposto colore e font e scrivo intestazioni e dati sulle temperature recuperate da lm-sensors e da hddtemp
C'è da dire che:
lm-sensors e hddtemp devono essere avviati, quindi conviene farli partire automaticamente all'avvio del sistema.
In base ai sensori presenti sulla macchina possono esserci vari formati di output da lm-sensors.
In caso di problemi vedere questa pagina dove ho aiutato un utente ad estrarre alcuni dati dall'output di lm-sensor.
Per le schede grafiche Nvidia esistono molte istruzioni predefinite di Conky, vedere man conky.

${font arial black:size=9}USO-root:${goto 110}${fs_used /}/${fs_size /}${alignr}${fs_bar 8 /}
Imposto il font e mostro: i Gb usati e totali della partizione root; l'allineamento è ottenuto con $goto e $alignr
C'è da dire che:
il formato per la stampa di questi dati è semplice: ${ISTRUZIONE PARTIZIONE}, nel caso della barra ${fs_bar 8 /} il numero indica lo spessore.
Esistono molte altre possibilità testuali e grafiche per mostrare: quantità di spazio libero, quantità di spazio utilizzato, quantità di spazio totale, spazio libero in percentuale, spazio occupato in percentuale, le stesse opzioni sono disponibili in più forme grafiche, fare riferimento alla pagina man di Conky, questa è una miniguida non un'enciclopedia 8-)

${font arial black:size=9}USO-home:${goto 110}${fs_used /home}/${fs_size /home}${alignr}${fs_bar 8 /home}
Come sopra ma riferito alla partizione /home

${font arial black:size=9}USO-dos:${goto 110}${fs_used /dos}/${fs_size /dos}${alignr}${fs_bar 8 /dos}
Come sopra ma riferito alla partizione /dos

${font arial black:size=9}USO-swap:${goto 110}$swap/$swapmax${alignr}${swapbar 8}
Per la partizione di swap non si usa il percorso perché ci sono già alcune variabili definite da Conky: $swap, $swapmax, $swapbar e altre

${font arial black:size=10}${color1}RAM: ${color0}$memperc% ${alignr}$mem/$memmax
Per le informazioni sulla ram ci sono molte variabili già definite in Conky, ho usato solo $memperc, $meme $memmax.

${font arial black:size=9}Top:
Imposto l'intestazione Top per indicare che quello che si vede sotto è l'output del comando top.

${font Bitstream Vera Sans Mono:size=10}${color1}Processo PID CPU% MEM%
Imposto l'intestazione delle colonne di Top

${font Bitstream Vera Sans Mono:size=10}$color0${top name 1}${tab 10,0}${top pid 1} ${top cpu 1} ${top mem 1}
Per stampare l'output di top ci sono moltissime possibilità di scelta delle colonne, vedere la pagina man, in questa riga si può notare che l'allineamento delle colonne l'ho fatto un po ad occhio con gli spazi e un po con $tab che fa le veci del tabulatore.
la riga si costruisce con ${top NOME_COLONNA_VOLUTA NUMERO_RIGA}, naturalmente si possono inserire tutte le le righe che vogliamo.

${top name 2}${tab 10,0}${top pid 2} ${top cpu 2} ${top mem 2}
Come sopra ma si indica la seconda riga

${top name 3}${tab 10,0}${top pid 3} ${top cpu 3} ${top mem 3}
Come sopra ma si indica la terza riga

${if_mounted /media/giovanni/1T_WD_ELEMENTS}1T_WD_EL.:${goto 110}${fs_used /media/giovanni/1T_WD_ELEMENTS}/${fs_size /media/giovanni/1T_WD_ELEMENTS}${alignr}${fs_bar 8 /media/giovanni/1T_WD_ELEMENTS} $endif
Questa riga stampa le informazioni sulla partizione solo se il disco /media/giovanni/1T_WD_ELEMENTS è montato ($if_mounted), il funzionamento è identico a quello per mostrare le informazioni sulle partizioni "fisse", in pratica si deve inserire invece del percorso, il punto di mount;
l'unica differenza è che qui si fa uso di $if_mounted, visto che ci si riferisce ad uno specifico disco removibile, che può essere montato oppure no.
Ricordarsi di inserire $endif a fine istruzione condizionale.

${if_mounted /media/giovanni/1T_SEAGATE}1T_SEAGATE.:${goto 110}${fs_used /media/giovanni/1T_SEAGATE}/${fs_size /media/giovanni/1T_SEAGATE}${alignr}${fs_bar 8 /media/giovanni/1T_SEAGATE} $endif
Come sopra per un altro disco removibile.

${if_mounted /media/giovanni/BACK_TOT}BACK_TOT:${goto 110}${fs_used /media/giovanni/BACK_TOT}/${fs_size /media/giovanni/BACK_TOT}${alignr}${fs_bar 8 /media/giovanni/BACK_TOT} $endif
Come sopra per un altro disco removibile.

Per ora è tutto! Per quanto riguarda lo script per il meteo devo vedere la licenza per l'utilizzo delle immagini, se non ci sono problemi pubblico oltre allo script anche come recuperare le immagini.

Purtroppo, viste le condizioni d'uso imposte da AccuWeather, non molto chiare, non mi sento di pubblicare lo script che recupera le condizioni meteo e le stampa, con l'immagine, nella finestra di Conky e nemmeno come scaricare le immagini; casomai aprite una discussione sul forum ubuntu-it; indicherò il metodo, solo a scopo didattico e per un singolo esperimento.
Bye 8-)

Torna su
Sito realizzato da: UbaWeb di Giovanni Ubaldi

Licenza Creative Commons Tutto il contenuto di questo sito se non diversamente dichiarato è di Giovanni Ubaldi ed è distribuito con Licenza:

Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale.