Python Script mit startx über ssh auf RPi starten

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich entwickle gerade ein GUI Programm, welches auf einem kleinen Screen (240x240) am Zero laufen soll.

    Da es mühsam ist, das Programm auf dem Screen mit Lupe zu starten möchte ich dies über SSH durchführen.

    Code
    sudo startx python3 myprog.py

    klappt nicht, da myprog.py als Parameter für startx angesehen wird.

    Was kann ich tun?

    Viele Grüße

  • Python Script mit startx über ssh auf RPi starten? Schau mal ob du hier fündig wirst!

  • PffF, ich kenne mich da so fast garnicht aus! Habe ich bisher nie gebraucht.

    Versuch mal folgendes (braucht startx eigentlich wirklich sudo/root-Rechte?):

    Code
    sudo startx -- :1 && DISPLAY=:1 python3 myprog.py

    Wenn das nicht funktioniert weiß ich auch gerade nicht weiter.

  • Zuviel root tut niemals guit.

    Das Grafiksystem, das mit startx gestartet wird, braucht einen eindeutigen User mit eindeutigem Environement, der bei Eingabe von startx bereits angemeldet ist. Deshalb ist das sudo hier nicht angebracht.

    Mit einem *.desktop File im Autostart Ordner des aufrufenden Users kannst Du Dein Python Programm nach Initialisierung des Grafiksystems automatisch starten.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Hatte ich schon. Nix. Trotzdem danke

    RTFM: Deine Nachricht kam nach meiner. Vielen Dank, aber das ist nicht mein Problem. Wenn das Programm fertig ist, läuft so ab wie Du schreibst (das mit sudo vergess ich immer :( . Danke) .

    Ich möchte das Programm während der Entwicklung von SSH aus starten. Hatte ich oben geschrieben.

  • Ich möchte das Programm während der Entwicklung von SSH aus starten. Hatte ich oben geschrieben.

    Das geht aber nicht, deshalb GUI/startx + *.desktop als autostart.

    Mit SSH startest Du ein Textterminal, während startx auf ein Grafikterminal (mit X.Org) als Benutzeroberfläche umschaltet.

    Da Dein Python Programm grafisch ist, wie Du schreibst, werden alle Ein-/Ausgaben vom SSH Client (Text) zum Grafik Server unterbrochen [bis die Grafikoberfläche beendet wird].

    Wenn Du remote auf die Grafikoberfläche des Pi zugreifen willst, musst Du VNC, oder sowas, verwenden.


    Servus !


    Ed: Deine Syntax von startx stimmt auch nicht < man startx >

    RTFM = Read The Factory Manual, oder so

    Einmal editiert, zuletzt von RTFM (25. November 2022 um 09:06)

  • RTFM

    Aber doch noch mal dazu.

    Mir fällt gerade ein, ich habe ein anderes C-Programm mit grafischer Oberfläche. Das kann ich sehr wohl von SSH aus starten.

    Einfach startx /path/myprog. Fertig. Mit ^C breche ich es wieder ab.

    Mein Problem ist halt, dass das eigentliche Programm ja python ist und der Scriptname falsch interpretiert wird.

    Da hatte ich auf Hilfe gehofft. "python myscritp.py' oder "python myscritp.py" als Parameter geht auch nicht.

    Martin28

    Klappt leider nicht :(

  • Mein Problem ist halt, dass das eigentliche Programm ja python ist und der Scriptname falsch interpretiert wird.

    Setz doch mal den entsprechenden Shebang in das Skript in die erste Zeile, mach das Skript ausführbar und rufe dieses dann direkt (ohne Interpreter davor) auf!

  • Mit "entsprechend" meinst Du "#!/usr/bin/python" ?

    Leider nix. Ausgabe von startx:

    Couldn't get a file descriptor referring to the console.

    Aber mir ist nicht ganz klar, wie es danach aussehen muss.

    Python
    #!/usr/bin/python
    myprog.py

    oder auch

    Python
    #!/usr/bin/python
    /home/pi/gui//myprog.py

    liefert beim direkten Start ohne startx den Fehler: myprog.py unbekannt oder so ähnlich (bin gerade nicht am Rechner)

    Einmal editiert, zuletzt von Kaloschke (25. November 2022 um 21:56)

  • Ed: Deine Syntax von startx stimmt auch nicht < man startx >

    Bei mir steht in < man startx >

    STARTX(1) General Commands Manual STARTX(1)

    NAME

    startx - initialize an X session

    SYNOPSIS

    startx [ [ client ] options ... ] [ -- [ server ] [ display ] options... ]

    DESCRIPTION

    The startx script is a front end to xinit(1) that provides a somewhat

    .... [bitte selbst weiterlesen einschl. SEE ALSO]

    -----------------------------------------------------------------------------

    Sobald Du vom SSH Client X.Org, oder irgendein Grafikprogramm/Window-Manager startest, wird das Texterminal-I/O zum Client unterbrochen. Du kannst aber einen zweiten SSH Zugriff zum pi-SSH Server aufbauen und im Textterminal remote am Pi zumindest ein shutdown o.Ä. durchzuführen.

    Die Anzeige Deines Grafik-Python-Scrips erfolgt aber nur am Pi.

    Laut #6 kannst Du am Pi (zero) direkt startx ausführen und im Grafiksystem (offensichtlich aus einem X-Terminalprogramm) Dein Python Script erfolgreich starten.

    Dann sollte (laut < man startx > et all ) mit

    < startx lxterminal -e /home/pi/myprog.py -- X :0 > funktionieren

    lxterminal ist mit dem X-Terminal Deines OS anzupassen/umzubenennen

    Zwischen -e(xecute) und Py-Programm könnte auch noch Dein Pythoninterpretor stehen, falls das Script alleine nicht startet.

    Passt die Anzeige nicht, musst Du Dich auch noch mit den dots-per-inch des X-Servers auseinandersetzen.


    Servus !

    RTFM = Read The Factory Manual, oder so

    Einmal editiert, zuletzt von RTFM (26. November 2022 um 09:34)

  • Mir fällt gerade ein, ich habe ein anderes C-Programm mit grafischer Oberfläche. Das kann ich sehr wohl von SSH aus starten.

    Das ist aber offensichtlich auch ein komplettes X-Compilat, in das alle X-Libs eingebunden/mitkompiliert sind..

    Ein Script braucht imho immer zur Darstellung der Grafikausgabe ein Grafikterminal(emulationsprogramm), auch in einer *.desktop Datei ist die Angabe "aus Terminal starten" erforderlich, solange nicht das X-Terminal an erster Stelle der exec= steht.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Erstmal danke für die ausführlichen Erläuterungen.

    <man startx> hatte ich oben schon gelesen. Den Rest jetzt auch :)

    Zitat

    Sobald Du vom SSH Client X.Org, oder irgendein Grafikprogramm/Window-Manager startest, wird das Texterminal-I/O zum Client unterbrochen. Du kannst aber einen zweiten SSH Zugriff zum pi-SSH Server aufbauen und im Textterminal remote am Pi zumindest ein shutdown o.Ä. durchzuführen.

    Die Anzeige Deines Grafik-Python-Scrips erfolgt aber nur am Pi.

    Ja, so hatte ich es bei meinem c-Programm während de Entwicklung auch gehalten, bevor ich den Start in die rc.local verlegt habe..

    Okay, habe lxterminal installiert und Deine Zeile oben kopiert und ausgeführt. Ist es Absicht, dass vor dem X oben zwei Bindestriche stehen? Wenn ja, bekomme ich

    Zitat


    Unrecognized option: X:

    Wenn ich es auf einen Bindestrich ändere, erhalte ich u.a.

    Zitat

    /usr/bin/xterm: bad command line option "lxterminal" und
    Couldn't get a file descriptor referring to the console.

    Viele Grüße

  • K.A. wie es bei dem vom TE benutztem OS ist, ich hab nur so in der Erinnerung, dass man vor dem Start eines grafischen Tools dies mit xhost + erlauben musste. Danach das Tool z.B. startx lxterminal -e /home/pi/myprog.py -display 0.0 starten (0.0 ist durch das gewünschte Display zu ersetzen.)

    Falls gar nichts klappt, könnte man ja auch einen Taster an den RPi anschließen und das Tool über ein Script per Tastendruck, direkt auf dem RPi starten und stoppen.

Jetzt mitmachen!

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