Exécuter un programme de démarrage dans un terminal avec sudo

8

J'ai besoin d'exécuter un script python dans un terminal, myscript.py au démarrage (sur Lubunt). Ce script nécessite root.

J'ai configuré un .desktopfichier qui exécute la commande suivante:

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

La fenêtre du terminal s'ouvre au démarrage et exécute le script, mais se ferme ensuite lorsque le script Python renvoie une erreur (car il n'est pas exécuté en tant que root). Quand je change Exec=cela en ...

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

... (préfixant la commande avec sudo) qui fonctionne. Cependant , le terminal s'ouvre au démarrage et affiche le

[sudo] password for d: \

rapide, m'obligeant à saisir mon mot de passe. Je voudrais que l'exécution du script python au démarrage soit complètement automatique sans interaction avec l'utilisateur.

Comment puis-je accomplir cela?

Brandon
la source

Réponses:

5

Si vous le souhaitez à la connexion et non au démarrage (car je ne vois pas comment LXTerminal peut être ouvert sans que le serveur X ne soit en place), vous devez ajouter une exception au fichier / etc / sudoers afin de ne pas être invité à votre mot de passe.

Pour ce faire, exécutez sudo visudo, puis ajoutez les éléments suivants:

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

Assurez-vous de l'ajouter à la fin du fichier pour que cela fonctionne. Je voudrais également définir les autorisations d' alarm.pyexécutable pour que cela fonctionne. Donc, faites-le pour le définir comme exécutable:

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

J'espère que cela aide!

kroq-gar78
la source
Cela marche! Merci beaucoup! J'ai encore un problème ... Lorsque j'exécute "alarm.py" au lieu de "python alarm.py", j'obtiens des erreurs "import: not found" pour les modules python principaux (ex. Datetime). Je ne pense pas pouvoir copier ces modules dans / Jarvis /, alors que dois-je faire?
Brandon
@Brandon Vous devrez peut-être définir la PYTHONPATHvariable, mais ce n'est qu'une supposition. Pour cela, je voudrais créer un script appelé « alarm_starter.sh » avec le contenu suivant: PYTHONPATH={what ever it should be} sudo /home/d/Jarvis/alarm.py. Je ne suis vraiment pas sûr de cela, cependant. Peut-être que cela vous aidera: docs.python.org/tutorial/modules.html#the-module-search-path
kroq-gar78
9

Les scripts personnalisés qui sont exécutés au démarrage en tant que root peuvent être exécutés via rc.local.

Modifier /etc/rc.localavec les droits root:

sudo nano /etc/rc.local

et mettre la ligne

python /home/d/Jarvis/alarm.py

juste avant la dernière ligne, ce qui devrait dire exit 0. Redémarrez pour voir si cela a fonctionné.

phoibos
la source
Cela a résolu mon problème de démarrage automatique des programmes sur Raspbian.
Daniel Harris