Raspberry PI OS - po(d)ręczny Conky ;)

Spis treści

Czujny conky

Conky jest graficznym monitorem systemowym różnych dystrybucji Linuksa. Pozwalającym na "śledzenie" i prezentację na ekranie wielu zmiennych.

Tych "systemowych" - dotyczących: procesora, RAM-u, nośników, interfejsów sieciowych, itp. Ale również np. na sterowanie i korzystanie z popularnych zasobów multimedialnych.

Również systemów działających na RPi. Oczywiście jest też wersja conky dla Raspbiana 32/64..

Powszechnie doceniane są: jego "oszczędność zasobów" oraz "elastyczność i konfigurowalnność".

Dostępne są również opisy konfiguracji dedykowanych określonej grupie użytkowników np. krótkofalowcom. :D

Conky - ale który?

Który pakiet wybrać?Eksperymentując ze swoim RPi 4B/8GB nie mogłem nie sięgnąć po Conky

Aplikacja jest odgałęzieniem (rozwinięciem?) projektu torsmo (TyopoytaORvelo System MOnitor).

Charakterystyczne jest to, że wizualizacja informacji Conky odbywa się poprzez "bezpośrednie pisanie na pulpicie" (lub we wskazanym oknie).

To wszystko odbywa się jednak bez wykorzystywania procedur charakterystycznych dla procesora obrazu.

Charakterystyka pakietu conky (std.)Conky z "pełnym plecakiem"

Może wykonywać (co nie jest zalecane, bo zżera zasoby!) polecenia/ komendy systemowe OS'a. Jak również (co jest szeroko praktykowane) wykonywać skrypty (szybkiego) języka Lua.

Wydaje się zatem, że nic prostszego jak: zainstalowań, uruchomić i używać!.

Tu pojawia się pierwsze pytanie: który pakiet?

Instalator pakietów Synaptic podpowiada pełną "ofertę" pakietów Conky dla systemu Rasbian 32b. Te, które będą nas interesowały oznaczyłem podświetleniem koloru zielonego.

Do dyspozycji mamy dwa postawowe pakiety Conky: standardowy (std) i "full wypas" (all).

Oczywiście (nie tylko) w pierwszej chwili chciałoby się zainstalować wersję "najpełniejszą". Tak na wszelki wypadek. Ale czy to się opłaca?

Wydając w oknie terminala (Ctrl+Alt+T) komendę:

~S sudo apt-cache show conky # a następnie:
~$ sudo apt-cache show conky-all  

Instalacja conky

możemy poznać charakterystyki obu pakietów. Pomijam tu kwestię różnicy wielkości obu pakietów (std./all ~1/10).

Wybór wersji "all" wymaga dociągnięcia wielu bibliotek. Odbywa się to niejako "z automatu". Wersja ma (prawie) wszystko wkompilowane!

Jednak wyklucza mozliwość jednoczesnej instalacji i używania wersji "std". Tej mniejszej, "lżejszej"!

Po prostu: coś za coś! :/

Warto pamiętać, że również wersja std "obsługuje" język Lua. Dlatego też dla większości przypadków IMO instalacja podstawowej wersji Conky (std) jest w zupełności wystarczająca:

~S sudo apt install conky

Działający Conky...Bez względu na wybraną wersję instalacja nie trwa długo.

Wydawać by się mogło, że wystarczy już tylko wydać odpowiednie polecenie (to podkreslone), by ucieszyć oko obrazkiem widocznym z lewej strony. 

Niestety! Nic z tych rzeczy!

Powodów tego jest (co najmniej) kilka. Po pierwsze: zapewne nie masz jeszcze własnego pliku konfiguracyjnego. A ten "domyślny" stworzy nieco inny obraz okna Conky ;)

A nawet jeśli ten plik istnieje to kolejnym problemem może być (określona w linii polecenia) niestandardowa jego lokalizacja.

Domyślnie: $HOME/.conkyrc, tu: $HOME/.config/conky/.conkyrc. Zdecydowały o tym względy praktyczne.


conky.config

Conky - domyślna konfiguracja i wyglądPatrząc na obrazek z lewej chyba każdy przyzna, że prezentacja okna w domyślnej konfiguracji Conky nie przykuwa wzroku.

Jeśli nie brać pod uwagę (czasami występującego, ale zawsze irytującego) "mrugania" (flickering) samego okna. Zwłaszcza, gdy wywołanie Conky nastąpiło bez opcji "-b" lub w pliku konfiguracyjnym "double_buffer" ustawiono na "false". W dawnej wersji na "no".

Nie można mieć jednak pretensji do autorów. Dla nich priorytetem była zapewne uniwersalność konfiguracji..

Konfiguracja, która miała prezentować możliwości aplikacji i przede wszystkim  miała działać!. "Walory krajobrazowe" (wygląd) okna aplikacji pozostawili użytkownikom. 

Możesz sprawdzić co zawiera ta domyślna konfiguracja. Zaglądając do (oryginalnego, Raspbian 32b) pliku: /etc/conky/conky.conf:

-- vim: ts=4 sw=4 noet ai cindent syntax=lua
--[[
Conky, a system monitor, based on torsmo

Any original torsmo code is licensed under the BSD license

All code written since the fork of torsmo is licensed under the GPL

Please see COPYING for details

Copyright (c) 2004, Hannu Saransaari and Lauri Hakkarainen Copyright (c) 2005-2012 Brenden Matthews, Philip Kovacs, et. al. (see AUTHORS)
All rights reserved.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
]]

conky.config = {
alignment = 'top_left',
background = false,
border_width = 1,
cpu_avg_samples = 2,
default_color = 'white',
default_outline_color = 'white',
default_shade_color = 'white',
draw_borders = false,
draw_graph_borders = true,
draw_outline = false,
draw_shades = false,
use_xft = true,
font = 'DejaVu Sans Mono:size=12',
gap_x = 5,
gap_y = 60,
minimum_height = 5,
minimum_width = 5,
net_avg_samples = 2,
no_buffers = true,
out_to_console = false,
out_to_stderr = false,
extra_newline = false,
own_window = true,
own_window_class = 'Conky',
own_window_type = 'desktop',
stippled_borders = 0,
update_interval = 1.0,
uppercase = false,
use_spacer = 'none',
show_graph_scale = false,
show_graph_range = false
}

conky.text = [[
${scroll 16 $nodename - $sysname $kernel on $machine | }
$hr
${color grey}Uptime:$color $uptime
${color grey}Frequency (in MHz):$color $freq
${color grey}Frequency (in GHz):$color $freq_g
${color grey}RAM Usage:$color $mem/$memmax - $memperc% ${membar 4}
${color grey}Swap Usage:$color $swap/$swapmax - $swapperc% ${swapbar 4}
${color grey}CPU Usage:$color $cpu% ${cpubar 4}
${color grey}Processes:$color $processes ${color grey}Running:$color $running_processes
$hr
${color grey}File systems:
/ $color${fs_used /}/${fs_size /} ${fs_bar 6 /}
${color grey}Networking:
Up:$color ${upspeed eth0} ${color grey} - Down:$color ${downspeed eth0}
$hr
${color grey}Name PID CPU% MEM%
${color lightgrey} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color lightgrey} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color lightgrey} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}
]]

Jeśli Conky nie znajdzie w domyślnej lokalizacji ($HOME) pliku .conkyrc - to wczyta właśnie tę domyślną konfigurację.

Efekt "jest jaki jest". Pod wzgledem treści trudno cokolwiek zarzucić. Ale forma...

Nie ma się co dziwić, że wielu zaczyna szukać w sieci tych "ładniejszych" konfiguracji. Też szukałem. :/

Udostępnionych plików .conkyrc jest wiele. Również na Forum Raspberry.org jest wątek poświęcony tej aplikacji..


.conkyrc

Conky - podstawowa wersja konfiguracjiPo znalezieniu i sciągnięciu pliku konfiguracyjnego rzadko uzyskiwałem obraz zgodny z tym prezentowanym na załączanych przez autorów zrzutach ekranów. Niestety, czasami bywało... gorzej. :/

Próba wczytania konfiguracji końzyła się błędem! A przecież nie chciałem niczego nadzwyczajnego. Ot kilka potrzebnych danych.

Nawet bez "Lua"", choć podobają się mi się kompozycje wykorzystujące jego możliwości. Ale IMO lepiej działają i wyglądają (kolejność nie jest przypadkowa!) na dużym PC.

Upłynęło trochę czasu zanim "dało się"! ;) Bo wtedy jeszcze nie wiedziałem. Teraz już wiem ;), że:Stop!!!

  • wiele dostępnych w sieci configuracji Conky jest napisany z zastosowaniem "starej" składni,
  • "automatyczne" tłumaczenie "starej" składni" na nową (również z wykorzystaniem translatora Lua, co nie powinno dziwić) nie zawsze daje pozytywne wyniki,
  • stosowanie plików konfiguracyjnych z innych dystrybucji (niż własna) często bywa powodem generowania znacznej liczby błędów, z którymi nie zawsze wiadomo co zrobić,
  • w wielu plikach konfiguracyjnych dla "ładniejszego" efektu wizualnego autorzy odstępują od fontów typu "mono" (ekran rozjeżdża się zwłaszcza, gdy nie masz w systemie fontów wymienionych w pliku konfiguracyjnym)
  • i wiele innych "kamyczków", o które można się potknąć!

Wprawni i doświadczeni użytkownicy oczywiście poradzą sobie z tymi problemami. Bo (najczęściej) wiedzą czego i gdzie szukać!

Ale przecież nie tylko oni używają Conky.


Składnia

Conky tworzy obraz "bezpośrednio"...Od wersji 1.10 Conky stosuje składnię pliku konfiguracyjnego zgodną z językiem Lua.

Twórcy Conky deklarują możliwość konwersji "w locie" starego formatu do nowego.

W wielu przypadkach tak jest. IMO warto jednak znać podstawowe reguły obowiązującej składni pliku konfiguracyjnego Conky.... totalny rozjazd! :/

Ten opis to nie podręcznik, a "elementarz" podstawowych zasad!

Czy istotny? Spójrz na obrazek z prawej. Zrozumiesz dlaczego uważam, że tak!

Plik konfiguracyjny (.conkyrc domyślnie umieszczony w $HOME) składa się z dwóch sekcji: konfiguracyjnej oraz treści składającego się z tekstu, zmiennych oraz zdefiniowanych elementów graficznych.

conky.config={
...Sekcja konfiguracji...
};
conky.text = [[
.... Sekcja treści ....
]]

Pisanie w oknie ConkySekcja konfiguracji może zawierać:

  • definiowanie (istniejących) i deklaracje zmiennych (logicznych, tj. true/false, numerycznych oraz tekstowych,
  • definicja/deklaracja składa się z nazwy zmiennej, znaku przypisania (równości, =) oraz argumentu/wartości,
  • definicja/deklaracja zmiennej bez wartości (pusta) traktowana jest jako błąd,
  • deklaracja kolorów (color, color0...color9) odbywa się w pełnej (8 znaków) notacji szestnastkowej RGB bez(!) poprzedzającego znaku hash (#) lub nazwy z tabeli kolorów RGB,
  • jeśli argument/wartość nie jest: liczbą lub wartością logiczną musi być ujęta w cudzysłów (", '),
  • każda (z wyjątkiem ostatniej) definicja/deklaracja musi być zakończona przecinkiem (,),
  • wartość zmiennych użytkownika (template0...template9) winny być "zamykane" w: [[templateN]],
  • komentarze: jeśli w jednej linii to zaczynające się od "--", komentarze wieloliniowe zaczynają się od: "--[[", kończą: "]]".

Sekcja treści może zawierać:

  • znaki ASCI, elementy (obrazy) graficzne, zmienne oraz wynik wykonanych: poleceń powłoki, skryptów, itp., które będą wyświetlane w oknie programu zgodnie z regułami ujętymi w sekcji konfiguracji,
  • wartości zmiennych określane są poprzez: $zmienna - dla zmiennych bez argumentów lub ${zmienna arg1 arg2} - dla zmiennych z argumentami,
  • elementy pozycjonujące składniki treści,
  • komentarze rozpoczynające się od nowej linii, gdzie pierwszym znakiem jest hash (#).

Istotna uwaga: nie można zamiennie w sekcjach konfiguracji lub treści stosować znaków określających początek linii komentarza.

Użycie znaku hash (#) w Sekcji konfiguracji nie jest traktowane jako komentarz i wywoła błąd.

Użycie łańcucha "--" w Sekcji treści również nie zostanie potraktowane jako początek komentarza. Łańcuch (i to co po nim następuje) zostanie wyświetlone w oknie Conky. I będzie totalny rozjazd! :/


Mój "konfig"

Okienko ConkyPrzyszedł czas na prezentację własnego "Konfiga".

Od razu chciałbym zaznaczyć, że nie jest to żaden "wyczyn". 

Jedynie efekt przymyśleń, podglądania w sieci i wielu prób pod różnymi systemami.

A propos: "różne systemy". Opisując pliki conky.config czy .conkyrc wspominałem o różnych wynikach stosowania tej samej składni pod różnymi systemami.

Poniżej jeden z przykładów tj. kontrola stanu interfejsu sieciowego wlan0.

Pod Raspbianem wykorzystanie zmiennej ${if_up wlan0} daje oczekiwany efekt. Pod Ubuntu-Mate - nie!

Podpowiem, że w tym drugim przypadku efekt osiąniemy stosując (dla wlan0) zmienną $if_match w celu sprawdzenia czy adresem przypisanym do wlan0 nie jest(!): "No Address".

...
${if_up $template2}Wi-Fi: ${addr $template2}$else${color red}${alignr}${font :style=Bold:size=9}WiFi wyłączone!${font}${color1}$endif
...

Jak widać ten konfig u mnie działa! Prezentując podstawowe możliwości Conky. Obrazek powyżej jest "spod" Ubuntu-Mate 20.10 (Bardzo przepraszam za widoczny w tytule okna błąd: jego zrzut powstał jeszcze przed modyfikacją zmiennej template0 w pliku .conkyrc).

Plik konfiguracyjny Conky umieściłem w $HOME/.config/conky Dlaczego ta lokalizacja?

Domyślnie Conky szuka pliku konfiguracyjnego w $HOME (czyli katalogu domowym).

Niby racja. Jednak tam jest już wiele plików: konfiguracyjnych oraz innych. Najczęściej w pośpiechu: stworzonych, wrzuconych i/lub edytowanych przez właściciela konta! :D.

Po jakimś czasie znalezienie czegokolwiek bywa ;) bardzo kłopotliwe. A konfiguracje (kolejne wersje, backup'y) i składniki (grafiki, fonty, itp.) okienka Conky czasami ulegają modyfikacjom/edycji.

Dlatego też (już na wstępie!) warto im dedykować osobny katalog. IMO dobrym miejsce na to jest istniejący w katalogu domowym użytkownika podkatalog .config.

Stworzenie odpowiedniego podkatalogu to: mkdir ~/.config/conky Poniższa zawartość .conkyrc - wzięta z katalogu $HOME/.config/conky pod Raspbianem 32b:

conky.config = {
-- zmienne
template0 = [[Raspbian 32b]],
template1 = [[eth0]],
template2 = [[wlan0]],
-- parametry okna
alignment = 'bottom_left',
background = true,
gap_x = 15,
gap_y = 15,
minimum_height = 300,
minimum_width = 280,
maximum_width = 280,
no_buffers = true,
out_to_console = false,
out_to_stderr = false,
extra_newline = false,
own_window = true,
own_window_class = 'Conky',
own_window_type = 'normal',
own_window_transparent = false,
own_window_argb_value = 255,
own_window_argb_visual = true,
own_window_colour = 'black',
own_window_hints = 'undecorated,sticky,skip_taskbar,skip_pager,below',
border_width = 1,
border_inner_margin = 5,
border_outer_margin = 3,
stippled_borders = 0,

double_buffer = true,
cpu_avg_samples = 2,
net_avg_samples = 1,

-- polskie czcionki UTF8
override_utf8_locale = true,

-- format wyświetlania jednostek
-- pojemności nośników, transferu, itd.
short_units = true,
format_human_readable = true,

-- ramki
draw_borders = true,
draw_outline = false,
draw_shades = false,
use_xft = true,
font = 'DejaVu Sans:style=Regular:size=10',

-- definicje kolorów
default_color = '98a886',
-- biały
color1 = 'white',
-- RPi
color2 = 'c41949',
-- szare
color3 = '555555',
color4 = 'c0c0c0',
-- zielony
color5 = '66ff33',
-- niebieski
color6 = '66ffff',
-- złoty
color7 = 'ffd700',
-- pomarańcowy2
color8 = 'ff9933',

default_shade_color = 'd0d0d0',
default_outline_color ='00ff00',

update_interval = 0.5,
uppercase = false,
use_spacer = 'none',

-- wykresy
draw_graph_borders = true,
show_graph_scale = false,
show_graph_range = false
}

conky.text = [[${image ~/.config/conky/pic/RPI1.png -p 2,25}${color c41949}${font :style=Bold:size=14}$template0${font :style=Regular:size=10}${alignr}${color1}${freq_g cpu0}GHz
${alignc}${font :style=Bold:size=9}($sysname $kernel, ${fs_type}),${font}
${color4}${alignc}Aktywny: ${uptime},
${alignc}Zalogowany: ${user_times}
${color}${hr 1}${font :style=Bold:size=10}${color2}
CPU ${font}${color}(U=${exec /opt/vc/bin/vcgencmd measure_volts | cut -c6-9}V, temp: ${exec /opt/vc/bin/vcgencmd measure_temp | cut -c6-9}C)${alignr}
(${color5}${processes}${color1}/${color}${running_processes}${color1})
${cpugraph 808080 ffd700 -l}
${font :style=Bold:size=10}${color7}${cpubar cpu1 10,100} ${cpu cpu1}%${alignr}${cpu cpu2}% ${cpubar cpu2 10,100}
${cpubar cpu3 10,100} ${cpu cpu3}%${alignr}${cpu cpu4}% ${cpubar cpu4 10,100}${color2}
${font :style=Bold:size=10}TOP5${color4}${font} (nazwa) ${alignr}$color5 PID $color7 %CPU$color6 %MEM ${color4}
${top name 2} ${alignr}${color5} ${top pid 2},${color7} ${top cpu 2}%,${color6} ${top mem 2}%,${color4}
${top name 3} ${alignr}${color5} ${top pid 3},${color7} ${top cpu 3}%,${color6} ${top mem 3}%,${color4}
${top name 4} ${alignr}${color5} ${top pid 4},${color7} ${top cpu 4}%,${color6} ${top mem 4}%,${color4}
${top name 5} ${alignr}${color5} ${top pid 5},${color7} ${top cpu 5}%,${color6} ${top mem 5}%,${color4}
${top name 6} ${alignr}${color5} ${top pid 6},${color7} ${top cpu 6}%,${color6} ${top mem 6}%,${color4}
${hr 1} ${color2}${font :style=Bold:size=10}
RAM: ${color1}$mem $font $color6 ($memmax), ${color5}użyte: ${memperc}%${color2}
${font :style=Bold:size=10}DYSK: ${color1}${fs_used /}$font $color6 (${fs_size /}), ${color5}wolne: ${fs_free_perc /}%$color
${hr 1} $color
GW: ${color1}${gw_ip},${color}
Sieć ($template1}: ${color1}${addr $template1}
${if_up $template2}Wi-Fi: ${addr $template2}$else${color red}${alignr}${font :style=Bold:size=9}WiFi wyłączone!${font}${color1}$endif
${image ~/.config/conky/pic/dn1.png -p 0,435}${color3}${downspeedgraph eth0 25,137 002000 00ff00 -l} ${upspeedgraph $template1
25,137 400000 ff4415 -l}${image ~/.config/conky/pic/up1.png -p 246,355}
${color 00ff00}${offset 30}${font :style=Bold:size=10}${downspeed $template1}/s (${totaldown $template1}),${alignr}${color red}${upspeed $template1}/s (${totalup $template1})${color}${font}
]]

Plik conky.shDalsze (szczegółowe) omówienie poszczególnych elementów pliku .conkyrc wykracza poza ramy tego artykułu. Jak wspominałem. To elementarz!

IMO informacje zawarte na stronie Autora są wystarczające. Nawet dla "zaczynających".

Omawiając konfigurację Conky nie sposób nie wspomnieć o czcionkach/fontach.

Ale zanim do tego przejdę chciałbym wskazać jak można uruchomić Conky z przygotowanym plikiem konfiguracyjnym.

W tym celu (najlepiej) w oknie terminala (Ctrl+Alt+T) wywołać edytor nano:

~S sudo nano /usr/bin/conky.sh

Za pomocą edytora nano tworzy w katalogu: /usr/bin (dlatego wymagane są uprawnienia administratora) plik o nazwie: conky.sh o następującej treści:

#!/bin/sh
# gdzie: -p 4 - opóźnienie uruchomienia conky o 4s,
# -b - włączenie podwójnego buforowania,
# jeśli w .conkyrc double buffer włączone (true) można odpuścić
# -c - argumentem tej opcji jest (wraz ze ścieżką)
# nazwa pliku konfiguracyjnego

(conky -p 4 -b -c ~/.config/.conkyrc) &
exit0

Po zapisaniu pliku (Ctrl+O) oraz wyjściu z niego (Ctrl+X) plikowi trzeba nadać odpowiednie uprawnienia (do wykonywania):

~S sudo chmod a+x /usr/bin/conky.sh

Tak przygotowany plik conky.sh możemy uruchomić z linii komend:

~S sh conky.sh

Plik conky.desktopRóżnica między uruchomieniem skryptu conky.sh a komendą conky (bez parametrów) polega na tym, że w drugim przypadku (w katalogu domowym) szukany jest plik konfiguracyjny.

Jeśli go nie ma - conky wczyta konfigurację domyślną!

Jeśli chcemy by Conky uruchamiał się przy każdym logowaniu do konta użytkownika musimy w katalogu /etc/xdg/autostart stworzyć plik conky.desktop o następującej treści:

[Desktop Entry]
Type=Application
Name=Conky
Comment=Uruchamia Conky
NoDisplay=true
Exec=sh /usr/bin/conky.sh
NotShowIn=Gnome;KDE;XFCE;

By sprawdzić, czy wszystko działa prawidłowo - wyloguj się i ponownie zaloguj.

Powinieneś zobaczyć okno conky zgodne z konfiguracją zawartą w pliku .conkyrc.

Zwróć jednak uwagę, że plik conky.sh pobiera plik konfiguracyjny z następującej lokalizacji: ~/.config/conky.

Dlatego plik konfiguracyjny winien tam się znaleźć. Pozwala to stworzyć każdemu użytkownikowi własną konfigurację Conky.


Fonty, czcionki

Fonty, czcionkiBardzo istotnym składnikiem okna Conky, decydującym o jego ostatecznym kształcie (dosłownie i w przenośni!) są użyte (i wskazane w pliku konfiguracyjnym) fonty.

Przez innych nazywane czcionkami.

Moim celem nie jest udzielenie odpowiedzi na pytanie: użycie której z tych nazw jest bardziej właściwe.

W swoim pliku .conkyrc użyłem fontu o nazwie: DejaVu Sans.

Fonty xft włączone i wyłączone

Ten krój czcionki zdobył sobie popularność za sprawą Debiana. A jego pakiety instalacyjne występują (chyba) w większości dystrybucji Linuksa. Nie inaczej jest z Raspbianem.

Drugim zagadnieniem, o którym jedynie wspomnę (choć ma bardzo istotny wpływ na wygląd okna Conky) to kwestia ustawienia w pliku konfiguracyjnym parametru use_xft (true/false).

Omawianie wszystkich zagadnień związanych z fontami xft to materiał na zupełnie inny artykuł.

DejaVu Sans pod Raspbianem 32bNa obrazku z prawej "łopatologicznie" (czy wizualnie) można się przekonać, że jeśli ma być równo (dla wszystkich znaków) to trzeba go wyłączyć.

Ja jednak wolę się trochę pomęczyć i skorzystać z dobrodziejstw fontów xft.Style i rodzaje DejaVu Sans pod RPi OS 32b

Ważne jest również to, że (przy tym pliku konfiguracyjnym) wysokość okna Conky (przy wyłączonym use_xft) jest mniejsza.

W większości plików konfiguracyjnych używanie fontów xft jest włączone (use_xft = true).

Wróćmy do naszego fontu DejaVu Sans. Można by powiedzieć font i tyle. Jak widać na obrazku z lewej (okno Menadżera czcionek) pod Raspbianem 32b "familia" liczy 9 członków (czerwona strzałka).

Proponuję zauważyć, że (co widać na obrazku z prawej) nawet należąc do jednej "familii" (DejaVu Sans) mogą mieć różne "odmiany" (zmienna "style").

DejaVu pod WindąTa zmienna jest o tyle istotna, że w pliku konfiguracyjnym pojawia się ona dość często. Podobnie jak zmienna dotycząca wielkości liter (zmienna "size").Ubogi wybór DejaVu Sans pod RPi OS 64b

Popularność czcionki pozwala sądzić, że nie ma problemu ze zdobyciem źródeł.

Nawet pod Windą można spotkać ten krój czcionki. Nie "gryzie się" i całkiem dobrze wygląda! :)

Cienko tu z wyborem :/ po zmianie na aarm64bToteż może zastanawiać, że pod Raspbianem 64 familia DejaVu Sans "kurczy się" i ma już tylko... 2 odmiany. Zamiast 9-ciu!.

Co ciekawe nie lepiej jest w (używanym przeze mnie) Ubuntu-Mate 20.10.Ubuntu-Mate 20.10 - skromnie z DejaVu Sans

Wydaje się, że "na upartego" te dwie też wystarczą, ale...

Jeśli swój plik konfiguracyjny tworzyłeś pod wersją "bogatszą w fonty" i wpisałeś coś, czego nie zawierają inne dystrybucje może być kiepsko.

Umate 64b też ma tylko 2 odmiany DejaVu Sans"Spolszczone" z automatu okno Menedżera czcionek pod UMate ukazuje  2 "variation".

Po zajrzeniu do środka okazuje się, że DejaVu Sans ma tylko 2 odmiany.

Warto przyjrzeć się (porównując z "listą obecności" pod Raspbianem 32b) czego tu brakuje! :/ Oczywiście w sytuacji, gdy chcemy wykorzystać jakiś font, którego nie ma w systemie możemy go zainstalować. Nie będę tu powielał opisu procedur, gdyż w sieci jest ich "bez liku".

Również miłośnicy Raspbiana znajdą link odnoszący się bezpośrednio do tego OS'a.. Translator działa poprawnie. Nie powinno być kłopotów..fonts odchodzi do przeszłości?

Zastanawia mnie jednak wpis (Raspbian 32b):

w części "Font directory list" w /etc/fonts/fonts.conf (nie należy go "ręcznie" edytować) dotyczący ~/.fonts:
"następujący element zostanie usunięty w przyszłości"
(...the following element will be removed in the future...).

Pytanie tylko: kiedy?


Grafiki

Grafika jako tło ConkyJedną z użytecznych i często wykorzystywanych funkcji Conky jest operowanie grafikami.

Głównie w przypadku wykorzystywania skryptów Lua. Do obrazowania czy prezentacji wybranych parametrów użytkowanych systemów.

W wsieci jest wiele opisów. Na niektórych portalach poświęconych grafice (np. DeviantArt.com) można znaleźć prezentacje poświęcone wyłącznie Conky (tu: Explore the Best Conky Art) czy tamże Conky Stuffs on Linux-Lounge-Gallery.

Ale tym tu nie będę się zajmował.

Do prezentacji obrazy w obrębie okna Conky służy zmienna $image, która musi zawierać co najmniej jeden parametr, tj. adres(lokalizację) obrazu, który ma być wyświetlony:

# Zmienna ta najczęściej jest umieszczana w części treści (TEXT) opisu okna Conky (.conkyrc)
# ewentualnie (rzadziej) jest wykorzystana do deklaracji zmiennej aplikacji w części konfiguracyjnej
# gdzie:
# -p - pozycja (oś: x, y) obrazka (jego prawy, górny róg) względem prawego górnego narożnika okna Conky,
# -s - przeskalowanie obrazka do wymiaru określonego (w px), wymiar: S - szerokość, W - wysokość,
# -n - wyłączenie lokowania (buforowania) obrazka w pamięci podręcznej (cache),
# -f - określenie interwału (wartość całkowita) odświeżania zawartości obrazka w pamięci podręcznej (cache)


${image<ścieżka_do_obrazka><nazwa_obrazka> (-p x,y) (-s SxW) (-n) (-f interwał)}

Renderuje ona obraz ze wskazanej ścieżki wykorzystując bibliotekę Imlib2.

Conky nie ralizuje żadnych innych funkcji pozycjonowania czy innego formatowania wskazanych obrazów.

Jak Twórca Conky podkreśla: ...Jedynym powodem, dla którego zmienna $image jest częścią sekcji TEKST jest umożliwienie modyfikacji środowiska wykonawczego poprzez $execp $lua_parse...".

Ale jak widać można z tej możliwości skorzystać i bez Lua. :) Dla początkujących - korzystne rozwiązanie.

Np. zamiast przy pomocy wielu zmiennych "koloryzować" okno Conky, w którym zostaną przedstawione wybrane dane możemy stworzyć odpowiednie tło, na którym będą one prezentowane.

Rysowanie bywa prostsze (i przyjemniejsze) niż wielokrotne wywoływanie funkcji modyfikujących tryb i sposób prezentacji danych.

Bywa... I dlatego ostateczny wybór należy do użytkownika.

Obrazki w oknie prezentowane są w określonej kolejności. Przezroczystość zapewnia format obrazu (np. png).

Pozycjonując obraz należy zwrócić uwagę na fakt, że podanie współrzędnych wykraczających poza ramy okna Conky spowoduje, że może być on niewidoczny na ekranie.

Czcionki Modern Pikctograms RegularWarto poeksperymentować. Ewentualnie "podejrzeć" jak to robią inni. :)

Analizując zawartość "szablonów" okien Conky można zauważyć, że w wielu przypadkach wykorzystywane są piktogramy. I to nie pojedyńcze obrazki czy ikony.

Popularne jest wykorzystywanie zbiorów piktogramów (czy ikon) osadzonych w zbiorach czcionek. Zestawy czcionek zawierające ikony są dostępne w sieci....

Przykładem może być czcionka Modern Pictograms (Regular) autorstwa Johna Caserta.

Zbiór ten zawiera wiele przydatnych ikon, które (analogicznie jak "zwykłe" czcionki) mogą być pozycjonowane: do lewej, centrowane, do prawej.

Takie operacje bezpośrednio nie są możliwe w odniesieniu do obrazów. Skalowanie czcionek jest również prostsze niż ta sama operacja w odniesieniu do obrazów.

Zatem co wybrać: czcionkę czy obrazek?

Przed podjęciem decyzji warto wziąć pod uwagę następujące zagadnienia:

  • operacje na "czcionkach" są prostsze "w eksploatacji". I bardziej elastyczne niż te na obrazach (oczywiście mowa tu o Conky bez wykorzystania skryptów Lua).
    Jednak nie jest oczywiste, czy w przypadku wykorzystania 2-3 znaków (ikon) ładowanie całego zestawu czcionek jest rozwiązaniem najbardziej optymalnym,
  • "pole manewru" w przypadku niewielkich ikon, obrazków czy piktogramów nie jest tak szerokie jak w przypadku czcionek, ale wczytanie ich nie sprawia wielkiego kłopotu. Z wykorzystaniem czy bez bufora.
    Jeśli praca z Gimpem nie prawia Ci kłopotu przygotowanie odpowiednich materiałów nie trwa zbyt długo.
    W niektórych przypadkach korzystniej jest wykorzystanie określonej czcionki do przygotowania własnego obrazka, który potem zostanie wczytany w odpowiednie lokacji jako kompletny obraz.

Ale najważniesza zasada to ta, że: wyboru musisz dokonać sam. Kierując się głównie tym co Ci najbardziej odpowiada!


Lokacja elementów

$image bez "-p"Okno Conky wypełnione jest treścią. Należy zwrócić uwagę na fakt, że w oknie elementy graficzne są pozycjonowane inaczej niż czcionki (o nich za chwilę).

O ich pozycji decydują współrzędne określonem parametrem "-p" 

I tak: ${image -p 20,30} to oznacza, że lewy, górny narożnik znajdzie się w pozycji x=20px, y=30px od lewego, górnego rogu okna Conky.

Jeśli pominięmy parametr -p to bez względu na to, gdzie w sekcji treści znajdzie się ten wpis obrazek zostanie wyświetlony w pozycji "zero". Czyli brak parametru -p jest równoznaczny z ${image -p 0, 0}.

Położenie obrazków nie zależy od położenia czcionek. Używając wyłącznie tych ostatnich sprawa jest dość prosta: każdy wiersz znajduje swój obraz w polu okna. 

Bez użycia funkcji pozycjonujących o położeniu kolejnego elementu decydują własności i styl czcionki (wysokość, szerokość, odstępy, itd.) Dotyczy to również spacji.

Każda "nowa linia" w pliku treści pliku konfiguracyjnego to nowa linia w treści okna.

Ale dysponujemy ponadto następującymi funkcjami pozycjonującymi:

  • ${goto x} - wyświetl następny element w bieżącym wierszu na pozycji x (wartość x wyrażona w px),
  • ${offset x) - wyświetl następny element w bieżącym wierszu z przesunięciem o x (wartość x wyrażona w px, dopuszczalne wartości ujemne),
  • ${voffset y) - wyświetl następny element z przesunięciem pionowym o y (wartość y wyrażona w px, dopuszczalne wartości ujemne).

Ale i używanie czcionek daje czasami zaskakujące efekty.Działanie komendy goto x

Okazuje się, że nieco inaczej traktowane są: lewa i prawa krawędź okna Conky. :D

Zacznimy od prezentacji podstawowej, testowej wersji okna Conky. Oprócz (widocznych na prawym obrazku) w dolnej części okna Conky w zasadzie nic ciekawego.

Wielkość okna edytora nano specjalnie dobrano. Czerwone pole obejmuje obszar wolny od okna Conky.

"Eksperyment" polega na dodaniu (w miejscu kursora, w postaci 3 linii tekstu) w Sekcji treści pliku .conkyrc następującej treści: 

$color${voffset -350}${offset -210}${font :style=Bold:size=45}${color5}${freq_g cpu0}GHz
${color8}${freq_g cpu0}GHz
${color ff0000}${offset 53}${freq_g cpu0}GHz

Ciekawe właściwości okna ConkyPo przeładowaniu Conky zauważymy następujące zmiany:

  • okno Conky (wyznaczone granicą, jasna linia 1px) powiększyło się (chodzi o wysokość). Jakkolwiek na dole okna nie widać żadnego tekstu to okno zostało powiększone o 3 linie (po 45px).
    Jest wysokość linii wyświetlających informację o bieżącej częstotliwości taktowania procesora.
    Ujemna wartość poziomego przesunięcia (-210px) pierwszego (zielonego) napisu spowodowała jego "wyrzucenie" poza obszar okna Conky. Ale obcięcie nie nastąpiło "w obszarze" okna.
    Napis pojawił się również w części objętej zewnętrznym marginesem (outher_margin),
  • punktem wyjścia dla drugiego (pomarańczowego) napisu jest pozycja następnej linii (skorygowanej o wartość inner_margin, tu 5px) określonej na podstawie wielkości czcionki,
  • ostatni (czerwony) wiersz został tak przesunięty w poziomie (53px), że litera "H" nie mieści się w obrysie okna Conky. Zmiana wartości przesunięcia ($offset) z 53 na 52 powoduje, że litera jest wyświetlana prawidłowo. Bez obcięć.
    Również zmiana wewnętrznego marginesu daje ten sam efekt. Oznacza to, że położenie prawej krawędzi okna (minus inner_margin) decyduje o tym czy znak (i to co po nim następuje) ma zostać wyświetlone czy też nie!

Czyli projektując okno Conky należy również te jego "własności" uwzględniać!


Przezroczyste tło

Przezroczyste tło okna ConkyDużą popularnością wsród użytkowników cieszy się okno Cony z przezroczystym tłem.

Myślę, że dobrym zakończeniem omawiania korzystania i konfiguracji Conky będzie wskazanie: jak uzyskać taki efekt jak na obrazku z lewej?

Jest wiele parametrów służących do określenia parametrów wyświetlania okna Conky. Większość z nich zaczyna się od own_window*.

By ułatwić ewentualne eksperymenty czytającym poniżej prezentuję ten fragment pliku konfiguracyjnego .conkyrc, który decyduje o uzyskaniu przezroczystego tła:

own_window = true,
own_window_class = 'conky',
own_window_type = 'normal',
-- ten parametr ustawia przezroczystość,
-- ustawienie na false włącza ustawione tło
own_window_transparent = true,

Zwielokrotniony ConkyTa przezroczystość nie jest czymś "banalnym".

Tworząc szablony prezentacji przy pomocy Conky danych (nie tylko systemowych) częstokroć wykorzystywaną metodą jest wielokrotne uruchamianie conky z różnymi plikami konfiguracyjnym.

Wynika to z faktu, że 1 "instancja" conky może korzystać tylko z jednego pliku konfiguracji.

"Prawie" nic nie stoi na przeszkodzie by jednak uruchomić kilka conky.

To "prawie" czyli dużą różnicę. W sekcji "Conky - ale który?" wskazywałem, że wersja "all" jest niemal 10 razy większa od tej standardowej (std).

Bieżące wykorzystanie zasobów RPi jest również większe. Dlatego przed instalacją wersji i uruchomieniem kolejnych "instancji" conky warto tę kwestie dobrze przemyśleć.

Zakończenie

Trzeba jednak przyznać, że zaangażowanie do wyświetlania pełnej wersji conky (conky-all) może skusić nawet malkontentów.Tandem Lua z Cairo...

Wykorzystanie elastyczności języka Lua w powiązaniu z możliwościami bibliotek: Cairo (biblioteki - stworzona przez Keitha Packarda - do obsługi grafiki wektorowej udostępniającej wysokiej jakości obrazy) oraz imlib2 "przykuwa uwagę".

Jednakże prezentacja (nawet tych najprostszych) przykładów przekracza zakres niniejszego artykułu.

Brenden Matthews, prowadzący projekt Conky szeroko opisał powyższe zaganienia w częsci Wiki poświeconej wykorzystaniu języka Lua..

Z kolei zaglądając na stronę prezentującą przykłady wykorzystujące możliwości biblioteki Cairo można zauważyć, że składnia skryptów nie jest szczególnie skomplikowana czy zawiła.

Jedyne co może niepokoić, to fakt, że pakiet Lua zainstalowany w Raspbianie (32/64) to wersja 5.1.5 (2012), podczas, gdy na stronie projektu Lua dostępna jest już wersja 5.4.3 (29.03.2021). :/

Tak czy inaczej możliwości (i prezentacje) nęcą by spróbować.

MX Linux z ConkyWarto również pamiętać, że istnieją inne dystrybucje Linuksa dedykowanego RPi zawierające w sobie nie tylko Conky.

Wyposażone one są również w narzędzia do obsługi pakietów związanych z tym monitorem systemu.

Czasami (jak w MX Linux) załączono wiele kompletnych szablonów Conky, zawierające nie tylko skrypry konfiguracyjne, ale i grafiki czy pliki wymaganych czcionek.

Z prawej prezentuję przykładowy szablon Conky pod MX Linux'em. Takie rozwiązanie znacznie ułatwia start z Conky.

Wspominałem już, że wersja standard Conky nie umożliwia wykorzystania w pełni jego funkcjonalności.

Bez i z Lua (oraz cairo)Na obrazku z lewej pokazałem wygląd tej samej aplikacji conky (pod MX Linux), w której wykorzystywane (lub nie) są skrypty lua.

"Blokada" użycia skryptów lua wynika przede wszystki z tego, że ich zastosowanie wymaga zainstalowania cairo (cairo docks).

Wymagana ponadto przez skrypty lua biblioteka libimlib2 z reguły jest już w systemie zainstalowana.

Jeśli jesteś zainteresowany tym na co "marnotrawię swój czas" zapraszam do Warsztatu krótkofalowca.