Come lanciare ad ogni avvio Chromium Browser su Raspberry pi
Approfitto di un altro week end rinchiuso in casa per provare qualcosa di nuovo. Questa sera sarei dovuto uscire con 4 conigliette della Playboy Mansion, ma ho preferito restare a casa per voi (e anche perché sono rimasto bloccato con la schiena).
Ma andiamo al sodo.
Mi è stato commissionato di realizzare uno schermo che visualizzi la produzione di un impianto fotovoltaico installato su un edificio scolastico. Per far questo basta collegarsi al server web dove gli inverter fotovoltaici comunicano i dati salienti (produzione energia giornaliera/mensile/annuale/totale, CO2 risparmiata, alberi salvati, correnti e tensione in ballo ecc…). Ovviamente per rendere la cosa più carina e farlo assomigliare a uno di quei display che si vedono in giro (nei supermercati, nelle fabbriche…) il browser dovrebbe essere messo in modalità “fullscreen” (per darvi un idea, è quando pigiate il tasto F11 sulla tastiera e il browser va a piena pagina).
Sono partito facendomi un idea da questo Blogger che mi piace molto: https://www.giannifavilli.it/blog/raspberry-eseguire-browser-avvio/. Lui sfrutta l’idea di simulare la pressione del tasto F11 tramite un pacchetto che si chiama xautomation.
Poi però mi sono perso nel web e sono arrivato alla conclusione di far fare il lavoro sporco direttamente a Chromium. Chromium è il progetto open-source che sta alla base di Google Chrome, e a parte qualche codec in più che usa Chrome (e che non sono open source), Chromium ha gli stessi comandi da linea di comando (CLI).
In questo sito ho trovato tutti i comandi possibili che si possono avere per il browser Chromium. Alcuni sono per “power users”, ma ho trovato 2 che fanno al caso mio:
- –start-fullscreen
- –noerrdialogs ⊗
Se da terminale lanciamo il comando chromium-browser (che serve a lanciare il browser) seguito dal comando –start-fullscreen e dal sito web che volgiamo aprire, avremo una pagina web a pieno schermo.
Il secondo comando viene dato perché ipotizzo già che per qualche motivo (mancanza di energia elettrica, intervento di interruttore di protezione, chiusura della scuola per vacanza ecc…) il raspberry pi verrà spento in modo incorretto, e al riavvio comparirebbe il pop up che mostra il pulsante per ripristinare le pagine web chiuse male precedentemente. E siccome questo pop up scomparirebbe solo premendo sulla “x” con il mouse, e in realtà non saranno collegati nessun mouse o tastiera, prevengo questa ipotesi disattivandolo in anticipo.
Per farla breve, ho creato un file con suffiso .sh (quindi bash script) che per scarsa fantasia ho chiamato fullscreen_browser.sh:
#!/bin/sh chromium-browser --noerrrdialogs --start-fullscreen https://www.renovatiostudio.eu/ --display:0 &
La prima riga (#!/bin/sh) serve a identificare lo script come script di shell, mentre la “&” commerciale alla fine, a far si che lo script resti aperto in remoto, evitando così la chiusura non voluta del browser. Il resto mi pare abbastanza chiaro.
Ora devo solo pensare a far partire questo script ad ogni avvio di raspberry pi. So che a volte è un po ostico capire come farlo, per cui cercherò di spiegarlo nel modo più semplice che posso.
Avevo pensato di far avviare lo script dentro il file rc.local , che è un file che normalmente viene utilizzato dagli amministratori di sistema, e permette di fare operazioni come appunto avviare un applicazione. Mi sono poi accorto però che funziona prima che il sistema abbia caricato l’interfaccia grafica, rendendo vano l’avvio del browser .
Cosi ho optato per sfruttare un altra delle almeno 5 possibili scelte per avviare un programma all’avvio del sistema. Qui ho avuto qualche piccolo intoppo, in quanto in Raspbian 9 bastava aggiungere al file situato in /home/pi/.config/lxsession/LXDE-pi/autostart e aggiungere “@”seguito dal percorso del file script da me creato, in Raspbian Buster questo file non si trova più li, ma si trova qui: /etc/xdg/lxsession/LXDE-pi/autostart.
Quindi con il comando sudo nano /etc/xdg/lxsession/LXDE-pi/autostart lanciato dal terminale, si apre il file dove sono contenuti tutti i programmi in avvio automatico che necessitano di interfaccia grafica, e aggiungendo la riga ” @/home/pi/fullscreen_browser.sh ” abilito anche il mio script all’avvio automatico.
*EDIT
Mi sono accorto che il comando –noerrdialogs funziona con la stessa utilità di una moneta da 3 euro… perciò ho ripiegato su un metodo non molto elegante ma sicuramente funzionale. Seguendo la guida del blog http://martinpennock.com/blog/disable-restore-session-bubble-chromium-raspberry-pi/, sono risalito al file che si occupa di registrare la corretta chiusura di Chromium, che si trova nel percorso /home/pi/.config/chromium/Default, e modificando i 2 valori chiave che mi servono (“exit_type”:”Normal”,”exited_cleanly”:”true”) ho copiato su un file nuovo file chiamato Preferences, per poi copiare ad ogni avvio il nuovo file nella cartella di Chromium. In parole spicce ho fatto questo:
mkdir /home/pi/chromium_prefs
creo con il comando sopra una nuova cartella
cp /home/pi/.config/chromium/Default/Preferences /home/pi/chromium_prefs
copio il file che si occupa di gestire lo stato di chiusura di Chromium modificandolo a mio vantaggio e lo incollo nella cartella creata prima.
#!/bin/sh cp /home/pi/chromium_prefs/Preferences /home/pi/.config/chromium/Default chromium-browser --kiosk https://renovatiostudio.eu/ &
Aggiungo al mio script creato precedentemente una riga di codice che ricopia ad ogni avvio nella cartella di Chromium il file che simula la corretta chiusura del sistema.
MAN 1 : COMPUTER 0
LONG LIVE AND PROSPERITY
Domani ci provo.
Ho la stessa esigenza di far apparire la produzione di un fotovoltaico su un TV nella hall del cliente.
Grazie !
Felice di esserti utile!
Se hai problemi di qualsiasi tipo fammelo sapere!
Ciao
Ciao!
Grazie mille per la spiegazione, funziona perfettamente!
Uso una Raspberry Pi 4 su un televisore per visualizzare una pagina web, e all’avvio della raspberry questa apre automaticamente Chromium con la pagina web impostata.
Essendo collegata a questa tv, mi collego alla Raspberry dal mio pc tramite VNC.
Fin qui funziona tutto, se non fosse che poi non riesco più ad uscire dalla modalità schermo intero purtroppo, anche premendo il tasto F11.
Ad esempio il tasto F5 funziona facendomi ricaricare e aggiornare la pagina.
Hai qualche consiglio per riuscire a disabilitare questa modalità a schermo interno “forzata” anche solo temporaneamente fino al prossimo riavvio della Raspberry?
Grazie mille!
Grazie a te per il feedback!
Così su 2 piedi mi viene da pensare che potresti risolvere impostando una configurazione di tasti che fa dire al tuo VNC di simulare F11 sul lampone, questo perché se lo premi dal PC il tasto F11 rimane in locale il funzionamento…
Comunque stasera provo a vedere se posso darti una soluzione migliore!