Exec script to UI app

Hi,
First of all, thanks everyone to take your time to help. English is not my mature language and I apologize beforehand for that.

I have a node with exec easy sentence: script.md

The code in script.md is:
lxterminal python3 my_script.py

It wouldn't be a problem unless I'm working with opencv dependencies, and I have to see the camera output on the monitor.
If I run the script from terminal, it just works. But through the node-red, I always have the same issue:
(lxterminal:1604): Gtk-WARNING **: cannot open display:

lxterminal is because i'm working in a raspberry pi.

PD: I use node-red because I want to run this script when the device receive a message in a broker/topic. If you have any other suggestion to do that I'll be grateful to learn :slight_smile:

Thanks

You are running a script using the GTK toolkit that requires access to a desktop GUI. In fact, you are using the LXDE's desktop terminal app to run a PYTHON programme and you don't need to do that.

Your script should simply be python3 my_script.py. And for that, you can simply add that command to a Node-RED exec node. The output of the script will be returned as a msg to Node-RED and you can output it or process it as needed.

And just to add, if you really want to show the script running on the monitor, you can use a command like this in the exec node:

export DISPLAY=:0 && lxterminal -e python3 /home/pi/my_script.py
1 Like

Thanks both for answer. I'll try on monday.

My best try to get my goal was adding a "watchdog" python script in crontab and use it for lauch my python3 my_script.
It worked but isn't a good way to solve.

Thanks again you for your time and consideration.
:slight_smile:

I'm trying to run a python script using an IntelD435, and I get the same error. I'm running using a daemon node however. I installed lxterminal. The command shows as not found. Any thoughts on how to implement for daemon node?

I figured out you can set the environment variables within the python script:

os.environ["DISPLAY"] = ':0'
os.environ["XAUTHORITY"] = '/home/user/.Xauthority'
2 Likes