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
Starten eines Python Programm mit Grafik
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.