
Le ultime versioni di Raspberry OS hanno reso l’esecuzione automatica al boot di un’applicazione, specie se grafica, più impegnativa.
“Squadra (o macchina) che vince non si cambia”. Questo adagio, diffuso in ambito sportivo, risulta quanto mai attuale anche nel mondo IT. Purtroppo non sempre è possibile garantire la compatibilità verso il basso, e l’automatismo li aggiornamenti ha portato molti sviluppatori a trascurare questa regola basilare.
Raspberry OS non fa eccezione. Le nuove versioni del sistema, ottimizzate per il PI 5 o 500, sono state profondamente manipolate per consentire ottimizzazioni di sistema. Dal momento che tali upgrade mi hanno provocato oltre tre ore di mal di capo per cercare di capire cosa non andasse, ho pensato di condividere con voi le mie traversie, onde evitare che altri utenti possano trovarsi in difficoltà.
Il problema
Mi è stato chiesto di creare un sistema basato su Raspberry OS che al boot procedesse al caricamento automatico di una pagina web, eseguendone il refresh ogni tot minuti.
Un progetto semplicissimo, che utilizza il lancio del browser in kiosk mode. Qualcosa del genere:
|
1 |
chromium-browser --kiosk --start-fullscreen http://tuo-indirizzo-web.com & |
Ma quale è stato il mio stupore quando noto che il sistema non ha un file rc.local predefinito nella directory /etc…
“Niente, di grave”, mi dico, “creiamolo da zero.” Touch rc.local, inseriamo il comando da eseguire, chmod +x, reboot… e NULLA.
Provo ad aggiungere qualche linea di echo per il logging, e noto che il file viene effettivamente eseguito, ma il comando non sortisce l’effetto desiderato.
Girando per Internet scopro che il nuovo Raspberry OS tenderà ad abbandonare la procedura di start attraverso rc.local, in favore di altre procedure più complesse, tipicamente la creaione e lo start di servizi da /etc/systemd/system. Ma anche in questo caso sono sortye difficoltà: il servizio è descritto in maniera sintsatticamente corretta, viene correttamente abilitato (enable) e lanciato (start), maquando viene richiesto uno status, viene riportato un messaggio di errore legato alla configurazione del server X-Windows.
Malefici aggiornamenti
Le modifiche di Raspberry OS rispetto alle versioni precedenti sono sostanzialmente due, strettamente correlate:
- Modifiche alla procedura di boot
- Modifiche al server grafico Weyland
Come abbiamo visto, l’uso di rc.local per lanciare una pagina web non sortisce effetto alcuno. Ho quindi provato a creare un service apposito, abilitarlo e farlo eseguire in automatico, ma con lo stersso risultato finale: nulla. Ho anche pensato di usare un cronjob, ma conscio dei diversi problemi di compatibilità di Raspberry OS con altre distribuzioni (tipo Ubuntu) riguardo a cron, ho cercato qualcos’altro.
Come anticipato, dopo 40 anni di onesto lavoro, X-Window server di Linux è stato abbandonato in favore di un sistema più leggero e performante, la tecnologia Weyland.
La tecnologia Weyland
Wayland offre molti vantaggi rispetto a X, in particolare in termini di prestazioni. In X, due applicazioni distinte contribuiscono a disegnare una finestra:
- il server di visualizzazione crea finestre sullo schermo e fornisce alle applicazioni uno spazio in cui disegnare il loro contenuto;
- il gestore delle finestre posiziona le finestre l’una rispetto all’altra e le decora con barre del titolo e cornici.
Wayland combina queste due funzioni in un’unica applicazione chiamata compositore. Le applicazioni in esecuzione su un sistema Wayland devono comunicare con un solo elemento, invece di due, per visualizzare una finestra. Come si può immaginare, questo è un modo molto più efficiente per disegnare le finestre delle applicazioni.
Wayland offre anche un vantaggio in termini di sicurezza. In X, tutte le applicazioni comunicavano avanti e indietro con il server di visualizzazione; di conseguenza, qualsiasi applicazione poteva osservare qualsiasi altra applicazione. Wayland isola le applicazioni a livello di compositore, quindi le applicazioni non possono osservarsi a vicenda.
Il sistema è backward compatible, e può (anzi, dovrebbe) essere aggiornato sui modelli PI 3 e 4. Non risultano rallentamenti sui vecchi modelli con la nuova piattaforma.
La soluzione
Smanettando per cercare informazioni sulla nuova tecnologia Weyland, mi imbatto in un articolo che sembra fare al caso mio:
Per avviare automaticamente un browser al boot di Raspberry OS, si può creare un file avviatore nella cartella ~/.config/autostart. Per Chrome, ad esempio, il comando da inserire è chromium-browser.
Metodo tramite file avviatore:
- Crea il file: Crea un nuovo file nella cartella ~/.config/autostart. Il nome del file dovrebbe terminare con .desktop (es. firefox.desktop).
- Aggiungi il contenuto: Inserisci il seguente contenuto nel file, sostituendo <percorso_del_browser> con il percorso effettivo dell’eseguibile del browser, se necessario:
|
1 2 3 4 5 |
[Desktop Entry] Type=Application Name=Kiosk Mode Exec=chromium-browser --kiosk <URL-da-lanciare-in-automatico> Terminal=false |
Se necessario, rendi eseguibile il file con il comando chmod +x ~/.config/autostart/firefox.desktop.
Dopo aver seguito uno di questi metodi, il browser scelto verrà avviato automaticamente in modalità fullscreen kiosk all’avvio di Ubuntu.
A questo punto, se stai visualizzando una pagina i cui contenuti potrebbero varfiare nel tempo, potrai caricare (se occorre) una estensione per chromium (o per il browser scelto) che esegua il reload automatico della pagina. Io ho utilizzato Autorefresh.
In questo articolo abbiamo visto come lanciare una pagina webal boot di Raspberry OS dotato della nuova tecnologia Weyland. Fateci sapere sel’arrticolo vi è stato utile.
Iscriviti ai nostri gruppi Telegram
Link utili
- Arduino UNO R3
- Elegoo UNO R3
- Arduino Starter Kit per principianti
- Elegoo Advanced Starter Kit
- Arduino Nano
- Raspberry PI 5
- Raspberry PI 400
- Raspberry PI Pico
- Programmiamo il Pico