Avvio applicazioni GUI senza Display
Su Raspberry e Linux
La Raspberry è un computer su singola board che può funzionare tranquillamente senza un display collegato, per interagire con essa si può usare una connessione SSH o tramite desktop remoto. Questo computer con sistema operativo Linux permette l’esecuzione di software con interfaccia utente grafica (GUI) che è possibile visualizzare ovviamente sul monitor o tramite desktop remoto.
Il problema nasce quando bisogna tenere aperto ed in funzione un programma con interfaccia grafica senza avere un monitor collegato.
L’avvio un programma GUI senza avere un output visivo, può sembrare impossibile anche perché se si tenta di avviarlo tramite SSH, ovviamente il sistema operativo ci avverte che non è possibile avviarlo senza avere una sessione desktop attiva. Vediamo come si avvia un software con interfaccia grafica, che resti aperto ed in funzione senza aver nessun monitor fisicamente collegato al microcomputer e senza aprire nessuna sessione di desktop remoto.
DISPLAY:=0 nohup
Il comando LINUX “nohup” fa eseguire il comando, quindi nel nostro caso lancia l’applicazione ignorando il segnale di chiusura della sessione di terminale.
Questo andrebbe benissimo per script in bash o in Python, ma nel nostro caso non è sufficiente, il sistema tenterà di avviare il nostro software, ma dove? Non c’è monitor, non c’è desktop… Coadiuvato al comando “nohup” dovremo creare un desktop o un display virtuale, con il comando “DISPLAY=:0“.
export DISPLAY=desktop:0
DISPLAY=:0 nohup nome-applicativo
OK, ci siamo! abbiamo generato un display virtuale tramite terminale, poi gli abbiamo detto che quando il terminale si chiude in pratica deve far finta che non sia chiuso, ed in fine gli abbiamo detto cosa, o quale programma lanciare.
Nel mio specifico caso avevo bisogno che si avviasse un programma per radioamatori, WSJTX, su una Raspberry che non ha nessun display o monitor, e neache accesso remoto.
Automatizzare un display virtuale all’avvio
Per fare tutte le cose viste nel paragrafo precedente, in maniera automatica all’avvio del sistema, sarà necessario editare il file .bashrc.
Apriamo il file come super utente:
sudo nano /home/pi/.bashrc
Spostarsi in fondo a tutto, e scrivere dopo l’ultima riga i nostri comandi:
echo Avvio di Firefox su display virtuale
export DISPLAY=desktop:0
DISPLAY=:0 nohup firefox
A questo punto, dal prossimo riavvio del sistema l’applicazione GUI verrà lanciata su un display virtuale.
Faccio notare che dopo aver editato il file e riavviato il sistema, ogni qualvolta che il terminale verrà aperto, verrà creato un nuovo display virtuale e l’applicazione verrà lanciata un ultriore volta. Vedrete comparire sul terminale “nohup: input ignorato e output accodato a ‘nohup.out'”. Sarà quindi vostra accortezza, rapidamente bloccarlo con la combinazione di tasti CTRL+C.
Siti di riferimento e fonti
Il sito che vi consiglio di visitare, per approfondire l’argomento è https://www.dexterindustries.com/howto/run-a-program-on-your-raspberry-pi-at-startup/ dal quale ho preso spunto per questo articolo, e seguendolo sono riuscito a far funzionare il sistema, nel mio specifico caso.
Un commento
Enrico Cocca
Buongiorno,
ho provato il comando in questione ma ricevo questo errore:
Unable to init server: Tipo di display broadway non supportato: desktop:0
Error: cannot open display: desktop:0