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?
> 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.
Peter Z. schrieb: > os.system("echo 7 > /sys/class/backlight/backlight/brightness") https://docs.python.org/2/library/os.html#os.system oder https://docs.python.org/3.7/library/os.html#os.system
@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.
Peter Z. schrieb: > @zufaulzumanmelden > Dein Beitrag bringt mich jetzt nicht wirklich weiter Doch, er hat die richtige Lösung genannt.
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. |
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.
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.
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.
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!
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
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
Hat XFCE kein Script was er beim Starten ausfuehrt? Dann packt man da das echo rein. Der IQ der Welt sinkt wirklich.
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
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
@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?
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
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)
Ok, den Schuh zieh ich mir an... Aber muss man dann in die Agro Schiene fallen? Du schreibst ja auch "normal"
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.