Linux Python Autostart Programm als Root

OP #5902435
Lesenswert?

Mein Problem:
Auf einem i.MX6UL Board mit Debian und XFCE als Desktop soll ein Python
Programm automatisch beim Booten als Root starten,
da ich z.B. die Hintergrundbeleuchtung des LCD ändern oder
auf GPIOs zugreifen möchte.

z.B.
import os
os.system("echo 7 > /sys/class/backlight/backlight/brightness")

Das Programm startet als normaler x_user und kann dann natürlich nicht
auf /sys/class... zugreifen

sudo gibt es nicht...

Kenne mich mit Linux nicht wirklich aus.
Wie macht man sowas?
Gast #5902440
Lesenswert?

> Wie macht man sowas?

Üblicherweise startet man Sachen beim Boot über das Init-System. Bei 
Debian wäre das in Stable und Oldstable dann systemd, und man würde 
entsprechend eine Service-Unit erstellen. Bei älteren Versionen würde 
man ein Start-/Stop-Script schreiben.
Gast #5902512
Lesenswert?

Peter Z. schrieb:
> @mh
> Was soll mir das sagen?
Vermutlich das hier:
1
The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using this function. See the Replacing Older Functions with the subprocess Module section in the subprocess documentation for some helpful recipes.
Moderator Persönliche Seite #5902597
Lesenswert?

Peter Z. schrieb:
> os.system("echo 7 > /sys/class/backlight/backlight/brightness")

Ein Python-Script zu starten, um aus diesem wiederum einen Shell-Befehl 
aufzurufen, ist von hinten durch die Brust ins Auge.

Gereicht hätte vermutlich folgendes, wenn Dein System noch rc.local 
unterstützt:
1
echo 'echo 7 > /sys/class/backlight/backlight/brightness' >>/etc/rc.local
2
chmod +x /etc/rc.local

Danach einmal neu booten und schauen, ob das Backlight angeht.

P.S.
Eventuell noch vorher schauen, ob in rc.local nicht am Ende ein "exit 0" 
drinsteht. Das müsste dann per Editor noch nach dem Anhängen der 
Kommandozeile nach unten verschoben werden.

Wenn rc.local nicht mehr unterstützt wird, gibt es hier Abhilfe:

https://www.itechlounge.net/2017/10/linux-how-to-add-rc-local-in-debian-9/
#5902644
Lesenswert?

Moin,
ich habe meine Alarmanlage Zuhause auf einem Raspberry Pi als Python 
script umgesetzt.

Zum starten habe ich einen Eintrag in /etc/rc.local eingefügt (so wie 
Frank M):
1
# start underworld
2
echo "Starting Underworld"
3
logger "Starting Underworld"
4
sudo nohup /usr/bin/python /python/underworld/underworld.py

nohup ist ein cooles Tool, damit lässt sich die "Bildschirmausgabe" in 
eine Datei umleiten. So fange ich eventuelle python Fehlermeldungen ab.

Eventuell muss noch ein softlink in runlevel3 (booten ohne grafische 
Oberfläche) oder runlevel5 (booten mit grafischer Oberfläche) gesetzt 
werden:
1
ln -s /etc/init.d/rc.local /etc/rc3.d/S99rc.local
Moderator Persönliche Seite #5902656
Lesenswert?

Der H. schrieb:
> Zum starten habe ich einen Eintrag in /etc/rc.local eingefügt [...]

Mittlerweile hat sich herausgestellt, dass der TO unter "autostart" 
etwas anderes versteht als das Booten des OS.

> sudo nohup /usr/bin/python /python/underworld/underworld.py

Ein paar Verbesserungsvorschläge:

1. sudo überflüssig

sudo kann entfallen, da rc.local immer als root gestartet wird.

2. Falsche Anwendung von nohup

nohup ist dafür gedacht, das SIGHUP-Signal abzufangen, wenn die 
aufrufende interaktive(!) Shell sich ausloggt. So kann man interaktiv 
Shell-Scripts starten, die weiterlaufen, obwohl man sich nach dem Aufruf 
abmeldet. Dass hier der Output in eine Datei "nohup.out" umgeleitet 
wird, ist lediglich ein angenehmer Nebeneffekt.

Stattdessen sollte man hier einfach die Umleitung direkt in der Shell 
selbst relaisieren. So wäre mein Vorschlag:
1
/usr/bin/python /python/underworld/underworld.py >/tmp/underworld.log 2>&1
Moderator Persönliche Seite #5902662
Lesenswert?

Peter Z. schrieb:
> Die Helligkeit soll zur Laufzeit der GUI geändert werden.

Mittlerweile ist das klar. Aber wenn normalerweise Linux-Newbies von 
"autostart" (siehe Betreff) sprechen, meinen sie so etwas wie die 
autostart.bat unter Windows.

Außerdem hattest Du ursprünglich geschrieben:

> soll ein Python Programm automatisch beim Booten als Root starten,

Beim Wort "Booten" denkt natürlich jeder erstmal an das Booten des OS.
Gast #5902669
Lesenswert?

Du kannst das auch über die systemweite /etc/crontab machen:

[code]
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h   dom mon dow user        command

@reboot             root        /pfad/zum/proramm/filename.py

...
[/code)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren