Raspberry Pi è un potente SBC (single board computer) che puoi utilizzare per varie applicazioni e progetti. La sua versatilità sta nella sua capacità di eseguire tutti i tipi di programmi, inclusi script personalizzati, grazie in parte al sistema operativo Raspberry Pi e ad altri sistemi operativi basati su Linux che esegue.

Eseguire uno script o un programma sul Raspberry Pi è semplice come trovarlo sul sistema ed eseguirlo. Ma cosa succede se vuoi automatizzare questo processo, forse perché il tuo progetto lo richiede o perché vuoi snellire il tuo flusso di lavoro?

Una risposta a questa domanda è imparare a usare systemd.

Cos'è Systemd?

systemd è una suite di componenti di sistema per la configurazione e il comportamento dei servizi sui moderni sistemi Linux. È identificato con un file PID (identificatore di processo) di 1 poiché è il primo processo che si avvia all'avvio del sistema. In generale, lo scopo di systemd è di aiutarti con la gestione e l'esecuzione dei programmi all'avvio del sistema. Ed è quello che farai per avviare il tuo programma all'avvio sul Pi.

instagram viewer

Come accennato inizialmente, ci sono diversi metodi per eseguire programmi all'avvio su sistemi Linux, come rc.local, cron e autostart. Tuttavia, systemd trova una soluzione migliore del lotto se si desidera avviare programmi GUI (interfaccia utente grafica), automatizzare le applicazioni in modo che vengano eseguite dopo l'avvio di determinati processi di sistema o eseguire i programmi più e più volte fino alla pianificazione lavori.

Relazionato: Come pianificare attività in Linux con Cron e Crontab

Come utilizzare systemd per avviare i programmi all'avvio

systemd è un metodo leggermente più complicato per avviare programmi all'avvio su sistemi Linux. Tuttavia, la flessibilità di pianificazione che offre rispetto ad altri metodi, quelli che abbiamo menzionato sopra, supera totalmente la sua complessità in ogni aspetto.

Il metodo systemd utilizza file unit, che sono una specie di file .ini che contengono informazioni di codifica su dispositivi, servizi, socket, destinazione di avvio e altri componenti di sistema essenziali.

I file di unità sono di vari tipi. Quindi, in base al tipo di risorsa che si desidera dichiarare, è necessario scegliere un tipo di file di unità di conseguenza. Ai fini di questa guida, tuttavia, ci atteniamo ai file .service unit, che consentono di gestire il comportamento di avvio di programmi e script sul sistema.

Di seguito è riportato un dettaglio dei passaggi coinvolti nell'avvio di uno script / programma all'avvio utilizzando systemd.

Creazione di un servizio

Per impostare il programma in modo che venga eseguito all'avvio, creare un file di unità di servizio che indicherà a systemd quale programma eseguire e quando. Ecco come farlo.

  1. Nella finestra della CLI, digita sudo nano /lib/systemd/system/display.service. Puoi utilizzare qualsiasi nome per il tuo servizio purché termini con l'estensione .service.
  2. Nel file di servizio, incolla le seguenti righe di codice:
    [Unità]
    Descrizione = PiCounter
    Dopo = network.target
    [Servizio]
    ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
    Riavvia = sempre
    Utente = pi
    [Installare]
    WantedBy = multi-user.target

Tutte le opzioni di configurazione comuni rientrano nel file Unità e Installare mentre le opzioni di configurazione specifiche del servizio vanno nella sezione Servizio.

Alcune delle coppie di valori direttiva sopra che potresti dover modificare includono:

io. Dopo: Determina quando avviare il servizio. Impostandolo su network.target assicura che il valore elencato - network.target in questo caso - inizi prima di iniziare l'unità corrente. Tuttavia, non dirige una relazione di dipendenza per l'attivazione del servizio; ciò viene fatto tramite altre direttive come Wants, Richiede e WantedBy.

Ovviamente è possibile modificare questo valore in base ai requisiti del progetto. Ad esempio, se vuoi che il tuo programma venga eseguito dopo che il tuo Raspberry Pi si è connesso a una rete, puoi usare il file network-online.target valore. Puoi fare riferimento a La documentazione di Fedora su systemd per saperne di più su questi valori.

ii. ExecStart: Contiene il percorso assoluto e il nome del programma / script che si desidera eseguire all'avvio. Quindi, a seconda di ciò che si desidera eseguire, è necessario aggiungere valori per entrambe queste direttive.

iii. Utente: Identifica il nome del tuo Raspberry Pi. Se hai cambiato il nome del tuo Pi, devi mettere quel valore per l'utente.

iv. WantedBy: È il modo più comune per specificare il trigger per un'unità. Impostandolo su multi-user.target, è possibile stabilire una relazione di dipendenza che eseguirà il programma quando il controllo del sistema viene passato alla shell multiutente.

Inoltre, questo esegue anche il tuo programma prima dell'avvio del sistema X-Windows di Pi, il che significa che il tuo programma viene eseguito anche prima che tu acceda al sistema. Nel caso in cui desideri eseguire uno script prima di accedere al tuo Raspberry Pi, questo ti consente di farlo.

Le righe di codice precedenti funzionano per programmi non GUI. Tuttavia, se si desidera eseguire un programma GUI utilizzando systemd, è necessario aggiungere il seguente codice al file di servizio:

[Unità]
Descrizione = PiCounter
Dopo = network.target
[Servizio]
Ambiente = Display =: 0
Ambiente = XAUTHORITY / home / pi / .Xauthority
ExecStart = / usr / bin / python3 /home/pi/PiCounter/display.py
Riavvia = sempre
[Installare]
WantedBy = multi-user.target

Nella coppia valore direttiva sopra, tutto ciò che devi cambiare è il valore per il ExecStart direttiva. Sostituisci quello nel blocco di codice con il programma che desideri eseguire all'avvio. Dopo aver popolato il file di servizio, premi CTRL + O per salvarlo.

Prova il servizio

Con il servizio pronto, verifica manualmente se funziona. Per questo, digita il seguente comando nel terminale: sudo systemctl avvia display.service. Il servizio dovrebbe eseguire correttamente le istruzioni.

Una volta fatto, terminalo con sudo systemctl stop display.service.

Abilita il servizio

Se sei riuscito a eseguire il tuo programma con successo utilizzando il servizio, è ora di abilitarlo in modo che esegua il tuo programma automaticamente ogni volta che avvii il tuo Raspberry Pi.

Per fare ciò, digita sudo systemctl abilita display.service nella finestra del terminale. E una volta fatto, entra sudo riavvio per riavviare il tuo Pi.

Una volta avviato il tuo Raspberry Pi, systemd dovrebbe eseguire il programma secondo le istruzioni fornite.

Automatizzazione del lancio del programma all'avvio su Raspberry Pi

Come la maggior parte dei sistemi Linux, anche il sistema operativo Raspberry Pi ti consente di eseguire operazioni in diversi modi e rimane fedele anche alla pianificazione dei lanci dei programmi. Quindi, se si desidera avviare programmi / script GUI all'avvio e si desidera un controllo migliore sulla pianificazione, systemd è chiaramente un metodo migliore.

Detto questo, tuttavia, se desideri una soluzione più semplice o se i requisiti del tuo progetto richiedono una pianificazione specifica, puoi consultare la nostra guida Esecuzione di un programma o script Raspberry Pi all'avvio per saperne di più.

E-mail
The Ultimate Raspberry Pi Comands Cheat Sheet

Vuoi ottenere di più dal tuo Raspberry Pi? Ecco un sacco di comandi utili per navigare nel terminale del Pi e programmare i suoi pin GPIO.

Leggi Avanti

Argomenti correlati
  • Fai da te
  • Raspberry Pi
Circa l'autore
Yash Wate (8 articoli pubblicati)

Yash è uno staff writer presso MUO per fai da te, Linux, programmazione e sicurezza. Prima di trovare la sua passione nella scrittura, ha sviluppato per il web e iOS. Puoi anche trovare i suoi scritti su TechPP, dove copre altri verticali. Oltre alla tecnologia, si diverte a parlare di astronomia, Formula 1 e orologi.

Altro di Yash Wate

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!

Ancora un passo…!

Conferma il tuo indirizzo e-mail nell'e-mail che ti abbiamo appena inviato.

.