Appunti di Programmazione

Creative Commons License

Configurare OpenBox su Debian

Uso il PC da molti anni, e una cosa che ho imparato ad apprezzare sono i sistemi operativi minimali, quelli con pochi programmi ma essenziali, privi di fronzoli e accessori inutili che servono solo ad abbellire il desktop; mi riferisco in particolare alle animazioni di apertura / chiusura delle finestre o al cambio desktop, allre trasparenze e alle icone 3D. Adoro le scrivanie vuote, corredate solo dello sfondo, ogni altra cosa non mi interessa. Mi piacciono i menù con solo le voci necessarie e mai ripetute come, ad esempio, ho trovato su Debian con LibreOffice Draw che è presente nelle due categorie "Ufficio" e "Grafica"; meglio se il menù è solo testuale e privo di qualunque appendice grafica.

Da un anno uso Linux e piano piano ho cominciato ad apprezzare la sua versatilità e capacità di trasformazione; è un sistema operativo che permette di essere configurato fin nei minimi dettagli e questo mi ha fornito lo spunto per un'idea: installare una versione minimale, solo terminale per intenderci, per poi corredarla di un Window Manager (WM), e del gruppo di programmi che sono solito usare.

Non è stato difficile trovare il necessario per concretizzare questo progetto, è stato sufficiente effettuare qualche ricerca in rete per approdare a Debian netinst, che consente un'installazione minima, e OpenBox, un WM per il quale si trovano molte info su come installarlo e configuralo, oltre a numerosi accessori utili che possono essere installati separatamente.

Quello che voglio realizzare è un sistema operativo minimale con queste caratteristiche:

  • Nessuna icona sul desktop.
  • Nessun pannello con pulsanti di avvio, orologio, data, notifiche, icone della rete, del bluetooth, del volume... Niente di Niente!
  • Menù solo testuale.
  • Programmi con interfaccia grafica solo quelli necessari per me (GIMP, Idle Python, SMPlayer, Web Browser, OpenSohot Video Editor e pochi altri).
  • Quando possibile usare il terminale, evitando di installare applicazioni grafiche.
  • Computer da utilizzare: Mac Book Pro 13" [8.1] del 2011

- Iniziamo con lo scaricare Debian netinst, e salviamolo su una chiavetta USB che deve essere resa avviabile (vedi qui)

- Inseriamo la chiavetta in una porta usb, colleghiamo il router al portatile tramite cavo ethernet e riavviamo il PC per procedere con l'installazione, processo del quale non fornirò alcuna spiegazione, considerato che in rete si trovano molte guide ben dattagliate su come fare.

- Ognuno decida cosa è meglio per se stesso, quali componenti installare per ottenere un sistema minimale dedito all'uso del terminale. Per ciò che mi riguarda ho optato per queste scelte:

Kernel: linux-image-amd64.

Scelta kernel

Scelta dei soli drivers necessari a questo sistema.

Scelta dei soli Driver necessari

Software non libero per eventuali driver di schede proprietarie.

Software non libero

Software da installare: solo utilità di sistema standard.

Utilità di sistema standard

- Completata l'installazione ci troviamo di fronte al terminale tty ("MBP-OB" è il nome del mio computer):

Debian GNU/Linux 11 MBP-OB tty1
MBP-OB login: _

Per iniziare a lavorare è fatto d'obbligo autenticarci come utente, perciò inseriamo le nostre credenziali (nome e password) e premiamo invio.

Debian GNU/Linux 11 MBP-OB tty1

MBP-OB login: gandalfrank
Password:
Linux MBP-OB 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
gandalfrank@MBP-OB:~$ _

Giusto per scrupolo procediamo con l'aggiornare il sistema, anche se non dovrebbe essere necessario.

$ sudo apt update
[sudo] password di gandalfrank: 

quindi:

$ sudo apt upgrade
[sudo] password di gandalfrank: 

Se 'sudo' non risulta installato fatelo adesso:

$ su
Password

Il prompt cambia indicando che adesso è l'amministratore ad essere attivo.

root@MBP-OB:/home/gandalfrank#

Adesso installiamo 'sudo':

root@MBP-OB:/home/gandalfrank# apt install sudo

Adesso è necessario cambiare i permessi di 'sudo' per l'utente:

$ sudo visudo
[sudo] password di gandalfrank:

Qualora un messaggio vi comunichi che il file non è stato trovato scrivete questa istruzione:

$ sudo /usr/sbin/visudo
[sudo] password di gandalfrank:

Viene avviato l'editor 'Nano' con il file /etc/sudoers.tmp in bella mostra, pronto per essere modificato; aggiungete l'istruzione seguente, alla fine del file:

gandalfrank ALL=(ALL) NOPASSWD:ALL

sudoers

L'istruzione serve a comunicare al sistema che l'utente 'gandalfrank' può usare i privilegi di 'sudo' senza dover inserire la password relativa ogni volta. Ovviamente al posto di 'gandalfrank' va scritto il proprio nome utente. A modifica ultimata salvare il file con CTRL + O, confermare premendo s e uscire con CTRL + X, quindi RIAVVIATE il pc.

A questo punto installiamo OpenBox, Xorg, Menu e LightDM
OpenBox è il Window Manager da me scelto da usare al posto dei più blasonati Desktop Environment come KDE, Gnome, Xfce, Mate...; Xorg è il server X Window predefinito di Debian; Menù è un programma che crea un menù testuale con tutte le applicazioni installate nel sistema e infine LightDM è un applicazione che permette di gestire la schermata di accesso al sistema operativo.

$ sudo apt install openbox xorg menu lightdm -y
[sudo] password di gandalfrank: 

A processo ultimato, avviamo OpenBox digitando il seguente comando:

$ startx

apparirà una schermata scura vuota con al centro il puntatore del mouse: questo è OpenBox!

OpenBox - schermata scura e vuota

Per iniziare ad usarlo è sufficiente premere il tasto destro del mouse in un qualunque punto della scrivania e avremo accesso al menù delle applicazioni installate.

OpenBox - menù di avvio

Clicchiamo sulla voce "Terminal emulator" per avviare una console.

OpenBox - finestra Xterm

Adesso procediamo con l'installazione del pacchetto base per la compilazione dei programmi Per ciò che rigurada il mio portatile Mac, mi tornerà utile per gestire il firmware della scheda WiFi.

$ sudo apt install build-essential
[sudo] password di gandalfrank: 

Ora è il turno di un terminale più pratico di quello appena utilizzato. Io mi trovo bene con LXTerminal:

$ sudo apt install lxterminal
[sudo] password di gandalfrank: 

Configuriamo il WiFi

Il mio portatile ha una scheda WiFi Broadcom BCM4331, periferica per la quale devo installare il firmware e configurarla per essere usata.
Recuperiamo il firmware:

$ sudo wget http://bues.ch/b43/fwcutter/b43-fwcutter-015.tar.bz2
[sudo] password di gandalfrank: 

Decomprimiamo il file appena scaricato:

$ sudo tar xjf b43-fwcutter-015.tar.bz2
[sudo] password di gandalfrank: 

Entriamo nella cartella che è stata creata.

$ cd b43-fwcutter-015

Compiliamo.

$ make

Avviamo l'installazione.

$ sudo make install
[sudo] password di gandalfrank:

Usciamo dalla cartella.

$ cd ..

Continuiamo inserendo i seguenti comandi:

$ export FIRMWARE_INSTALL_DIR="/lib/firmware"

$ sudo wget http://www.lwfinger.com/b43-firmware/broadcom-wl-5.100.138.tar.bz2
[sudo] password di gandalfrank:

$ sudo tar xjf broadcom-wl-5.100.138.tar.bz2
[sudo] password di gandalfrank:

$ sudo b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" broadcom-wl-5.100.138/linux/wl_apsta.o
[sudo] password di gandalfrank:

Installazione completata.
E' il momento di riavviare il sistema e appena è di nuovo operativo, controllare se la scheda WiFi viene riconosciuta:

$ ip a

Dovrebbe apparire un elenco simile al seguente, dove, nel mio caso, la scheda WiFi è riconosciuta ed etichettata come "wlp3s0b1"

Risultato del comando 'ip a'

Installiamo netplan:

$ sudo apt install netplan.io
[sudo] password di gandalfrank:

Adesso creiamo il file di configurazione per abilitare la scheda WiFi.
Entriamo nella cartella /etc/netplan:

$ cd /etc/netplan

Quindi creiamo il file 1-network-manager-all.yaml usando l'editor nano:

$ sudo nano 1-network-manager-all.yaml
[sudo] password di gandalfrank:

Creazione file '1-network-manager-all.yaml'

Rispettare gli spazi e le tabulazioni come nella figura precedente. Ovviamente al posto di "wlp3s0b1" va scritto il nome della propria scheda wifi, invece di "la mia rete wifi" va inserito il nome della propria e, ovviamente, al posto di "la mia password" va scritta la password di accesso alla linea.
Salvare il file con CTRL + O, confermare premendo s e uscire con CTRL + X.

Impartire questo comando per rendere effettivo il file appena creato; inoltre viene verificato se è ben scritto, all'occorrenza viene segnalato un errore:

$ sudo netplan --debug apply
[sudo] password di gandalfrank:

Installiamo un browser per provare se la rete WiFi è stata configurata correttamente. Io ho scelto Chromium:

$ sudo apt install chromium
[sudo] password di gandalfrank:

Riavviamo il pc, scolleghiamo il cavo ethernet, attendiamo qualche minuto e poi apriamo Chromium. Se tutto è andato bene dovrebbe apparire la pagina principale impostata nel browser e possiamo iniziare a navigare.

Installazione programmi

E' arrivato il momento di installare qualche programma che ci tornerà utile:
il primo è un file manager (thunar) che, sebbene sia possibile usare la console per ogni operazione sul filesystem, in molte occasioni è assai più pratico usare un'applicazione grafica rispetto ad una testuale.

$ sudo apt install thunar
[sudo] password di gandalfrank:

Il secondo è un editor di testo (Mousepad) con il quale possiamo creare script e modificare i file di configuirazione utilizzando opzioni che l'editor messo a disposizione dal terminale non offre.

$ sudo apt install mousepad
[sudo] password di gandalfrank:

Il terzo è un visualizzatore di immagini (feh) che consente anche di impostare un'immagine per lo sfondo del desktop.

$ sudo apt install feh
[sudo] password di gandalfrank:

Segue il server virtuale (Apache2) che consente di realizzare e testare offline pagine web scritte in PHP.

$ sudo apt install apache2
[sudo] password di gandalfrank:

E' il turno di (PHP), linguaggio di programmazione per il web.

$ sudo apt install php libapache2-mod-php php-mysql
[sudo] password di gandalfrank:

Per ultimo un monitor di sistema. Inizialmente avevo rivolto la mia attenzione a Conky, un applicativo flessibile e altamente configurabile, ma una volta avviato resta costantemente sul desktop e, come ho già scritto, non voglio elementi permanenti sulla scrivania, pertanto ho pensato di creare uno script Python, "InfoPanel", che mi consentisse di avere accesso a quelle poche informazioni di cui abbisogno: data e ora, stato della carica della batteria, nome SSID, scheda WiFi e scheda Ehernet con i rispettivi IP, stato Bluetooth, stato del Server Apache2 e infine controllo della presenza di aggiornamenti disponibili.

Download InfoPanel ( 48 KB )

Il programma per funzionare correttamente richiede che:

  • La cartella che lo contiene deve essere salvata nella propria 'home' e NON deve essere rinominata.
  • Il contenuto della cartella NON deve essere in alcun modo cambiato, eliminato o spostato.
  • E' necessario che l'utente abbia la facoltà di usare 'sudo' senza inserire la password ogni volta (impostazione già sistemata in precedenza).
  • Il programma usa il font "Digital Display" per la rappresentazione dell'orologio; tale font, con la sua cartella, deve essere copiato in /usr/share/fonts/opentype.

Configurazione

E' necessario apportare qualche modifica ai file di configurazione per adattare OpenBox alle nostre esigenze.
Per prima cosa creiamo, se non esiste ancora, la cartella /home/nomeutente/.config/openbox:

$ cd ~

seguito da:

$ cd .config

se ancora non esiste creare la cartella:

$ mkdir openbox

entriamo nella directory:

$ cd openbox

copiamo qui tutti i file contenuti nella cartella /etc/xdg/openbox:

$ sudo cp /etc/xdg/openbox/* .

Notare il "." alla fine del comando che indica, come destinazione, la cartella in cui ci troviamo.

feh

Torniamo nella nostra home.

$ cd ~

Creiamo la cartella Sfondi e inseriamoci qualche immagine da mettere in background.

$ mkdir Sfondi

Scegliamo un'immagine che ci piace e usiamo feh per impostarla come sfondo (Manuale Online: feh):

$ feh --bg-scale ~/Sfondi/Onda.jpg

Lo sfondo adesso mostra l'immagine scelta, Onda.jpg, ma tale impostazione è valida fino allo spegnimento del pc, poiché alla prossima accensione verrà ripristinato lo sfondo precedente. Per rendere permanente la nuova configurazione è necessario modificare il file ~/.config/openbox/autostart :

$ sudo nano ~/.config/openbox/autostart
[sudo] password di gandalfrank:

file autostart

Aggiungiamo, alla fine del file, due comandi, il primo per caricare l'immagine di sfondo ogni volta che OpenBox si avvia, e il secondo per fare partire InfoPanel.
Notate la "&" a fine di ciascuna linea; deve essere sempre presente altrimenti un eventuale comando su una riga successiva, non viene letto né eseguito.

file autostart modificato

Salviamo il file con CTRL + O e usciamo con CTRL + X.
Riavviamo il sistema e potremo vedere che lo sfondo adesso è perfettamente impostato e InfoPanel che fa bella mostra di sé al centro del desktop.

Sfondo impostato e InfoPanel attivo

Scheda audio

Per configurare la scheda audio bisogna installare due programmi:pavucontrol e smplayer.

$ sudo apt install pavucontrol smplayer

Spegnere il pc completamente e riaccenderlo, quindi avviare smplayer per ascoltare una qualunque canzone e pavucontrol per regolarne il volume.

pavucontrol

Programmi

A me restano solo pochi altri programmi da insrtallare per avere un sistema completo e soddisfacente per l'uso che ne faccio.

  • Evince
  • GIMP
  • Idle Python
  • Inkscape
  • OpenShot Video Editor

Quindi non resta che installarli.

$ sudo apt install evince gimp idle inkscape openshot-qt -y

Script di Chiusura OpenBox

Se avete curiosato fra i vari menù, avrete appurato che per uscire dal sistema, esistono soltanto le voci Menù--Exit, che consente di effettuare il logout e Menù--Debian--Applicazioni--Sistema--Amministrazione--Logout (obsession) che permette ogni possibile opzione di chiusura (arresto, riavvio, sospensione, ibernazione, cambio utente e chiusura sessione) ma entrambe sono scomode, la prima perché offre una sola scelta e la seconda perché è troppo annidata fra i menù per raggiungerla con facilità.

Menu--Exit

Menu--Logout (obsession)

Ho realizzato un piccolo script in Python, 'Shrelo', che sostituisce i due sistemi sopra menzionati per uscire da OpenBox.
Il nome non è altro che la somma delle prime due lettere di ciascuno dei tre comandi principali: SHutdown, REstart e LOgout, SHRELO appunto. Funziona solo su OpenBox ma può essere facilmente adattato ad ogni distribuzione.

Il file, che deve essere decompresso, contiene una cartella "Shrelo" all'interno della quale vi è il programma "Shrelo.py" e una directory nominata "Immagini" in cui si trovano i disegni dei singoli tasti che assolvono al compito di Chiusura, Riavvio, Sospensione... e qualche altro tema grafico per i pulsanti del programma.

Come per InfoPanel, anche Shrelo per funzionare correttamente richiede che:

  • La cartella che lo contiene deve essere salvata nella propria 'home" e NON deve essere rinominata.
  • Il contenuto della cartella NON deve essere in alcun modo cambiato, eliminato o spostato.
  • Per cambiare le immagini di default dell'applicazioone si deve semplicemente sostituirle con alltrettanti file di tipo .PNG e rigorosamente con gli stessi nomi degli originali.
  • Anche Shrelo richiede la rivisitazione dei permessi di accesso ai file così come impostato per InfoPanel, ma cosiderato che le variazioni sono già state effettuate non serve fare altro.

L'utilizzo dei pulsanti segue questa lista (da sinistra verso destra): Spegnimento, Riavvio, Sospensione, Ibernazione, Chiusura sessione e Annulla

Download Shrelo ( 513 KB )

Shrelo installato

Menù

Avrete notato che ogni volta che viene installato un programma, il suo nome viene aggiunto al menù di avvio di OpenBox. Personalmente non amo il modo in cui le singole voci sono organizzate, io preferisco avere un unico grande elenco, in ordine alfabetico, piuttosto che la consueta suddivisione in categorie; inoltre mancano i programmi preferiti, quelli cioè che vengono usati più spesso, come il browser, il terminale, l'editor di testo e il file manager (almeno per me è così).

Riscriveremo il file ~/.config/openbox/menu.xml in modo diverso oragnizzando i programmi in un'unica lista ordinata alfabeticamente, e vi sarà pure la sezione dedicata ai programmi preferiti.

ATTENZIONE! il menù così strutturato non rileva eventuali nuove applicazioni installatate che dovranno essere aggiunte manualmente all'elenco.

Adesso modifichiamo il Menù cosi come dichiarato sopra. Il file ~/.config/openbox/menu.xml deve essere riscritto esattamente come appare nel listato seguente.

<?xml version="1.0" encoding="UTF-8"?>

<openbox_menu xmlns="http://openbox.org/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://openbox.org/
  file:///usr/share/openbox/menu.xsd">

<menu id="root-menu" label="Openbox 3">
  <item label="Terminale">
    <action name="Execute">
      <execute>lxterminal</execute>
    </action>
  </item>
  <item label="File Manager">
    <action name="Execute">
      <execute>thunar</execute>
    </action>
  </item>
  <item label="Web browser">
    <action name="Execute">
      <execute>chromium</execute>
    </action>
  </item>
  <item label="Editor di Testo">
    <action name="Execute">
      <execute>mousepad</execute>
    </action>
  </item>
  <separator />
  <!-- This requires the presence of the 'obamenu' package to work -->
  <menu id="/Debian" />
  <separator />
  <menu id="programmi" label="Programmi">
    <item label="Chromium">
      <action name="Execute">
        <execute>chromium</execute>
      </action>
    </item>
    <item label="Editor di Testo">
      <action name="Execute">
        <execute>mousepad</execute>
      </action>
    </item>
    <item label="Evince">
      <action name="Execute">
        <execute>evince</execute>
      </action>
    </item>
    <item label="GIMP">
      <action name="Execute">
        <execute>gimp</execute>
      </action>
    </item>
    <item label="IDLE - Python 3.9">
      <action name="Execute">
        <execute>idle</execute>
      </action>
    </item>
    <item label="InfoPanel">
      <action name="Execute">
        <execute>python3 ~/Infopanel/InfoPanel.py</execute>
      </action>
    </item>
    <item label="Inkscape">
      <action name="Execute">
        <execute>inkscape</execute>
      </action>
    </item>    
    <item label="LXTerminal">
      <action name="Execute">
        <execute>lxterminal</execute>
      </action>
    </item>
    <item label="OpenShot Video Editor">
      <action name="Execute">
        <execute>openshot-qt</execute>
      </action>
    </item>
    <item label="Regolazione del volume">
      <action name="Execute">
        <execute>pavucontrol</execute>
      </action>
    </item>
    <item label="SMPlayer">
      <action name="Execute">
        <execute>smplayer</execute>
      </action>
    </item>
    <item label="Stampante">
      <action name="Execute">
        <execute>system-config-printer</execute>
      </action>
    </item>
    <item label="Thunar">
      <action name="Execute">
        <execute>thunar</execute>
      </action>
    </item>
    <item label="Unità rimovibili e supporti">
      <action name="Execute">
        <execute>thunar-volman -c</execute>
      </action>
    </item>
    <item label="UXTerm">
      <action name="Execute">
        <execute>uxterm</execute>
      </action>
    </item>
    <item label="XTerm">
      <action name="Execute">
        <execute>xterm</execute>
      </action>
    </item>
  </menu>
  <separator />
  <item label="ObConf">
    <action name="Execute">
        <execute>obconf</execute>
    </action>
  </item>
  <item label="Reconfigure">
    <action name="Reconfigure" />
  </item>
  <item label="Restart">
    <action name="Restart" />
  </item>
  <separator />
  <item label="Chiudere OpenBox">
    <action name="Execute">
      <execute>python3 ~/Shrelo/Shrelo.py</execute>
    </action>
  </item>
</menu>

</openbox_menu>

Salvate i cambiamenti e per renderli effettivi, poi cliccate con il mouse sulla voce "Reconfigure" del menù di avvio.

Menu re-impostato

Soluzioni alternative

Qualora gli script da me realizzati non soddisfano le vostre esigenze potete provare queste soluzioni.

Monitor di sistema:

Come già anticipato, prima di realizzare lo script 'InfoPanel', avevo rivolto la mia attenzione a Conky. Ecco dunque le istruzioni su come fare ad installarlo e il codice per cambiarne l'aspetto.

$ sudo apt install conky
[sudo] password di gandalfrank:

Il file autostart deve essere modificato in questo modo:

$ sudo nano ~/.config/openbox/autostart
[sudo] password di gandalfrank:

Autostart_Conky

Controllare se il file .conkyrc è già presente nella nostra home:

$ ls -al ~

Se non esiste va creato copiando il file /etc/conky/conky.conf nella nostra home e rinominandolo .conkyrc

$ sudo cp /etc/conky/conky.conf ~/.conkyrc
[sudo] password di gandalfrank:

Per conoscere i vari comandi di configurazione del programma vi rimando al (Sito Ufficiale) dove si possono trovare tutte le informazioni necessarie.
Per ciò che mi riguarda, ho già provveduto a modificare il file di cui sopra, impostazioni che non starò qui a spiegare, pertanto vi allego lo script da poter consultare e/o modificare.

conky.config = {
    alignment = 'top_right',
    background = false,
    border_width = 1,
    cpu_avg_samples = 2,
    default_color = '00ffff',
    default_outline_color = '999999',
    default_shade_color = 'white',
    double_buffer = true,
    draw_borders = true,
    draw_graph_borders = true,
    draw_outline = false,
    draw_shades = false,
    extra_newline = false,
    font = 'Courier:size=10',
    gap_x = 30,
    gap_y = 30,
    minimum_height = 5,
    minimum_width = 5,
    net_avg_samples = 2,
    no_buffers = true,
    out_to_console = false,
    out_to_ncurses = false,
    out_to_stderr = false,
    out_to_x = true,
    own_window = true,
    own_window_class = 'Conky',
    own_window_type = 'desktop',
    show_graph_range = false,
    show_graph_scale = false,
    stippled_borders = 0,
    update_interval = 1.0,
    uppercase = false,
    use_spacer = 'none',
    use_xft = true,
}

conky.text = [[
${font Courier:size=32}${color ffffff}${alignc}${voffset 10}${time %k:%M}${font}
${font Courier:size=10}${color}${alignc}${voffset 10}${time %A %e %B %Y}${font}

${font Arial:size=10}${color ff8800}${offset 5}C A L E N D A R ${hr 2}${font}${color}
${exec cal}${font}

${font Arial:size=10}${color ff8800}${offset 5}S Y S T E M ${hr 2}${font}
${color ffffff}${offset 15}Hostname: ${color}${alignr}${nodename}
${color ffffff}${offset 15}OS: ${color}${alignr}${exec hostnamectl | grep 'System'| cut -c21-39}
${color ffffff}${offset 15}Kernel: ${color}${alignr}${kernel}
${color ffffff}${offset 15}Architecture: ${alignr}${color}${exec hostnamectl | grep 'Architecture'| cut -c21-26}
${color ffffff}${offset 15}Uptime: ${color}${alignr}${uptime}

${font Arial:size=10}${color ff8800}${offset 5}P E R F O R M A N C E ${hr 2}${font}${color}
${color ffffff}${offset 15}Frequency: ${color}${alignr}${freq} MHz${color}
${color ffffff}${offset 15}RAM: ${color}${alignr}${mem}/${memmax}${color}
${color ffffff}${offset 15}Swap: ${color}${swapperc}%${alignr}${color ffff00}${swapbar 10,120}${color}
${color ffffff}${offset 15}CPU: ${color}${cpu}%${alignr}${color ff0000}${cpubar 10,120}${color}
${color ffffff}${offset 15}Battery: ${color}${battery_percent}% ${alignr}${color 00ff00}${battery_bar 10, 120 }

${font Arial:size=10}${color ff8800}${offset 5}N E T W O R K ${hr 2}${font}
#
${color ffffff}${offset 15}WiFi: ${alignr}${color}${if_existing /sys/class/net/wlp3s0b1/operstate up}${exec sudo iw dev | grep 'ssid '| cut -c8-19}${else}${alignr}NESSUNA${endif}${font}

${color ffffff}${offset 15}Ethernet: ${alignr}${color}${if_existing /sys/class/net/enp2s0f0/operstate up}CONNESSO${else}${alignr}DISCONNESSO${endif}${font}

${color ffffff}${offset 15}Bluetooth: ${alignr}${color}${if_running bluetoothd}ATTIVO${else}INATTIVO${endif}${font}

]]

Il file deve essere modificato con i privilegi di amministratore (usare "sudo"). Generalmente al salvataggio del file, conky si aggiorna mostrando le nuove impostazioni, se questo non dovesse accadere riavviare il sistema.

Nello script per conky ho usato il comando cal per mostrare il calendario del mese corrente, ma tale comando non è presente nel sistema e va installato.

$ sudo apt install ncal
[sudo] password di gandalfrank:

Inoltre è presente una linea con un comando che, per eseguire il quale, è necessario utilizzare sudo: ${exec sudo iw dev | grep 'ssid '| cut -c8-19}, questa è un'altra situazione nella quale le modifiche al file /etc/sudoers effettuata in precedenza si è rivelata essenziale.

NOTA: nel file di configurazione di conky, vi sono3 linee che contengono istruzioni simili a questa: ${exec hostnamectl | grep 'Architecture'| cut -c21-26}, il cui significato è il seguente:

- exec esegue il comando del terminale hostnamectl il quale produrrebbe un output simile a questo:

outupt: hostnamectl

- grep effettua una ricerca sull'intero output per trovare la parola fra apici 'Architecture' e cut -c21-26 ne estrae i caratteri da 21 a 26 compresi per recuperare la stringa "x86-64" e mostrarla su conky.

Questo il risultato:

conky versione 1 installato e configurato

Dopo qualche settimana di utilizzo, mi sono reso conto che la configurazione che ho scelto per Conky, per quanto mi piaccia, non mi soddisfa, perciò ho pensato di cambiare completamente. Ecco il nuovo codice:

conky.config = {
    alignment = 'top_right',
    background = false,
    border_width = 1,
    cpu_avg_samples = 2,
    default_color = '000000',
    double_buffer = true,
    draw_shades = false,
    extra_newline = false,
    font = 'Courier:size=10',
    gap_x = 5,
    gap_y = 5,
    minimum_height = 50,
    minimum_width = 550,
    maximum_width = 550;
    net_avg_samples = 2,
    no_buffers = true,
    out_to_console = false,
    out_to_ncurses = false,
    out_to_stderr = false,
    out_to_x = true,
    own_window = false,
    own_window_class = 'Conky',
    own_window_type = 'dock',
    update_interval = 1.0,
    uppercase = false,
    use_spacer = 'none',
    use_xft = true,
}

conky.text = [[
${if_existing /sys/class/net/enp2s0f0/operstate up}${image ~/.config/conky//Ethernet_ON.png -p 5,5}${else}${image ~/.config/conky//Ethernet_OFF.png -p 5,5}${endif}
${if_existing /sys/class/net/wlp3s0b1/operstate up}${image ~/.config/conky//WiFi_ON.png -p 75,5}${else}${image ~/.config/conky//WiFi_OFF.png -p 75,5}${endif}
${if_running bluetoothd}${image ~/.config/conky/Bluetooth_ON.png -p 145,5}${else}${image ~/.config/conky//Bluetooth_OFF.png -p 145,5}${endif}
${if_running apache2}${image ~/.config/conky//Server_ON.png -p 215,5}${else}${image ~/.config/conky//Server_OFF.png -p 215,5}${endif}
${image ~/.config/conky//Batteria.png -p 285,5}${offset 285}${color 8f5902}${battery_bar 5, 50 }
${offset 350}${voffset -68}${font 7LED :size=32}${color}${time %k:%M}
${offset 480}${voffset -74 }${font Courier:size=10}${color}${time %a}
${offset 480}${font Courier:size=10}${color}${time %e %b}
${offset 480}${font Courier:size=10}${color}${time %Y}
]]

Questo il risultato.

conky versione 2 installato e configurato

e queste le icone usate.

Le icone usate nel nuovo pannello di conky

Il font usato è 7 LED

Il pannello mi deve servire per sapere se le connessioni Ethernet, WiFi e Bluetooth sono o meno attive; se il Server Apache del pacchetto LAMP è in funzione oppure no, visualizzare lo stato della carica della batteria e infine mostrare ora e data odierna.

Menù di Uscita

Invece di utilizzare Shrelo possiamo arrangiarci con le soluzioni proposte da OpenBox o adattarne qualcuna di diversa.

Riscriveremo il file ~/.config/openbox/menu.xml in 3 modi diversi con 3 tipologie di menù di chiusura distinte, così da poter scegliere quella che più ci piace.

ATTENZIONE! il menù così strutturato non rileva eventuali nuove applicazioni installatate che dovranno essere aggiunte manualmente all'elenco.

Metodo 1

Menù di chiusura con Obsession-logout

<?xml version="1.0" encoding="UTF-8"?>
<openbox_menu xmlns="http://openbox.org/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://openbox.org/
  file:///usr/share/openbox/menu.xsd">

<menu id="root-menu" label="Openbox 3">
  <item label="Terminale">
    <action name="Execute">
      <execute>lxterminal</execute>
    </action>
  </item>
  <item label="File Manager">
    <action name="Execute">
      <execute>thunar</execute>
    </action>
  </item>
  <item label="Web browser">
    <action name="Execute">
      <execute>chromium</execute>
    </action>
  </item>
  <item label="Editor di Testo">
    <action name="Execute">
      <execute>mousepad</execute>
    </action>
  </item>
  <separator />
  <!-- This requires the presence of the 'obamenu' package to work -->
  <menu id="/Debian" />
  <separator />
  <menu id="programmi" label="Programmi">
    <item label="Chromium">
      <action name="Execute">
        <execute>chromium</execute>
      </action>
    </item>
    <item label="Conky">
      <action name="Execute">
        <execute>conky</execute>
      </action>
    </item>
    <item label="Editor di Testo">
      <action name="Execute">
        <execute>mousepad</execute>
      </action>
    </item>
    <item label="Evince">
      <action name="Execute">
        <execute>evince</execute>
      </action>
    </item>
    <item label="GIMP">
      <action name="Execute">
        <execute>gimp</execute>
      </action>
    </item>
    <item label="IDLE - Python 3.9">
      <action name="Execute">
        <execute>idle</execute>
      </action>
    </item>
    <item label="Inkscape">
      <action name="Execute">
        <execute>inkscape</execute>
      </action>
    </item>    
    <item label="LXTerminal">
      <action name="Execute">
        <execute>lxterminal</execute>
      </action>
    </item>
    <item label="OpenShot Video Editor">
      <action name="Execute">
        <execute>openshot-qt</execute>
      </action>
    </item>
    <item label="Regolazione del volume">
      <action name="Execute">
        <execute>pavucontrol</execute>
      </action>
    </item>
    <item label="SMPlayer">
      <action name="Execute">
        <execute>smplayer</execute>
      </action>
    </item>
    <item label="Stampante">
      <action name="Execute">
        <execute>system-config-printer</execute>
      </action>
    </item>
    <item label="Thunar">
      <action name="Execute">
        <execute>thunar</execute>
      </action>
    </item>
    <item label="Unità rimovibili e supporti">
      <action name="Execute">
        <execute>thunar-volman -c</execute>
      </action>
    </item>
    <item label="UXTerm">
      <action name="Execute">
        <execute>uxterm</execute>
      </action>
    </item>
    <item label="XTerm">
      <action name="Execute">
        <execute>xterm</execute>
      </action>
    </item>
  </menu>
  <separator />
  <item label="ObConf">
    <action name="Execute">
        <execute>obconf</execute>
    </action>
  </item>
  <item label="Reconfigure">
    <action name="Reconfigure" />
  </item>
  <item label="Restart">
    <action name="Restart" />
  </item>
  <separator />
  <item label="Chiudere OpenBox">
    <action name="Execute">
      <execute>obsession-logout</execute>
    </action>
  </item>
</menu>

</openbox_menu>

Salvate i cambiamenti e per renderli effettivi cliccate con il mouse sulla voce "Reconfigure" del menù di avvio.

Obsession-logout

Metodo 2

Uso di un menù creato appositamente.
Sostituire le righe rosse del codice precedente con le seguenti:

  <menu id="exit" label="Chiudi OpenBox" >
    <item label="Logout">
      <action name="Exit" />
    </item>
    <item label="Suspend">
      <action name="Execute">
        <execute>systemctl suspend</execute>
      </action>
    </item>
    <item label="Hibernate">
      <action name="Execute">
        <execute>systemctl hibernate</execute>
      </action>
    </item>
    <item label="Reboot">
      <action name="Execute">
        <execute>systemctl reboot</execute>
      </action>
    </item>
    <item label="Shutdown">
      <action name="Execute">
        <execute>systemctl poweroff</execute>
      </action>
    </item>
  </menu>

Come per il metodo precedente, salvate le modifiche e rendetele effettive cliccando con il mouse sulla voce "Reconfigure" del menù di avvio.

Menu di chiusura ad hoc

Metodo 3

Uso della finestra di dialogo fornita da "xmessage" e di uno script: "oblogout".

Per creare lo script apriamo Mousepad e inseriamo le seguenti linee:

#!/bin/bash

xmessage "Chiudere OpenBox ?                                   " -center -title "Messaggio" -default "Cancel" -buttons "Cancel":1,"Logout":2,"Suspend":3,"Hibernate":4,"Reboot":5,"Shutdown":6 >/dev/null

case $? in
1)
echo "Exit" ;;
2)
openbox --exit ;;
3)
systemctl suspend ;;
4)
systemctl hibernate ;;
5)
systemctl reboot ;;
6)
systemctl poweroff ;;
esac

Salviamo il file con il nome oblogout nella cartella ~/.config/openbox .
Adesso rendiamolo eseguibile:

chmod a+x ~/.config/openbox/oblogout

Nel file ~/.config/openbox/menu.xml sostituiamo le righe colorate di rosso presenti nel Metodo 1 con le seguenti:

  <item label="Chiudere OpenBox">
    <action name="Execute">
      <execute>~/.config/openbox/./oblogout</execute>
    </action>
  </item>

Non dimenticate di salvare i cambiamenti e renderli effettivi cliccando con il mouse sulla voce "Reconfigure" del menù di avvio.

Finestra di dialogo xmessage

OPPURE al posto di xmessage possiamo installare gmessage, sicuramente più gradevole graficamente.

>sudo apt install gmessage

Lo script oblogout va riscritto in questo modo:

#!/bin/bash

gmessage "Chiudere OpenBox ?" -center -title "Messaggio" -font "Sans bold 14" -default "Cancel" -buttons "_Cancel":1,"_Logout":2,"_Suspend":3,"_Hibernate":4,"_Reboot":5,"_Shutdown":6 >/dev/null

case $? in
1)
echo "Exit" ;;
2)
openbox --exit ;;
3)
systemctl suspend ;;
4)
systemctl hibernate ;;
5)
systemctl reboot ;;
6)
systemctl poweroff ;;
esac

Salviamo il file e usciamo dall'editor di testo.

Finestra di dialogo gmessage

Con questa ultima modifica termina questo articolo sull'installazione di OpenBox su Debian minimale; volendo essere precisi, sarebbe necessaio installare altre applicazioni, come un pacchetto per l'ufffcio e un CAD, impostare una stampante, gestire i volumi montati, un salvaschermo, fare funzionare quei tasti speciali che sono propri del Mac Book Pro (regolazione del volume dell'audio, della luminosità dello schermo e della tastiera, il tasto eject...), ma per quello che mi riguarda sono soddisfatto del risultato e non ho intenzione di aggiungere altro pertanto concludo quà questo tutorial.