Posts by DennisC

    Ich habe mich die letzten Tage dann doch noch einmal dran gemacht eine Alternative zu rc.local zu finden.

    Und habe es geschafft mein GUI über openbox zu starten.

    Dafür habe ich folgende Datei erstellt /home/pi/.bash_profile um ein openBox Fenster nach dem Boot zu öffnen:

    Code
    [[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && startx -- -nocursor

    Und unter /etc/xdg/openbox/autostart dann den Aufruf meines Programmes:

    Da es mir noch etwas an Erfahrung fehlt, blieb mir nichts anderes über als mittels try and error solange zu probieren bis das gewünschte Ergebnis folgt.

    Bin für Verbesserungsvorschläge oder Korrekturen offen :)

    Ohne sudo bekomme ich folgende Meldung:

    Python
    pi@raspberry:~$ python3 /home/pi/Frontend/main.py
    pygame 2.0.1 (SDL 2.0.9, Python 3.7.3)
    Hello from the pygame community. https://www.pygame.org/contribute.html
    Traceback (most recent call last):
      File "/home/pi/Frontend/main.py", line 13, in <module>
        from constants import *
      File "/home/pi/Frontend/constants.py", line 16, in <module>
        screen = pygame.display.set_mode((WIDTH, HEIGHT), flags)
    pygame.error: Could not initialize OpenGL / GLES library

    Mit dem Cronjob klappt es nicht. Ich habe, wie in #28 beschrieben, meinen Programmaufruf in crontab -e hinzugefügt.

    Das Shell-Skript habe ich davor mit sudo chmod +x /home/pi/Frontend.shausfürhbar gemacht.


    Was sind den denn die genauen Unterschiede zwischen einem Programmstart mit rc.local und Cronjob


    Möchte ich das Programm über Systemd starten, sind wir ja wieder beim Thema .service.

    Über die Frontend.service lässt sich das Programm gar nicht starten (#1).

    Ich habe jetzt eine Variante gefunden die Funktioniert.

    Link

    Ich habe den Programmaufruf in /etc/rc.local vor dem exit 0 geschrieben, wie in dem Link vorgeschlagen.

    Auf diese Weise Wird mein GUI gestartet.

    Jetzt sagt Ihr mir nur noch bitte ob das so eine gute Idee ist oder totaler Murks!?

    Über init.d garnicht! ;)


    Ich kann am Telefon nicht so richtig mitarbeiten und bin erst in ca. 2h am PC. Dann würde ich mit Dir erstmal die .bashrc-Variante testen. Dazu wäre aber für den Notfall ein neuer User sinnvoll, der entweder Dein Skript starten oder sich per SSH verbinden kann oder beides.

    Ich arbeite ausschließlich über SSH von einem PC aus an dem Pi, den HDMI Monitor lasse ich nur nebenbei laufen um das GUI anzuzeigen.


    Ich muss sagen, dass ich noch recht frisch bin was Linux angeht.

    In Python habe ich mich mittlerweile gut eingefunden, aber das hier sind Themen die momentan meinen derzeitigen Horizont sprengen.


    Du brauchst immer einen angemeldeten User. Sonst kann (nach Erreichen des Multiuse Levels) das Ausgabegerät keiner Shell (Programm) zugeordnet werden. Probiere halt einmal #19.


    Servus !

    Soll ich aus der .bashrc direkt ExecStart=/usr/bin/python3 /home/pi/Frontend/main.py aufrufen ?

    noisefloor Meine kurze Recherche ergab das hier: https://learn.adafruit.com/pi-…pygame-to-the-framebuffer


    Soweit ich das am Telefon erkennen kann, wird da kein X verwendet.

    Ich versteh nicht ganz was die in dem Link treiben.

    "Pointing Pygame to the Framebuffer"

    Was ist der Framebuffer ?


    Um nochmal auf die Variante mit dem Script zurück zu kommen.

    Macht es einen Unterschied ob ich es in einem Cron-Job starte oder über init.d ?


    Einige scheinen Erfolg damit zu haben ein Script über ~/.config/lxsession/LXDE-pi/autostart zu starten.

    Da ich jedoch Raspbian lite benutze habe ich kein LXDE oder sehe ich das falsch ?

    Ist es möglich und macht es sinn LXDE nach zu instalieren ?

    (letztendlich nehme ich ja lite weil ich ein schlankes Betriesystem möchte)

    Ich habe nun schon einiges gegoogelt und es hat den Anschein als sei das grundsätzlich nicht so einfach ein Pygame Programm in den Autostart zu bekommen.

    Einige scheinen das Problem über den Aufruf eines Service in den Griff bekommen zu haben.

    Wenn ich einen einfachen Service erstelle und diesen ausführe, Startet mein Programm ebenfalls.:

    Code
    #! /bin/sh
    sudo python3 /home/pi/Frontend/main.py

    Versuche ich den Service dann jedoch über einen Cron-Job nach dem Booten zu starten, klappt es auch nicht.

    Was ist eine DE ?

    Mir ist noch eingefallen, dass ich in raspi-config Boot/Auto Login noch Desktop / CLI and Console Autologin aktiviert hatte.

    Habe nun mal wieder auf Console umgestellt und erhalte jetzt weniger Meldungen. Aber laufen tut es immer noch nicht.


    Die Datei /home/pi/.Xauthority existiert !

    Leider funktioniert das auch nicht:

    Du schreibst, dass das Programm manuell gestartet läuft, also fehlt imho dem Autostart vermutlich nur die Angabe, wo das Programm angezeigt werden soll.


    Du könntest es mal so

    Code
    ExecStart=DISPLAY=:0 /usr/bin/python3 /home/pi/Frontend/main.py

    oder so ähnlich versuchen.


    So bekomme ich eine Fehlermeldung:

    Apr 28 09:36:13 raspberry systemd[1]: /etc/systemd/system/Frontend.service:6: Executable "DISPLAY=:0" not found in path

    Über eine .desktop Datei im Autostart-Verzeichnis eines Users kann ein Grafikprogramm gestartet werden.


    Servus !


    Bei pi os light muss die Grafik (X-Org) nachinstalliert werden.

    Verstehe nicht ganz die Konsequenz, sind jetzt die Berechtigungen das Problem ?

    Wieso kann ich das Programm manuell starten, aber nicht über den Service ?

    Werden in deinem Programm durchwegs absolute Pfade verwendet?

    Wobei das eigentlich WorkingDirectory=/home/pi/Frontend richten dürfte.


    Wie ist die Ausgabe von journalctl -u Frontend.service

    In dem Programm arbeite ich mit filepath = os.path.dirname(__file__), sollte also passen.


    journalctl -u Frontend.service gibt mir folgende Ausgabe:

    Code
    pi@raspberry:~$ journalctl -u Frontend.service
    -- Logs begin at Tue 2021-04-27 16:19:17 CEST, end at Wed 2021-04-28 08:35:32 CEST. --
    Apr 27 16:19:32 raspberry systemd[1]: Started Frontend Service.
    Apr 27 16:19:36 raspberry systemd[1]: Frontend.service: Main process exited, code=killed, status=1/HUP
    Apr 27 16:19:36 raspberry systemd[1]: Frontend.service: Succeeded.
    Apr 28 08:35:21 raspberry systemd[1]: Started Frontend Service.
    Apr 28 08:35:24 raspberry systemd[1]: Frontend.service: Main process exited, code=killed, status=1/HUP
    Apr 28 08:35:24 raspberry systemd[1]: Frontend.service: Succeeded.


    Was sagt sudo journalctl -e --unit Frontend?


    Es gibt viele Möglichkeiten, wieso dein Programm nicht läuft.


    Sicher, dass alle Abhängigkeiten Systemweit verfügbar sind?

    sudo journalctl -e --unit Frontend gibt mir folgende Ausgabe:

    Und ich bin mir nicht zu 100% sicher, dass alle Abhängigkeiten Systemweit verfügbar sind.


    pi@raspberry:~$ sudo systemctl try-reload-or-restart Frontend.service funktioniert auch nicht.


    Klingt für mich erstmal wie ein Programm mit grafischer Benutzeroberfläche (GUI). Wo soll denn dieses Programm gestartet werden und was macht das?

    Es handelt sich um ein mit Pygame geschriebenes GUI zur Visualisierung von Daten die über MQTT rein kommen.

    Kann die Grafische Ausgabe das Problem sein ?

    Was meinst du mit "Wo soll denn dieses Programm gestartet werden.." ?

    Hallo,

    ich würde gerne ein Programm, über einen .service, nach dem hochfahren des Raspberry starten.

    Das PythonProgramm liegt unter /home/pi/Frontend/main.py.

    Der dazu geschriebene Service liegt unter /etc/systemd/system/Frontend.service und hat folgenden Inhalt:

    Starte ich das Programm direkt über sudo python3 /home/pi/Frontend/main.py läuft es ohne Probleme.

    Starte ich Frontend.service über sudo systemctl start Frontend.service erhalte ich folgenden Status:

    Code
    pi@raspberry:~$ sudo systemctl status Frontend.service
    ● Frontend.service - Frontend Service
       Loaded: loaded (/etc/systemd/system/Frontend.service; enabled; vendor preset: enabled)
       Active: inactive (dead) since Tue 2021-04-27 16:08:05 CEST; 9s ago
      Process: 4512 ExecStart=/usr/bin/python3 /home/pi/Frontend/main.py (code=killed, signal=HUP)
     Main PID: 4512 (code=killed, signal=HUP)
    
    Apr 27 16:08:02 raspberry systemd[1]: Started Frontend Service.
    Apr 27 16:08:05 raspberry systemd[1]: Frontend.service: Main process exited, code=killed, status=1/HUP
    Apr 27 16:08:05 raspberry systemd[1]: Frontend.service: Succeeded.

    Das gleiche Problem tritt auf, wenn ich alles direkt im /home/pi Verzeichnis versuche.

    Habe das Programm selber nicht gepostet, da es recht umfangreich ist. Kann es aber gerne nach holen sollte es von nutzen sein.

    Mich irritiert, dass es normal läuft wenn ich es direkt starte nicht aber wenn ich es über den Service starten möchte !?

    Nun ist mir einiges klar geworden.

    Ich unterlag da einem grundsätzlichem Irrtum.

    diff -uNr DATEI1 DATEI2 > DIFFDATEI.diff

    Schreibt die Unterschiede in DIFFDATEI.diff.

    Ich ging davon aus, dass ich mit dem Befehl DATEI1 öffne und die Änderungen wie sie in DIFFDATEI.diff gespeichert sind drauf anwende und in DATEI2 speichere.

    Ich versuche einige Zeilen in einer Datei mittels eines Patch anzupassen.

    Ich probiere mich gerade im schreiben von Patchdateien.

    Um ein Grundverständnis für die Thematik zu bekommen habe ich versucht folgendes Beispiel nachzuvollziehen:

    Patchdatei erstellen

    Ich habe mir unter /home/pi zwei Dateien angelegt, DATEI1 und DATEI2 (wie im Beispiel).

    DATEI1:

    Code
    gleich
    auch gleich
    wieder gleich
    Unterschied 1
    Unterschied 2
    Unterschied 5

    DATEI2:

    Code
    gleich
    auch gleich
    wieder gleich
    Unterschied 3
    Unterschied 4

    Dann habe ich eine DIFFDATEI.diff geschrieben:

    Leider bekomme ich beim Ausführen der .diff lediglich die Meldung: bash: DIFFDATEI.diff: Keine Berechtigung

    Unabhängig ob ich ein sudodavor hänge oder nicht.

    Was mache ich falsch ?

    Ein paar Ideen:

    • Ein Cronjob
    • Ein Systemd-Timer
    • Ein laufender Daemon, der alle 45 Minuten etwas aktiver ist als sonst

    Solltest du eigentlich sehr einfach herausfinden können, indem du bei der nächsten Schwankung die laufenden Prozesse und deren Anteil an der CPU-Auslastung anschaust - wann das ist, kannst du ja ausrechnen ;)

    Es scheint Chromium zu sein:

    Gibt es eine Möglichkeit genauer herauszufinden was Chromium da treibt ?

    Ich lasse mit dem Start des Raspberry eine Grafana-Seite in Chromium anzeigen, Chromium wiederum läuft in Openbox.

    Ich habe die CPU-Load nun mal in eine Datenbank geschrieben und das Pi einfach mal eine Weile laufen lassen.

    Dabei ist mir aufgefallen das die Auslastungen festen Schwankungen mit einer Periode von ca 45min unterliegt !?

    Womit kann das nun wieder zusammenhängen ? In meinem Programmen habe ich keine solchen Intervalle und es gab auch keinen Zugriffe über SSH oder ähnlich.

    (Die drei Verläufe zeigen die CPU-Load 1min, 5min und 15min)