Forum: PC Hard- und Software Raspi: Autostart übertreibt?


von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich habe eine GUI-App geschrieben, die auf einem Raspi4 unter Raspian 
mittels Autostart-Option gleich nach dem Boot loslaufen soll. Das habe 
ich mit einem Eintrag in:

sudo nano /etc/xdg/lxsessions/LXDE-pi/autostart (Enter)

und

@/home/userfolder/filefolder/appfolder/appname

getan. Den Eintrag gibts auch definitiv nur einmal. Prinzipiell 
funktioniert das auch, aber:

Wenn ich die automatisch gestartete App (nach einem Neustart, z.B. mit 
sudo reboot) über einen in der GUI enthaltenen Button beenden will, muss 
ich das jedesmal 6 mal tun, bis endlich "Ruhe" ist, so oft verschwindet 
und öffnet sich das Fenster der App immer wieder.

Starte ich die App jedoch manuell per Doppelklick, genügt ein einmaliges 
Beenden per Button. An der App liegt es also wahrscheinlich nicht.

Es gibt zwar Schlimmeres, stört mich aber schon irgendwie. Was könnte 
die Ursache sein?

von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


Lesenswert?

Frank E. schrieb:
> Was könnte die Ursache sein?

Da bei Linux der Code of Cunduct mittlerweile wichtiger sind, als die 
Qualität des Codes, scheint das Autostartverzeichnis mehrfach 
durchlaufen zu werden.

Hänge mal vorne dran ein Script, das prüft, ob der Prozess schon online 
ist.

Mit so einem Befehl, wie diesen, prüfe ob die Anwendung wirklich 6x 
offen ist.
1
ps ax | grep xfce4-d
2
 657187 tty1     Sl     0:01 xfce4-display-settings -m
3
 658752 tty1     Sl     0:01 xfce4-display-settings -m
4
 660926 pts/3    S+     0:00 grep --color=auto xfce4-d

von Hmmm (hmmm)


Lesenswert?

Frank E. schrieb:
> @/home/userfolder/filefolder/appfolder/appname

Frank E. schrieb:
> Wenn ich die automatisch gestartete App (nach einem Neustart, z.B. mit
> sudo reboot) über einen in der GUI enthaltenen Button beenden will, muss
> ich das jedesmal 6 mal tun

Genau dieses Verhalten (beim Beenden neu starten) forderst Du mit dem @ 
davor explizit an.

Dieter D. schrieb:
> Da bei Linux der Code of Cunduct mittlerweile wichtiger sind, als die
> Qualität des Codes

Nimm Deine Tabletten, Dummschwätzer.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Hmmm schrieb:

> Genau dieses Verhalten (beim Beenden neu starten) forderst Du mit dem @
> davor explizit an.

Ok, danke, das wars. Die Funktion des "@" war mir nicht geläufig. Gut zu 
wissen, wenn man es einmal braucht.

> Nimm Deine Tabletten, Dummschwätzer.

Na na, nicht so böse. Das hätte man auch anders schreiben können.

von Rolf M. (rmagnus)


Lesenswert?

Frank E. schrieb:
> Es gibt zwar Schlimmeres, stört mich aber schon irgendwie. Was könnte
> die Ursache sein?

Die Ursache ist, dass du das so angegeben hast.

> @/home/userfolder/filefolder/appfolder/appname

Das vorangestellte @ sagt dem System, dass das Programm automatisch neu 
gestartet werden soll, wenn es aus irgendeinem Grund beendet wurde. 
Vermutlich gibt dein LXDE nach 5 erfolglosen Neustart-Versuchen dann 
auf.
Siehe z.B. https://wiki.ubuntuusers.de/Autostart/#Lubuntu-LXDE

Dieter D. schrieb:
> Da bei Linux der Code of Cunduct mittlerweile wichtiger sind, als die
> Qualität des Codes, scheint das Autostartverzeichnis mehrfach
> durchlaufen zu werden.

Was hat das Autostart von LXDE mit dem Kernel zu tun?

von Hmmm (hmmm)


Lesenswert?

Frank E. schrieb:
> Na na, nicht so böse. Das hätte man auch anders schreiben können.

Schwurbeldieter hat leider bei jedem Linux-Problem das zwanghafte 
Bedürfnis, vom Code of Conduct zu faseln. Scheint ihn sehr zu wurmen, 
dass auch unter Linux-Entwicklern Rassismus, Sexismus & Co. unerwünscht 
sind.

von Rene K. (xdraconix)


Lesenswert?

Auch wenn nicht wirklich "sauber" nutze ich dafür meist einen Cronjob 
der mir beim reboot (via @reboot) ein Programm startet. Nun steinigt 
mich :-D

von Rolf M. (rmagnus)


Lesenswert?

Ein cron-Job ist ok, aber nicht so arg gut geeignet für Programme, die 
auf dem Desktop laufen sollen.

von Dieter D. (Firma: Hobbytheoretiker) (dieter_1234)


Lesenswert?

Frank E. schrieb:
> Na na, nicht so böse. Das hätte man auch anders schreiben können.

Da hast Du recht. Er schießt immer so über das Ziel hinaus. Auf Kritik 
am CoC reagiert er überempfindlich.

Rolf M. schrieb:
> Was hat das Autostart von LXDE mit dem Kernel zu tun?

Das war ein Beispiel, wie der TO den Namen seiner Routine eingeben 
müßte, um zu schauen, ob der Prozess mehrfach vorhanden sein sollte. 
Wenn dieser nur einmal da wäre, müßte man suchen. Auf den Klammeraffen 
hatte ich auch nicht geachtet.

Beim xfce gibt es den Fehler, das der Prozess alle Stunde neu aufgerufen 
wird. Daher vermehrt sich dieser. Ein Fehler, der 2014 und 2019 ähnlich 
war.
https://forums.debian.net/viewtopic.php?t=156364

von Rene K. (xdraconix)


Lesenswert?

Und was hat nun XFCE nun dann mim Kernel bzw dem CoC zu tun?!

von Ein T. (ein_typ)


Lesenswert?

Frank E. schrieb:
> Ich habe eine GUI-App geschrieben, die auf einem Raspi4 unter Raspian
> mittels Autostart-Option gleich nach dem Boot loslaufen soll. Das habe
> ich mit einem Eintrag in:
>
>
1
> sudo nano /etc/xdg/lxsessions/LXDE-pi/autostart (Enter)
2
>
>
> und
>
>
1
 
2
> @/home/userfolder/filefolder/appfolder/appname
3
>

Diese Sache mit dem @-Präfix hat Dir hmmm bereits erklärt, daher möchte 
ich nur auf einige andere Möglichkeiten hinweisen.

Wenn Du die Applikation über /etc/xdg/lxsessions/LXDE-pi/autostart 
startest, wird sie als Benutzer "root" mit all seinen Privilegien 
gestartet. Da das in der Regel aus Sicherheitsgründen keine sonderlich 
gute Idee ist, existieren mehrere Möglichkeiten, um das zu verhindern:

Zunächst kannst Du das Programm als Benutzer-Autostart einrichten. Damit 
wird es in der Datei
1
/home/<username>/.config/lxsession/LXDE/autostart
 (für de RasPi könnte es notwendig sein, daß das Verzeichnis "LXDE" 
stattdessen "LXDE-pi" heißen muß) eingetragen und gestartet, sobald sich 
der betreffende Benutzer einloggt, für den es konfiguriert ist, auch mit 
Autologin. Wenn ein anderer Benutzer sich einloggt, für den der 
Programmstart nicht konfiguriert ist, wird das Programm auch nicht 
gestartet.

Oder wenn das Programm zwar für jeden Benutzer gestartet werden, aber 
unter einer bestimmten Benutzer-Id laufen soll, sind die Befehle
1
su <userid|username> -c '/home/userfolder/filefolder/appfolder/appname'

oder
1
sudo -u <userid|username> /home/userfolder/filefolder/appfolder/appname

(Bitte beachte die Feinheit mit den Quotes.)

Wenn das Programm bei der Initialisierung jedoch Dinge tun muß, die 
einem privilegierten Benutzer vorbehalten sind, kann es nach der 
Initialisierung mit den Systembefehlen set[res]?uid(2) 
undset[res]?gid(2) den Kernel anweisen, mit den dabei angegebenen 
Benutzer- und Gruppenids weiterzuarbeiten.

Wenn Du keinen kompletten Desktop brauchst, sondern nur dieses eine 
Programm immer Fullscreen (sog. "Kiosk-Modus") laufen lassen willst, 
dann kannst Du es mit einem minimalen Windowmanager verwenden und Dein 
Programm als direkten X-Client laufen lassen. Dann läuft unter X 
wirklich nur dieses eine Programm -- auch in diesem Falle gilt das oben 
zu den Privilegien Gesagte. Ich hätte dazu ein Beispiel, mußte 
allerdings eben feststellen, daß das schon zehn Jahre alt, weder an 
systemd noch an andere Entwicklungen der Linuxwelt angepaßt worden und 
daher ohne Anpassungen vermutlich kein hilfreiches Beispiel mehr ist. 
Dennoch wollte ich die Möglichkeit der Vollständigkeit halber erwähnen.

Viel Spaß und Erfolg bei Deinem Projekt! :-)

von Ein T. (ein_typ)


Lesenswert?

Dieter D. schrieb:
> Auf Kritik am CoC reagiert er überempfindlich.

Der Code of Conduct schreibt allerdings nur vor, was unter erwachsenen 
und vernunftbegabten Menschen ohnehin selbstverständlich ist, nämlich, 
sich wie ein verantwortungsvolles Mitglied einer Gemeinschaft zu 
verhalten. Wer das kritisiert, sagt damit etwas sehr, sehr Häßliches 
über sich selbst.

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.