mikrocontroller.net

Forum: PC-Programmierung Linux Python Autostart Programm als Root


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Peter Z. (hangloose)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: zufaulzumanmelden (Gast)
Datum:

Bewertung
2 lesenswert
nicht 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.

Autor: mh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Peter Z. (hangloose)
Datum:

Bewertung
-1 lesenswert
nicht 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.

Autor: Bernd K. (prof7bit)
Datum:

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

Doch, er hat die richtige Lösung genannt.

Autor: poiu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Z. schrieb:
> @mh
> Was soll mir das sagen?
Vermutlich das hier:
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.

Autor: zufaulzumanmelden (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Bernd K. (prof7bit)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Z. (hangloose)
Datum:

Bewertung
-2 lesenswert
nicht 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.

Autor: Bernd K. (prof7bit)
Datum:

Bewertung
1 lesenswert
nicht 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!

Autor: Peter Z. (hangloose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast recht

Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
2 lesenswert
nicht 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:
echo 'echo 7 > /sys/class/backlight/backlight/brightness' >>/etc/rc.local
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
Autor: Peter Z. (hangloose)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: kunz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat XFCE kein Script was er beim Starten ausfuehrt?

Dann packt man da das echo rein.

Der IQ der Welt sinkt wirklich.

Autor: Der H. (picasso323)
Datum:

Bewertung
-2 lesenswert
nicht 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):
# start underworld
echo "Starting Underworld"
logger "Starting Underworld"
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:
ln -s /etc/init.d/rc.local /etc/rc3.d/S99rc.local

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

Bewertung
1 lesenswert
nicht 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:
/usr/bin/python /python/underworld/underworld.py >/tmp/underworld.log 2>&1

: Bearbeitet durch Moderator
Autor: Peter Z. (hangloose)
Datum:

Bewertung
-2 lesenswert
nicht 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?

Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
2 lesenswert
nicht 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
Autor: bingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Peter Z. (hangloose)
Datum:

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

Autor: Peter Z. (hangloose)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: bingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.