Esecuzione di un programma di avvio nel terminale con sudo


8

Ho bisogno di eseguire uno script Python in un terminale, myscript.py all'avvio (su Lubunt). Questo script richiede root.

Ho impostato un .desktopfile che esegue il seguente comando:

lxterminal --command="python /home/d/Jarvis/alarm.py && /bin/bash"

La finestra del terminale si apre all'avvio ed esegue lo script, ma poi si chiude quando lo script Python restituisce un errore (perché non viene eseguito come root). Quando cambio il Exec=a questo ...

lxterminal --command="sudo python /home/d/Jarvis/alarm.py && /bin/bash"

... (comando prefisso con sudo) che funziona. Tuttavia , il terminale si apre all'avvio e visualizza il

[sudo] password for d: \

prompt, richiedendomi di inserire la mia password. Vorrei che l'esecuzione dello script Python all'avvio fosse completamente automatica senza alcuna interazione da parte dell'utente.

Come posso ottenere questo?

Risposte:


5

Se lo si desidera al momento del login e non all'avvio (poiché non vedo come LXTerminal può essere aperto senza X server attivo), è necessario aggiungere un'eccezione al file / etc / sudoers in modo da non essere richiesto la tua password.

Per fare ciò, eseguire sudo visudoe quindi aggiungere quanto segue:

<your username> ALL = NOPASSWD: /home/d/Jarvis/alarm.py

Assicurati di aggiungere questo alla fine del file affinché funzioni. Vorrei anche impostare le autorizzazioni di alarm.pyeseguibile affinché funzioni. Quindi, fai questo per impostarlo come eseguibile:

chmod +x /home/d/Jarvis/alarm.py

Spero che sia d'aiuto!


Questo funziona! Grazie mille! Ho ancora un problema ... Quando eseguo "alarm.py" invece di "python alarm.py", ottengo errori "import: not found" per i moduli core python (es. Datetime). Non credo di essere in grado di copiare quei moduli in / Jarvis /, quindi cosa devo fare?
Brandon,

@Brandon Potrebbe essere necessario impostare la PYTHONPATHvariabile, ma questa è solo una supposizione. Per questo, vorrei creare uno script chiamato 'alarm_starter.sh' con il seguente contenuto: PYTHONPATH={what ever it should be} sudo /home/d/Jarvis/alarm.py. Non ne sono davvero sicuro, però. Forse questo sarà d'aiuto: docs.python.org/tutorial/modules.html#the-module-search-path
kroq-gar78

9

Gli script personalizzati che vengono eseguiti all'avvio come root possono essere eseguiti tramite rc.local.

Modifica /etc/rc.localcon i diritti di root:

sudo nano /etc/rc.local

e metti la linea

python /home/d/Jarvis/alarm.py

appena prima dell'ultima riga, che dovrebbe dire exit 0. Riavvia per vedere se ha funzionato.


Questo ha risolto il mio problema con l'avvio automatico dei programmi su Raspbian.
Daniel Harris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.