Ausführen eines Startprogramms im Terminal mit sudo

8

Ich muss beim Start (auf Lubunt) ein Python-Skript in einem Terminal ausführen , myscript.py . Dieses Skript benötigt root.

Ich habe eine .desktopDatei eingerichtet, die den folgenden Befehl ausführt:

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

Das Terminalfenster wird beim Start geöffnet und führt das Skript aus. Es wird jedoch geschlossen, wenn das Python-Skript einen Fehler zurückgibt (da es nicht als Root ausgeführt wird). Wenn ich das Exec=auf ...

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

... (Präfixbefehl mit sudo) was funktioniert. Das Terminal öffnet sich jedoch beim Start und zeigt das an

[sudo] password for d: \

Eingabeaufforderung, bei der ich mein Passwort eingeben muss. Ich möchte, dass die Ausführung des Python-Skripts beim Start vollständig automatisch und ohne Benutzerinteraktion erfolgt.

Wie kann ich das erreichen?

Brandon
quelle

Antworten:

5

Wenn Sie es beim Anmelden und nicht beim Start möchten (da ich nicht sehe, wie LXTerminal geöffnet werden kann, ohne dass der X-Server aktiv ist), müssen Sie der Datei / etc / sudoers eine Ausnahme hinzufügen, damit Sie nicht dazu aufgefordert werden Ihr Passwort.

Führen sudo visudoSie dazu Folgendes aus und fügen Sie Folgendes hinzu:

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

Stellen Sie sicher, dass Sie dies am Ende der Datei hinzufügen, damit dies funktioniert. Ich würde auch die Berechtigungen von alarm.pyauf ausführbar setzen, damit dies funktioniert. Gehen Sie also folgendermaßen vor, um es als ausführbare Datei festzulegen:

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

Ich hoffe es hilft!

kroq-gar78
quelle
Das funktioniert! Ich danke dir sehr! Ich habe immer noch ein Problem ... Wenn ich "alarm.py" anstelle von "python alarm.py" ausführe, erhalte ich die Fehler "import: not found" für Python-Kernmodule (z. B. datetime). Ich glaube nicht, dass ich diese Module in / Jarvis / kopieren kann. Was mache ich also?
Brandon
@Brandon Möglicherweise müssen Sie die PYTHONPATHVariable festlegen , dies ist jedoch nur eine Vermutung. Dazu würde ich ein Skript namens 'alarm_starter.sh' mit folgendem Inhalt erstellen : PYTHONPATH={what ever it should be} sudo /home/d/Jarvis/alarm.py. Da bin ich mir allerdings nicht sicher. Vielleicht hilft dies: docs.python.org/tutorial/modules.html#the-module-search-path
kroq-gar78
9

Benutzerdefinierte Skripte, die beim Start als Root ausgeführt werden, können über ausgeführt werden rc.local.

/etc/rc.localMit Root-Rechten bearbeiten :

sudo nano /etc/rc.local

und setzen Sie die Linie

python /home/d/Jarvis/alarm.py

kurz vor der letzten Zeile, die sagen sollte exit 0. Starten Sie neu, um zu sehen, ob es funktioniert hat.

Phoibos
quelle
Dies löste mein Problem beim Autostart von Programmen auf Raspbian.
Daniel Harris