Eigenes Programm im Autostart von x11

  • Hallo,

    ich weiß, dass es dieses Thema schon öfter gab, versuche jetzt aber schon die verschiedensten Variationen und keine Lösung funktioniert auf mein Problem. Ich bin absoluter Neuling, was Linux und Raspi angeht.

    Nun aber mal zu meinem Problem...
    Ich habe den Raspi soweit, dass er beim Anschalten ohne Passwortanfrage in das x11 vom root startet.
    Jetzt möchte ich aber mein selbstgeschriebenes Programm von Python im Autostart haben. Es soll also nachdem der Desktop hochgefahren ist das selbstgeschriebene Programm selbstständig geöffnet werden. Dies ist nötig, da ich eine grafische Oberfläche im tkinter benutze und dieser ohne x11 nicht ausführbar ist.
    Habe das Pythonskript schon mit chmod ausführbar gemacht.

    Folgende Variationen habe ich schon ausprobiert:
    1.) Aufruf in rc.local:
    su -l root -c startx

    -c /root/Desktop/Projekt/Bedienoberflaeche.py
    und viele weitere Kommandoaufrufe die ebenfalls nicht zum Erfolg führten (ich habe gehört, dass es ist im rc.local nicht so elegant ist)
    2.) Aufruf in init.d:
    -start/stopDatei zu erstellen und diese auszuführen zu lassen
    -Aufruf über .Desktop file in Autostart
    3.) Aufruf in crontab:
    über crontab -e und dann @reboot /root/Desktop/Projekt/Bedienoberflaeche.py
    und noch viele andere Variatonen, die mir nicht mehr einfallen^^... ich bin wirklich verzweifelt, also bitte keine dummen Kommentare...

    Bitte helft mir!!!! :danke_ATDE: schon mal im Vorraus. :heart:

    • Offizieller Beitrag

    Hiho, wenn du ein Programm starten willst das eine grafische Oberfläche voraus setzt, sind rc.local und Co. der vollkommen falsche Ansatz ;)
    Mehr dazu hier.

    also die Kurzform:

    du erstellst einem Starter in /etc/xdg/autostart/pythonscript.desktop

    Code
    nano /etc/xdg/autostart/


    mit folgendem Inhalt

    Code
    [Desktop Entry]
    Name=MeinTollesPythonScript
    Exec=/path/to/your/python/file
    Terminal=false
    Type=Application

    darauf Achten das dein python Script auch eine gültige Shebang gesetzt hat, sie ausführbar ist und natürlich den Pfad in der Exec Zeile anpassen ;)
    nach nem neustart sollte das so klappen

    Edit: Dateinamen hinzugefügt...war mir abhanden gekommen ;)

  • Prüf zunächst ob das Script ausführbar ist und ob in der ersten Zeile der Interpreter (shebang) steht - ansonsten musst du das Script mit Angabe des Interpreters ausführen..
    Da es ein python Script ist müsste also entweder die ersten Zeile im Scriptfile so aussehen:

    Python
    #!/usr/bin/python

    oder so:

    Code
    #!/usr/bin/env python

    Ansonsten den Interpreter nutzen um das Script auszuführen:

    Code
    python /root/Desktop/Projekt/Bedienoberflaeche.py

    Genauere Erklärungen dazu findest du hier:
    Automatisches Starten von Scripte / Programme ( Autostart )
    https://www.forum-raspberrypi.de/Thread-tutorial-crontab-cron-jobs

    Ich weiss nicht genau was du bei deinem 1.Punkt versuchen wolltest? Du schreibst doch im ersten Satz das X11 (LXDE) bereits gestartet wird?
    Wenn dem wirklich so ist, der Benutzer sich also bei Systemstart automatisch anmeldet, kannst du über deren " .profile " Datei ein Script ausführen lassen..

    Deine bisherigen Versuche können laut deiner eingangs beschriebenen Bedingung nicht funktionieren da dein Python Script X11 benötigt, aber deine 1/2/3 Versuche (und auch .profile) sind quasi für die Console, werden also unabhängig von X11 ausgeführt...

    Ansonsten wird vermutlich das hier besser passen: http://wiki.lxde.org/en/Autostart und http://kellerleiche.bplaced.net/PCLinuxOS-de-M…009/page10.html

  • Hallo dbv,

    danke schon mal für deine schnelle Antwort.

    Ich habe ein gültiges Shebang ... im Codeanfang steht:

    Code
    #!/usr/bin/env python

    ich habe jetzt versucht einen Starter wie beschrieben mit

    Code
    nano /etc/xdg/autostart/


    zu erstellen mit folgendem Code:


    und auf speichern gedrückt.
    Es erstellt auch ein file unter Desktop... aber bei reboot funktioniert nichts....

    Habe ich irgendwas falsch gemacht? oder irgendwelche Tipps, warum es immer noch nicht funktioniert?!?

  • hallo meigrafd,

    ich habe mir schon gedacht, dass das Problem dadran liegt, dass ich das Programm aus dem x11 autostarten möchte und die Lösungen 1/2/3 für die Console sind...

    Habe deine zwei letzten Links mir angeschaut. Der erste Link denk ich ist wie die Lösung von dbv. Die Lösung vom zweiten Link hab ich so ähnlich schon ausprobiert, jedoch hat dies auch nicht funktioniert. Liegt das Problem vllt daran, dass ich mich unter root anmelde?! Könntest du mir die Lösung des zweiten Links evtl. besser erklären?


  • ich habe jetzt versucht einen Starter wie beschrieben mit

    Code
    nano /etc/xdg/autostart/

    Das ist keine Datei sondern ein Verzeichnis.
    Du musst da schon noch eine Datei dazu schreiben also zB:

    Code
    nano /etc/xdg/autostart/bedienoberflaeche.desktop


    Die Datei muss ausserdem die Dateiendung .desktop haben

    Und sicherstellen dass das Script auch ausführbar ist:

    Code
    chmod +x /root/Desktop/Projekt/Bedienoberflaeche.py


    Liegt das Problem vllt daran, dass ich mich unter root anmelde?!

    Nein root ist super, root darf alles

  • Hallo
    Nach einigem Probieren hab ich es den auch nach dieser Anleitung hin bekommen.
    Danke erstmal an dieser Stelle.
    Bei mir Blitzt, kurz bevor das Script startet, noch kurz die Desktopoberfläche auf. Bekommt man das auch noch wech. Das Quasi ein Nahtloser Übergang entsteht?

  • PappaBär83 Das ist vermutlich nicht vermeidbar. Der Desktop lädt halt und dann erst das Programm von dir... Einfacher "Hack": Alles vom Desktop schmeißen inklusive Panel (die Leiste mit Uhrzeit, Programmen etc.) und den Desktophintergrund schwarz machen (Oder bsp. orange wenn dein Programm ne orangene UI hat). Dann sollte man vom Desktop so nix mehr sehen.

    LG

  • Das scheint mir recht drastisch entgültig, wenn auch wirkungsvoll.
    Leider hab ich immer nur gute Ideeen jedoch kaum ne Ahnung was die Umsetztung betrifft.
    Also:
    - kann man dem Bildschirm nicht sagen Schalte dich nach ner Nutzeranmeldung, vor der Desktop-Iniatilisierung, für z.B. 10 sek aus. Dann hätte das Script zeit zu starten und der Desktop blitzt nicht auf.
    (ich nutz nen Pi3, den 7"Pi-Touch und Raspbian Jessie)
    Sollte dann das Script doch nicht starten oder Fehlerbehaftet stoppen, geht zumindest der Bildschirm wieder an.

  • Entweder was Manul geschrieben hat oder: Wenn du den Bildschirm ausschalten willst und auch schon Python benutzt kann ich dir dieses Projekt von mir (https://github.com/linusg/rpi-backlight) ans Herzen legen. -> Regelt Helligkeit und an/aus vom 7" Touch LCD der Foundation. Kannste zum Beispiel irgendwo in xinit so aufrufen:

    Code
    python3 -c "import rpi_backlight as bl; bl.set_power(False)"

    Nur so als Idee.

  • Desktop brauch ich überhaupt nicht. Ich benötige die Möglichkeit Bilder darzustellen, die Touchfunktion und die Soundkarte um Mp3's akustisch wiederzugeben.
    So mein jetztiger Kenntnissstand: Wenn ich jedoch meinen Pi nicht im Desktop starte bekomm ich meine Python-Oberfläche (mein Script) nicht gestartet.
    Ich bin gern bereit was neues Auszuprobieren. Nur fehlen mir die Stickworte unter denen ich Googeln könnte.

  • Um die graphische Oberfläche darzustellen, brauchst Du keinen Desktop, sondern einen X-Server. Der startet unter Raspbian normalerweise automatisch die Desktop-Session bzw. einen Login-Manager, der das dann nach erfolgter Anmeldung tut, das kann man aber auch anders konfigurieren. Ein mögliches Stichwort zum Websuchen habe ich Dir oben gegeben.

  • So ungefähr:

    - Per raspi-config boot zum Desktop *ohne* automatisches Anmelden einrichten.
    - sudo apt-get install nodm
    -- dabei werden Dir ein paar Fragen gestellt. Beim boot starten: Ja, Nutzer: Der Nutzer, unter dem Dein Programm laufen soll. Optionen: "-nolisten tcp", wenn Du einen Touchscreen hast und keinen Mauszeiger sehen willst auch noch "-nocursor", Xsession /etc/X11/Xsession
    - nodm als Default-Display-Manager einstellen:

    Code
    sudo sh -c "echo /usr/sbin/nodm > /etc/X11/default-display-manager"


    - Datei .xsession im Homeverzeichnis des Nutzers nach Bedarf anpassen:

    Code
    # Die folgenden drei Zeilen verhindern das automatische Ausschalten des Bildschirms:
    xset -dpms
    xset s noblank
    xset s off
    # Hier wird dann Dein Programm gestartet
    exec /pfad/zu/deinem/skript.py

    So funktioniert's zumindest bei mir...

  • :s ich hab das so gemacht wie du beschrieben hast. leider passt das bei mir nicht.


    erst hab ich nodm intalliert dann überraspi-conifg -automatsches anmelden ohne Desktop- ausgewählt, dann /etc/X11/Xsession nach deinen Vorschlägen angepasst.
    -> geht nicht
    erst kamm das : https://pl.vc/tk3ve
    dann hab ich das hinzugefügt: https://pl.vc/jd56a
    nach einem reboot passierte nix. nach dem wechsle in /home/pi/Desktop/ kamm das : https://pl.vc/1e0hhz
    nach einem manuellen Start (wie gewohnt beim scripten -> fehlersuchen-> scripten ->...) im Terminal sudo python /home/pi/Desktop/hoespielbox7.py war die Mousposition unsycron zur angetouchten Fläche/Posiotion :s
    igrgendwo ist danoch gewaltig der Wurm drin.
    ... und während ich dies hier schreibe schaltet sich der Pi-Bildschirm wieder Dunkel (Hintergrundbeleuchtung ist noch an jedoch ist das Bild auf schwarz geschlatet).
    :s
    :angel:
    :helpnew:

Jetzt mitmachen!

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