Autostart von Programmen ohne GUI - Alternative zu /etc/rc.local

  • Hallo,
    ich habe mal wieder eine Frage! :D

    Wo kann ich Programme für den Autostart eintragen, ohne vorher die GUI zu laden?
    Ich finde viele Tutorials, wo immer was im Autostart ist.
    Aber ich erkenne ehrlichgesagt die Unterschiede nicht wirklich....
    Bisher habe ich das immer in der Datei /etc/rc.local eingetragen.
    Nun habe ich aber gelesen, dass das Programm dann mit ROOT Rechten gestartet wird.

    Warum frage ich das?
    Die ursprüngliche Frage ist, wie ich einen Browser unter Raspbian Lite im Autostart starte.

    Ich möchte einen Browser im Autostart starten, um eine Visu anzuzeigen.
    Dazu habe ich Raspbian Lite + Pixel + Browser installiert und diesen in die o.g. Datei eingetragen.
    Funktioniert auf meinem RPi2 mit epiphany einwandfrei.

    Auf einem Revolution Pi (Compute Modul) funktioniert das nicht so, wie es soll. Ich habe 3 Browser in folgender Reihenfolge probiert:

    epiphany: Der Browser startet im Autostart, aber die Webseite läd andauernd neu und stockt...

    Code
    matchbox-window-manager -use_titlebar no & WEBKIT_DISABLE_TBS=1 epiphany-browser -a --profile /home/pi/.config  http://Site

    midori: Der Midori startet auch automatisch, die Webseite wird einwandfrei angezeigt, aber ich kann nix bedienen. Der Touch und die Maus geht nicht.

    Code
    matchbox-window-manager & midori -e Fullscreen -a http://Site

    chromium: Der Chromium meldet beim Autostart, dass er mit ROOT Rechten gestartet wird und die Option --no-sandbox brauch. Mit der Option wird aber immer eine Meldung oben eingeblendet. Auch hab ich ja nun gelernt, dass das mit den ROOT Rechten dumm ist. :)

    Code
    matchbox-window-manager & chromium-browser --noerrdialogs --kiosk --incognito http://Site

    Ich hab mittlerweile einige Tutorials gelesen. Werde aber grundsätzlich nicht schlau, wo ich was zu welcher Zeit im Autostart eintragen muss.
    Hat da jemand was zum Nachlesen?

    Danke!

  • Autostart von Programmen ohne GUI - Alternative zu /etc/rc.local? Schau mal ob du hier fündig wirst!

  • Wenn du nur einen Browser starten willst brauchst du keine vollständige Desktopumgebung ala PIXEL. Es reicht dann ein Window-Manager wie zB matchbox, den kann man separat/eigenständig ohne PIXEL installieren/nutzen.
    Eine Desktop-Umgebung besteht immer aus mehreren Teilen, sog. Manager. Auch gibt es unterschiedliche Manager, manche können nur ein Fenster auf ein mal anzeigen (matchbox) andere können mehrere anzeigen...

    Unter Desktop oder Grafische Oberfläche versteht man generell eine sog. GUI: Graphical User Interface. Also eine Oberfläche die sich zumeist mit einer Maus steuern lässt. Es gibt aber auch eine TUI "Text User Interface" wozu zum Beispiel das bash Script "raspi-config" gehört, die benötigen kein Desktop.....

    Wenn du ein Programm oder Script automatisch bei Systemstart ausführen willst, hängt es vom jeweiligen Programm/Script ab welche Autostart-Möglichkeit die beste wäre... Denn wenn es eine grafische Ausgabe erzeugt wird in 80% der Fälle auf die Ausgabe von X11 bzw X-Server zurück gegriffen - so auch bei einem Browser wie Chromium oder Epiphany usw. Nur wenn man direkt Framebuffer o.ä. verwendet wäre es davon unabhängig...
    Bedeutet für deinen Fall:
    Dein Programm/Script kann erst dann gestartet werden wenn X11 oder eben ein Window-Manager bereits läuft. Und das wiederum bedeutet das Autostart-Möglichkeiten wie über /etc/rc.local oder @reboot in crontab nicht in Frage kommen da diese viel früher ausgeführt werden, eben zu früh.

    FAQ => Nützliche Links / Linksammlung => Autostart => Desktop

    Ich empfehle dir aber auch noch ein Bild hierauf zu werfen: FAQ => Nützliche Links / Linksammlung => Kiosk

  • Hi.

    Dass ich kein Pixel brauch, dachte ich mir.
    Ich weiß aber nicht, wie ich weniger installiere, bzw. rausfinde, was ich benötige.
    Vorherige Versuche sind gescheitert. Erst der Versuch mit Pixel hat geholfen.

    Ich habe also Raspbian Lite installiert, dann Pixel, dann den Browser.
    Im Raspi-Config habe ich dann auf Console umgestellt und den Startbefehl in der /etc/rc.local ergänzt.
    Wie beschrieben hatte das aber mit epiphany und midori geklappt.

    Wenn ich in der Datei vor den Browser folgendes einfüge, wird er dann nicht als root gestartet?
    [font="monospace"]

    Code
    su pi -c "mein Befehl zum Starten des Browsers &"

    [/font]
    Das könnte ich dann nämlich für den RPi 2 nehmen, wo die GUI schon drauf ist und der epiphany beim Start geladen wird. Aber halt in der /etc/rc.local.

    Für den Revolution Pi würde ich bei Gelegenheit mal dein Kiosk Tutorial probieren.
    Das würde dann ja genau das machen, was ich möchte. Vermutlich mit der höchsten Performance.

    Trotzdem fürs Verständnis:
    Wären das die zwei Wege, die ich für den Autostart gehen kann?
    a) beim Start in die Console die Datei rc.local nutzen, jedoch die Nutzerrechte einschränken (unter der Voraussetzung, dass oben der Befehl geht)
    b) beim Start in die GUI eine .desktop Datei

    Danke


  • ungetestet, sollte theoretisch aber funktionieren:

    Schreib' dir zum Starten eine systemd Service Unit und setzt' die Direktive:

    Code
    After=graphical.target


    Das funktioniert nicht, um den Browser zu starten.


    Wenn ich in der Datei vor den Browser folgendes einfüge, wird er dann nicht als root gestartet?
    [font="monospace"]

    Code
    su pi -c "mein Befehl zum Starten des Browsers &"

    [/font]


    Nein, als User pi und das solltest Du tunlichst lassen.... zumal du den Browser dann im Anschluss als irgendeinanderer User sowieso nicht sehen könntest.... selbst wenn du ihn so starten könntest.

    Du kannst keinen Browser in der rc.local starten. Das geht nur über den "Autostart" des Windowmanagers. Vor Pixel war das openbox... keine Ahnung, was da jetzt läuft... aber das kann man ja leicht herausfinden... und der Browserstart klappt nur da problemlos. Alles andere halte ich für Pfusch.

    Einmal editiert, zuletzt von WinterUnit16246 (24. Februar 2017 um 23:20)


  • ungetestet, sollte theoretisch aber funktionieren:

    Schreib' dir zum Starten eine systemd Service Unit und setzt' die Direktive:

    Code
    After=graphical.target


    Das versteh ich nicht... :D Aber es klappt ja anscheinend eh nicht ?!? Auch wenn ich nicht weiß, warum...


    Nein, als User pi und das solltest Du tunlichst lassen.... zumal du den Browser dann im Anschluss als irgendeinanderer User sowieso nicht sehen könntest.... selbst wenn du ihn so starten könntest.

    Du kannst keinen Browser in der rc.local starten. Das geht nur über den "Autostart" des Windowmanagers. Vor Pixel war das openbox... keine Ahnung, was da jetzt läuft... aber das kann man ja leicht herausfinden... und der Browserstart klappt nur da problemlos. Alles andere halte ich für Pfusch.


    Warum sollte ich das genau lassen?
    Und warum sollte ich ihn als anderer User sehen wollen?
    Ich starte ihn doch und zeige ihn an. Das funktioniert ja auch bisher soweit. Nur habe ich halt gelernt, dass er dann wohl als root läuft. Und das ist wohl nicht so gut. :)
    Wäre schön, wenn du mir erklärst, warum du das für Pfusch hälst und was daran so falsch ist. Ich möchte das gerne verstehen!
    Für mich klingt es eigentlich sehr sinnvoll, nicht die GUI zu starten, sondern direkt den Browser mit dem Window Manager zu starten. Deshalb frage ich.

  • Hallo,

    @ThomasL:

    Zitat

    Das funktioniert nicht, um den Browser zu starten.


    Weil...? Einfach so eine Behauptung in den Raum stellen bringt nix.

    LMDaniel999

    Zitat

    Das versteh ich nicht...


    systemd ist der der init-Dienst von Raspbian Jessie (wie auch den allermeisten anderen Linux-Distro), d.h. systemd regelt, wann was gestartet wird. Der Start von Diensten / Skripten erfolgt über die Service Untis. Darin sind Direktiven enthalten, was die Service Unit machen soll.

    Eine (der vielen) Direktive ist `After=xxxxxx.target`. Damit wird festgelegt, dass die Unit erst gestartet wird, wenn ein bestimmter Punkt, im systemd Jargon "Target", erreicht ist. Erst dann wird die `Exec= ...` Direktive der Unit ausgeführt, in der der eigentliche Befehl zum Starten des Programms steht.

    Mit `After=graphical.target` wird sichergestellt, dass der XServer und ein paar anderen Sachen schon laufen. Du brauchst für den Browser ja eigentlich "nur" den XServer, aber OOTB gibt es bei systemd kein Target, dass "nur" der XServer läuft.

    Wie gesagt, ob's funktionier weiß ich nicht - aber ein systemd Service Unit schreiben ist auch nur ein Ding von 5 Minuten, wäre IMHO also einen Versuch wert.

    Gruß, noisefloor

  • Weil...? Einfach so eine Behauptung in den Raum stellen bringt nix.

    Dann erkläre mir bitte mal, warum die Qualität meiner Behauptung schlechter ist, als die Deiner Behauptung, das es funktionieren sollte....

    ungetestet, sollte theoretisch aber funktionieren:
    Schreib' dir zum Starten eine systemd Service Unit und setzt' die Direktive:::::


    ...wenn keine passende Service-Unit als Beispiel gezeigt wird und gleichzeitig darauf verzichtet wird zu erklären, dass Systemd ein Service-Manager ist, dessen primäre Aufgabe lt. Man-Page wie folgt lautet:
    "systemd is a system and service manager for Linux operating systems. When run as first process on boot (as PID 1), it acts as init system that brings up and maintains userspace services."

    Darüber hinaus verzichtest Du auf die Erwähnung, dass eine normal gestartete Service-Unit im Service-Manager des Systems behandelt wird, also von Root gestartet wird und das von dort sowieso kein Zugriff auf den X-Server des Users besteht.

    Weiterhin verzichtest Du darauf, auf die Nebensächlichkeit hinzuweisen, dass systemd primär ein Service-Manager ist, dessen Aufgabe Start, Stop und Überwachung von Daemons ist und auf die Besonderheit von Daemons, dass die üblicherweise gar kein GUI oder irgendeine grafische Dialog-Schnittstelle für den User beinhalten.

    Der Vollständigkeithalber hättest auch darauf hinweisen müssen, dass man es vielleicht versuchen kann, eine Unit mit dem Start einer grafischen Anwendung explizit im Service-Manager des Users zu starten, aber das dabei auch die Gefahr besteht, durch manuelles Schließen eines Prozesses dem Service-Manager ins Handwerk zu pfuschen. Ob das Konsequenzen hat...keine Ahnung... ist auf jeden Fall unschön.
    Wie so etwas allerdings gehen würde, ist hier beschrieben, aber auch hier wird darauf hingewiesen, was die eigentliche Verantwortung von systemd/User ist. Der letzte Satz ist hier der spannende:
    "This is convenient for daemons and other services that are commonly run for a single user, such as mpd, or to perform automated tasks like fetching mail. With some caveats it is even possible to run xorg and the entire window manager from user services."

    "With some caveats" = "Mit einigen Einschränkungen" (!!!)

    Ausserdem hättest Du darauf hinweisen müssen, dass es einiges an Aufwande bedarf, um überhaupt eine Unit mit einer App, die den User-X-Server benötigt, zu starten.... also völlig sinnloser und übertriebener Aufwand.

    Die Lösung für den Autostart ist ziemlich einfach und kann hier nachgelesen werden. Und sogar hier sind unterschiedliche Lösungen zwischen Daemons und grafischen Anwendungen auf den ersten Blick deutlich erkennbar. Der richtige Weg ist, wie ich schon sagte, der traditionelle "Autostart". Wie das geht, ist vermutlich auf der genannten Seite unter "lxcd" abzuleiten, was der Anwendung unter "pixel" vermutlich am nächsten kommt.

    Einmal editiert, zuletzt von WinterUnit16246 (25. Februar 2017 um 20:33)

  • Hallo,

    Zitat

    ...wenn keine passende Service-Unit als Beispiel gezeigt wird und gleichzeitig darauf verzichtet wird zu erklären...


    ich gebe Hilfe zur Selbsthilfe und liefere keine Lösungen auf dem Silbertablett. Außerdem habe ich nicht die Intention, in einem Post systemd komplett zu erklären - systemd ist nämlich gut dokumentiert.

    Aber immerhin habe ich dich dazu gekriegt, dich mal mit systemd zu Beschäftigen. Verbuche ich dann als Teilerfolg ;)

    Gruß, noisefloor

  • Ich hatte sogar schon mal angefangen ein Tutorial für Autostart zu schreiben weil das hier im Forum nicht wirklich übersichtlich ist .... Allerdings ist das schon ziemlich umfassend, weshalb ich irgendwann die Lust wieder verloren hab...


    Anno 2015 erstellt... Vielleicht hat ja jmd anderes Lust das weiter zu schreiben :daumendreh2:

  • Aber immerhin habe ich dich dazu gekriegt, dich mal mit systemd zu Beschäftigen. Verbuche ich dann als Teilerfolg


    *lol*... der war echt gut.... *loool*... dafür hast echt das Karnevals-Prinzen-Käppi verdient.....

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!