web-dev-qa-db-fra.com

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

Je dois exécuter un script python dans un terminal, myscript.py au démarrage (sur Lubunt). Ce script nécessite root.

J'ai configuré un fichier .desktop 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 lorsque le script Python renvoie une erreur (car il n'est pas exécuté en tant que root). Quand je change le Exec= en ceci ...

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: \

Invite, me demandant de saisir mon mot de passe. Je voudrais que l'exécution du script python au démarrage soit complètement automatique sans interaction de l'utilisateur.

Comment puis-je accomplir cela?

8
Brandon

Si vous le souhaitez au moment de la connexion et non du démarrage (car je ne vois pas comment LXTerminal peut être ouvert sans le serveur X actif), vous devez ajouter une exception au fichier/etc/sudoers pour ne pas être invité à entrer. 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 que vous ajoutez ceci à la fin du fichier pour que cela fonctionne. Je voudrais également définir les autorisations de alarm.py sur exécutable pour que cela fonctionne. Alors, faites ceci pour le définir comme exécutable:

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

J'espère que ça aide!

5
kroq-gar78

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

Éditez /etc/rc.local avec 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é.

9
phoibos