Starten eines Python Programm mit Grafik

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
range4200
User
Beiträge: 1
Registriert: Dienstag 12. März 2019, 18:47

Hallo, ich möchte ein Python Programm über einen Schalter aus openHAB2 Basic UI starten.

Habe dazu folgende rule angelegt:

rule "Startet Kompass"

when
Item openHabKompass received command
then
if (receivedCommand==ON ) {
val results = executeCommandLine("/usr/bin/python3@@/etc/openhab2/scripts/kompass2.py",1000)
logInfo("Exec",results)

}
end

Fehler im LOG:

File "/etc/openhab2/scripts/kompass2.py", line 147, in <module>

root = tk.Tk()

File "/usr/lib/python3.5/tkinter/__init__.py", line 1880, in __init__

self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)

_tkinter.TclError: no display name and no $DISPLAY environment variable

Wenn ich ein Python Programm starte, welches keine Grafik benötigt, funktioniert das so.
Wenn ich den Aufruf (ohne die @@) in einem Terminal Fenster starte ( /usr/bin/python3 /etc/openhab2/scripts/kompass2.py) ,
funktioniert er und startet die Grafik.

Ich denke, daß es daran liegt, daß die Ausgabe vom aufgerufenen Programm über die $DISPLAY Variable umgeleitet werden muss, oder ?
Wie geht das ?

Bitte um eure Hilfe
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

Na ja, DISPLAY ist eine Umgebungsvariable, die gesetzt wird, um anzugeben welcher (von potentiell mehreren) laufenden XServern angesprochen werden soll (siehe: https://www.x.org/archive/current/doc/m ... l#heading5). Wenn du das Skript regulär von einer Shell aus aufrufst, ist diese Variable vorhanden, da sie nach dem Login an einem Xserver bereits gesetzt ist und weiter vererbt wird. Ich kenne dieses "openHAB2 Basic UI" nicht, aber das Skript wird dort relativ sicher ohne diese Umgebungsvariable gestartet.Mir fallen zwei Möglichkeiten an, die Variable zu setzen: Entweder du passt den Aufruf so an "DISPLAY=:0 /usr/bin/env python3 /pfad/zu/deinem/skript", oder du schreibst ein Wrapper Shell Skript, in dem du mit "export" die Variable setzt und dann dein Python Skript startest. Mindestens eines von beidem müsste eigentlich mit dem genannten Tool funktionieren.
Antworten