27 febbraio 2019

Raspberry Pi: avviare un servizio all'accensione

Un appunto veloce per spiegare la soluzione che ho scelto per avviare un servizio all'avvio del Raspberry, soprattutto pensando ai miei lettori italiani, che non hanno sempre voglia di tradurre o farsi tradurre le pagine in inglese.

L'obiettivo: far partire uno script in Python che funziona da servizio, cioè parte in automatico e gira all'infinito o fin quando non viene interrotto manualmente. Nel mio caso si tratta di un programma scritto da me che per ora non ha neanche una interfaccia grafica, e forse non l'avrà mai.

Cinque soluzioni

Ci sono diversi modi per arrivare al risultato, come ho potuto verificare nelle mie ricerche.
In un articolo del sito Dexter Industries, vengono elencati 5, dico cinque modi diversi:
  • rc.local
  • .bashrc
  • init.d
  • systemd
  • crontab

rc.local

Ho provato il metodo rc.local, ma ho trovato subito delle difficoltà perché lo script in Python non trovava le librerie (import) e neanche i file locali che doveva aprire.

Per vedere gli errori ho eseguito da terminale il comando inserito nel file rc.local:

sudo python /home/pi/sample.py 

In pratica il sistema operativo non aveva finito di caricare l'ambiente, o io non ero stato in grado di dargli il contesto corretto in cui far girare lo script.

init.d

Il metodo init.d perché, nell'articolo citato, mi proponeva di copiare il programma nella cartella init.d.

sudo cp /home/pi/sample.py /etc/init.d/ 

A me questo metodo non piace, perché sto facendo lo sviluppo nella mia home, e vorrei lasciare tutto lì. Non vorrei cartelle duplicate e programmi duplicati.

systemd

Questo metodo sembra un po' più lungo e complesso, perché richiede
  1. di scrivere un file di istruzioni, detto "Unit File" o "Service File" e 
  2. di inserirlo tra i servizi di sistema
In realtà è proprio il sito del Raspberry a fornire delle indicazioni dettagliate corredate da un esempio per creare il file e i comandi necessari per avviare il servizio.

Queste istruzioni hanno funzionato per me al primo colpo ed è stato il metodo che ho preferito, per diverse ragioni:
  1. ho un file di descrizione del servizio separato dallo script/programma/servizio vero e proprio
  2. la granularità del controllo, o in parole semplici, la possibilità di definire diversi parametri come la "Working Directory"e definire eventuali dipendenze (es. avvia solo dopo aver avviato la rete)
  3. poter continuare a sviluppare e fare i test in una directory a piacimento,
  4. poter arrestare e riavviare il servizio con i comandi standard di Linux (systemctl)
Buon divertimento con il Raspberry!

17 febbraio 2019

il lettore Kindle in mano al bambino

Siamo una famiglia che legge più della media. A Natale è arrivato un bellissimo regalo ad uno dei miei figli: un Kindle PaperWhite.


Prontamente ho avviato l'impostazione dell'account e insieme abbiamo trovato i primi libri sul negozio elettronico. Chiaramente l'account è il mio ed è collegato ai meccanismi di pagamento impostati su Amazon.

Comprare un libro? No problem

Terminati i primi libri, la giovane lettrice in questione ha subito cercato una nuova serie dello stesso autore, e, ottenuta l'autorizzazione, ha avviato l'acquisto.

Con mia grande sorpresa, il Kindle non ha chiesto password né codici, niente di niente. L'acquisto fila via liscio e mi ritrovo l'addebito sul conto.

La cosa mi lascia molto perplessa, e ricontrollo quattro volte le impostazioni dell'account: non c'è l'acquisto con singolo click, non ci sono flag del tipo, "Ricordami" o "Non mi chiedere niente, compra e vai!". Sembra tutto ok, lato account Amazon.

La cosa si ripete in una seconda occasione, e capisco di avere in mano una bomba ad orologeria.

Time, clock, bomb pictures
Finalmente oggi, in occasione dell'ennesimo acquisto, raccolgo le mie energie e mi metto di traverso. "Fermi tutti! Questa cosa deve finire!"

La soluzione: Kindle FreeTime

Indago un po' e scopro l'esistenza di Free Time. E' il nome che Amazon ha dato agli account dei minori utilizzatori del lettore Kindle ed è collegato ai "Parental Control" ossia al controllo genitoriale.

Con "Free Time" il genitore imposta la password di "Parental Control" ed è solo inserendo questa password che il bambino può accedere al negozio online. Non solo, una volta acquistati i libri, il genitore deve esplicitamente aggiungerli alla lista visibile al bambino.

Trovate le istruzioni sul sito di Amazon, e un articolo più panoramico in questo blog di Micaela.
In inglese, invece trovate un post ancora più dettagliato sul sito pocket-lint.