Forum: PC-Programmierung Linux Python Autostart Programm als Root


von Peter Z. (hangloose)


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?

von zufaulzumanmelden (Gast)


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.

von mh (Gast)


Lesenswert?


von Peter Z. (hangloose)


Lesenswert?

@zufaulzumanmelden
Dein Beitrag bringt mich jetzt nicht wirklich weiter

@mh
Was soll mir das sagen?

Egal, das Problem hat sich gelöst indem ich "sudo" installiert habe.

von Bernd K. (prof7bit)


Lesenswert?

Peter Z. schrieb:
> @zufaulzumanmelden
> Dein Beitrag bringt mich jetzt nicht wirklich weiter

Doch, er hat die richtige Lösung genannt.

von poiu (Gast)


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.

von zufaulzumanmelden (Gast)


Lesenswert?

Peter Z. schrieb:
> @zufaulzumanmelden
> Dein Beitrag bringt mich jetzt nicht wirklich weiter

Soll ich nun die Suchmaschine für sich bedienen, oder dir aus den 
Manpages vorlesen? Bringt dich nur auch nicht wirklich weiter.

Aber du hast es dir ja hingepfuscht.

von Bernd K. (prof7bit)


Lesenswert?

poiu schrieb:
> The subprocess module provides more powerful facilities for spawning new
> processes

Für ein simples echo ist das totaler overkill. Das wird dreimal 
komplizierter.

von Peter Z. (hangloose)


Lesenswert?

Wie ich geschrieben hatte kenne ich mich mit Linux nicht aus,
darum hat mich die Antwort nicht weitergebracht.

Aber wie schon geschrieben es funktioniert so wie gewollt auch wenn
es für euch Highperformer Pfusch ist.

von Bernd K. (prof7bit)


Lesenswert?

Peter Z. schrieb:
> Wie ich geschrieben hatte kenne ich mich mit Linux nicht aus,
> darum hat mich die Antwort nicht weitergebracht.
>
> Aber wie schon geschrieben es funktioniert so wie gewollt auch wenn
> es für euch Highperformer Pfusch ist.

Warum postest Du hier überhaupt wenn Du keine Hilfe willst? Reine 
Zeitverschwendung für alle!

von Peter Z. (hangloose)


Lesenswert?

Hast recht

von Frank M. (ukw) (Moderator) Benutzerseite


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/

: Bearbeitet durch Moderator
von Peter Z. (hangloose)


Lesenswert?

Das Python-Script wird erst gestartet nachdem der XFCE Desktop geladen 
ist.
Mit dem Python-Script wird dann eine Qt GUI gestartet, CAN und der UART 
initialisiert.
Mit dieser GUI möchte ich dann die Helligkeit des Bildschirms ändern 
können.
Darum der Befehl im Python-Script.

: Bearbeitet durch User
von kunz (Gast)


Lesenswert?

Hat XFCE kein Script was er beim Starten ausfuehrt?

Dann packt man da das echo rein.

Der IQ der Welt sinkt wirklich.

von Der H. (picasso323)


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

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


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

: Bearbeitet durch Moderator
von Peter Z. (hangloose)


Lesenswert?

@kunz
Glaube du hast nicht verstanden um was es mir geht.
Die Helligkeit soll zur Laufzeit der GUI geändert werden.
Und nochmal... es funktioniert mittlerweile alles bereits wie es soll!
Also was soll das mit deinem IQ Geschwalle?

von Frank M. (ukw) (Moderator) Benutzerseite


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.

: Bearbeitet durch Moderator
von bingo (Gast)


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)

von Peter Z. (hangloose)


Lesenswert?

Ok, den Schuh zieh ich mir an...
Aber muss man dann in die Agro Schiene fallen?
Du schreibst ja auch "normal"

von Peter Z. (hangloose)


Lesenswert?

@bingo
Das mit der Crontab hatte ich auch probiert aber das funktioniert nicht,
da die GUI nicht startet, weil zu der Zeit der Desktop noch nicht 
gestartet ist.

von bingo (Gast)


Lesenswert?

Peter Z. schrieb:
> Das mit der Crontab hatte ich auch probiert aber das funktioniert nicht,
> da die GUI nicht startet, weil zu der Zeit der Desktop noch nicht
> gestartet ist.

Dann bau ein 'sleep 5' o.ä. in Dein Script rein

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.