Jump to content

[Guida] Avviare un programma in automatico all'accensione del Raspberry Pi


StandardBus
 Share

Recommended Posts

http://www.nonsologaming.com/vd/Raspberry-Pi-Resize-Boot-Screen.jpg

 

Per le sue dimensioni e per il limitato consumo, il Raspberry si presta volentieri a lavori che non richiedono l'interazione con l'utente tramite lo schermo.

In tal caso potrebbe essere necessario trovare il modo di avviare un programma in automatico all'accensione del Raspberry, in modo che non sia necessario un intervento dall'esterno per eseguire un determinato compito.

 

Ipotizziamo di trasformare il Raspberry in un semplice allarme per la casa, e di posizionare un relè collegato ad una ricevente radio che attiva/disattiva l'alimentazione sul Raspberry: premendo il telecomando andremo ad eccitare il relè che quindi permetterà alla corrente di alimentarlo... conseguentemente il Raspberry avvierà la procedura di boot, il sistema ed infine il programma che pilota la sirena (più o meno complesso), che magari ci avvisa via mail dell'intrusione da tal porta piuttosto che dalla finestra.

 

In questo caso vogliamo ovviamente dire al sistema di avviare ad ogni accensione il programma dell'allarme... non abbiamo tempo nè voglia di stare ad avviare manualmente il programma prima di uscire di casa.

 

A seconda dei casi, il programma potrà essere avviato senza server X o solo in modalità grafica, quindi avremo due differenti procedure.

 

Avviare un programma dopo il server X:

La gran parte dei programmi che utilizziamo hanno un interfaccia grafica... e come tali, richiedono che il sistema abbia già avviato in precedenza un gestore grafico che sia in grado di supportarli.

Si sta parlando dell'X Window system, disponibile per tutti i sistemi Linux.

Alla luce di questo diventa chiaro come sia indispensabile rispettare una sequenza di avvio affinchè tutto funzioni a dovere: ogni programma (con interfaccia grafica) in esecuzione all'avvio dovrà aspettare che il server X sia pronto, e quindi avviarsi dopo di lui.

 

Per avviare un programma solo dopo l'avvio dell'X server dovremo procedere in questo modo:

 

Visto che si sta parlando di modalità grafica, apriamo un terminale.

Creiamo la cartella "autostart" dando il seguente comando:

mkdir ~/.config/autostart

...e all'interno della cartella autostart creiamo un file vuoto:

touch ~/.config/autostart/nomeprogramma.desktop

Chiaramente al posto di "nomeprogramma" potremo mettere qualsiasi nome ci aiuti a riconoscere il file, l'importante è che abbia l'estensione .desktop.

Ora dovremo modificare il file fornendogli le informazioni del programma che ci interessa avviare:

sudo leafpad ~/.config/autostart/

In questo modo si aprirà l'editor di testo predefinito all'interno di Raspbian.

 

Compiliamo il contenuto del file come segue:

[Desktop Entry]

Name=nomeprogramma

Exec=comando

Type=application

"nomeprogramma" e "comando" saranno le uniche informazioni che dovrete modificare.

Dovrete a questo punto identificare quale comando permette l'avvio da terminale del programma che vi interessa, e inserirlo sotto la voce Exec=, in sostituzione al testo "comando".

Salvate, chiudete l'editor ed il gioco è fatto.

Ad ogni accensione il programma verrà avviato come richiesto.

 

Avviare un programma che non richiede il server X:

In questo caso andremo a richiedere al sistema di avviare un programma prima della richiesta di login da linea di comando. Il server X sarà quindi disattivato o addirittura assente.

Da linea di comando richiediamo tramite l'editor "nano" la modifica del file rc.local (se non presente verrà creato):

sudo nano /etc/rc.local

Appena prima della linea "exit" inseriamo il programma che vogliamo eseguire. In alternativa è possibile anche richiedere l'esecuzione di uno script python inserendo nel file di testo il comando

python /posizione/dello/script.py

 

Fatto questo sarà sufficiente salvare, confermare ed uscire.

Al riavvio lo script/programma verrà eseguito.

 

TIP: Ricordate che entrambi le procedure sono valide su Raspberry come su qualsiasi altra macchina Linux. ;)
Link to comment
Share on other sites

  • 2 weeks later...

Tengo a precisare che la procedura dovrà essere effettuata da parte dell'utente che vuole avviare l'app all'avvio.

Ovvero io ho provato ad avviare all'avvio transmission e quando ho settato l'autostart questo non partiva perché bisognava creare il file di autostart sia per l'utente corrente che per root.

 

Quindi sia in:

 

/home/nomeutente/.config/autostart/

 

sia in

 

~/.config/autostart/

 

Infatti ieri mi sono accorto di avere il file "transmission.desktop" solo nella cartella autostart root quindi l'interfaccia grafica non si avviava in aitomatico perché il raspberry esegue l'accesso al desktop da utente "pi" e di conseguenza mi è toccato creare il file "transmission.desktop" anche per l'utente "pi".

 

----------------------

Nexus 7 3G - Tapatalk

Link to comment
Share on other sites

Grazie per la precisazione, ho dato per scontato che si utilizzasse solo l'utente pi. :)

Non è necessario creare il file di autostart per l'utente root, basta quello per l'utente pi.

 

Ottimo cosi evito di fare doppio lavoro o copia di file inutili. Io pensavo fosse necessario crearlo anche in root per avere particolari privilegi con uso di programmi. Ad esempio transmission che deve avviarsi e "scrivere" su cartelle di sistema i file scaricati.

Link to comment
Share on other sites

  • 3 months later...

Sto provando a farlo per VNC, creando il file tightvnc.desktop sotto /home/pi/.config/autostart/ ed inserendo

 

[Desktop Entry]

Type=Application

Name=TightVNC

Exec=vncserver :1

StartupNotify=false

 

Salvo, riavvio, ma comunque il server VNC non parte in automatico ma lo devo forzare da SSH...Dove sbaglio?

 

EDIT: non chiedetemi perchè, dopo che ho fatto l'aggiornamento della distro + fw, ora funziona senza problemi xD In ogni caso, GRAZIE!

Edited by Aiden
Link to comment
Share on other sites

  • 4 months later...

ciao a tutti

una volta mi partiva pyload in automatico ora non mi parte più

questo è il mio rc.local

 

!/bin/sh -e

#

# rc.local

#

# This script is executed at the end of each multiuser runlevel.

# Make sure that the script will "exit 0" on success or any other

# value on error.

#

# In order to enable or disable this script just change the execution

# bits.

#

# By default this script does nothing.

 

# Print the IP address

_IP=$(hostname -I) || true

if [ "$_IP" ]; then

printf "My IP address is %s\n" "$_IP"

fi

 

python /usr/share/pyload/pyLoadCore.py --daemon

 

 

exit 0

 

 

però non mi parte più il demone.

se nella shell di putty lancio

python /usr/share/pyload/pyLoadCore.py --daemon

 

parte il demone

suggerimenti

grazie

Link to comment
Share on other sites

 Share

×
×
  • Create New...