Raspberry PI remote debug GTK error - linux

I'm using NetBeans IDE 8.0.2 on my Win7 machine to develop Raspberry Pi opencv C++ application.
I'm building & debugging the application remotely on the Raspberry Pi from my Win7 machine.
At run time the application fails with "Gtk-WARNING **: cannot open display:" error when reaches the line:
imshow("source", src);
When I'm running the exact same application from the Raspberry Pi and not remotely via SSH everything works as expected.
Is there any way that I can configure NetBeans to open GTK windows at the Raspberry Pi?

The solution is to add DISPLAY=:0 Environment variable.
At File menu select Project Properties (yourprojectname) to open Project Properties window.
At Categories: click Run and then click Environment, add variable name DISPLAY with value :0
Good luck

I haven't actually tried this with the Rasberry Pi, but assuming it is like other linux systems perhaps this will get you started.
To have the Gtk program display on your windows system will need a version of X Windows ( the linux/unix graphics server) for Windows the operating system. You can get it as one of the packages in Cygwin. (http://x.cygwin.com/) Get cygwin https://cygwin.com/index.html during setup select the xinit package. You also either need to enable port-forwarding in ssh or set the DISPLAY variable on the Rasberry Pi to your windows host:0.
To have the Gtk program display on the Rasberry Pi when started from Windows you just need to allow remote hosts to open windows.
Try the command :
xhost +
in the Rasberry Pi shell before trying to have the program started from windows.
Another option would be to start the program on the Rasberry Pi with gdbserver and then attach to the already running program with Netbeans.
You will need to install the gdbserver plugin for Netbeans.

An alternative to getting the X window manager working on Windows would be to get a remote desktop running on both machines. VNC is a popular client and server for this. This would allow you to run the window for Netbeans and use the system as if it were your desktop from another location.
There is even a download specifically for Raspberry pi here:
https://www.realvnc.com/download/vnc/latest/

Related

How to debug remote Python script in VS Code

I am doing Python development in Raspberry Pi. I have installed VS Code in my laptop and have installed the ssh extension. Using this I can easily connect to Raspberry Pi. While I am connected I can see that VS Code has also loaded the Python interpreter of Raspberry Pi. I can run my Python script from within the vs code but when I tried to debug the code, nothing happens.
Is it possible to remotely debug the Python script from laptop to Raspberry Pi? How can I enable this?
I have resolved this issue. If anyone wants to do remote development and debugging, follow below steps:
Install remote ssh extension in VS code
Once installed, you will find a green icon on the bottom left corner in vs code which allows us to connect to the remote machine.
Connect to the remote machine using the standard ssh command. Alternatively, you can use ssh-keygen to generate a public-private key if you don't want to use the password at every prompt.
Once you are connected to remote machine, you can open the file explorer and create any python file. When you will save this, it will get saved in your remote machine. This way you are using your machine to remotely develop code on another remote machine.
Good thing about vs code is that it selects the remote machine's python interpreter so all the packages which you have installed on your remote machine will work with IntelliSense.
In order to debug the code, we will use debugpy. Install this on both machine (remote & local)
On your remote machine, run below command:
python3 -m debugpy --listen 1.2.3.4:5678 --wait-for-client app.py
here 1.2.3.4 is the IP of remote machine. This will start a remote debugger which will wait for a clients connection.
On your local machine, in VS code open Run & Debug, add a configuration of Python: Remote Attach. Make sure that launch.json has the host as the IP of your remote machine and port as 5678.
Now start debugging as normal and you will notice the code will break at first breakpoint and from here you can proceed normally as we used to do in local debugging process.
TBH, this is best feature VS code has because most of the software allows you to do remote development which is nothing but just a normal SSH but remote debugging gives you more control. I was doing some python project on Raspberry Pi and obviously cannot install VS code or pycharm on it. But with this feature now I can easily develop the code using Pi's python interpreter and debug it as well.
If anyone is having any issues, let me know. Happy to help.

SSH into raspberry pi

I have a question regarding SSH. For school assignments, I always write code on my mac then transfer it over on my raspberry pi to make sure it will compile correctly without errors as they are tested on the pi and sometimes when I transfer it has errors.
To avoid hassle of connecting everything to the pi, if I SSH into the pi, then compile my program from my mac, would it use the raspberry pi compiler?
If you are connected vi ssh and issuing the commands in that terminal session, yes, it's going to use the compiler on the pi.
A better option, and more educational, might be to cross-compile the code for the pi on your mac. You can leverage the much greater processing power of the desktop to significantly reduce your compile time.
Cross Compiling on Mac OSX for Raspberry Pi
Yes it would remotely access the host's OS (in your case the RPi) to perform the compilation.
Here is a guide to get you started:
https://www.modmypi.com/blog/remotely-accessing-the-raspberry-pi-via-ssh-console-mode
Also, in case you want a remote desktop connection, on your raspberry pi enter the following command:
sudo apt-get install xrdp
providing you've already updated and upgraded your package libraries ;)
Yes, If you are using ssh and writing code in that terminal session then the code will be compiled in the pi, it is the best way to do so.
Issuing command in the terminal session via SSH (laptop connected with Raspi), compilation will be done at Raspi. PuTTY is a very useful tool for this, you just need to enable SSH at Raspi and input your IP address at PuTTY only! Click to the PuTTY website http://www.putty.org/ and download it.
Secure Shell (SSH) is a cryptographic network protocol for operating network services securely over an unsecured network. The best-known example application is for remote login to computer systems by users.
When you connect to any remote system or server via ssh you are using the same system via command prompt. So, if you do any work via SSH the compilation will be done by the remote system.

How to share Mac screen to Linux docker container?

I want to run odesk time tracker (a Qt4 app) which captures your screen and keystrokes for freelance work logging. But I don't trust it and want to sandbox it.
On Linux, there are ways to run GUI items on docker container and forward X11 to Linux host. Can I do this on mac? The app will run on Linux container and will be displayed on Mac with capturing screen/keystroke.
I think VNC method would display the linux host, not the mac. If linux connects mac, I have to install the software on mac. I don't know if I can do X11 forwarding.
You need to have XQuartz installed on your Mac. You can get it here -
http://xquartz.macosforge.org/landing/
Once you installed it, follow this procedure -
Run X11 application (included with XQuartz)
Open X11 Preferences and make sure "Allow connections..." is checked
Restart X11 application
Open a terminal
ssh to your docker with X11 forwarding: ssh -X YOUR_DOCKER_IP
From now on, any GUI application that you run on your docker will show up on your Mac.

How do I run an desktop executable file on Windows over SSH?

Here's my situation:
I have Machine A - Linux Box, and Machine B - Windows Box using Cygwin and OpenSSH.
Currently, I can ssh between the two machines, and run programs. There is this program that I need to run on the Windows Machine that will Control the Desktop (some mouse clicks and such).
I need to be able to ssh to the Windows Machine from my Linux machine (done already) and run the program. When I do this, the program just hangs up. I can see the program in the System Processes on Windows, however it is doing nothing. When I call the program on Cygwin on the Windows machine, it runs flawlessly.
My question:
Is there a way to run the executable program on the Windows Machine that controls its Desktop environment - run it remotely over SSH?
PS: I have tried on the Windows Machine to go to Services > Cygwin sshd > Log on > Allow Services to interact with desktop. However, when this is checked I can't get the Cygwin sshd service started.

Bootable Qt-Linux Application

How to boot a linux kernel + dependencies and auto run a Qt application so the linux environment doesn't show up (only the Qt GUI is visible)?
on x86 PCs
should be able to run from RAM (of course)
Perhaps you could look at how this guy did it:
http://www.embedded-bits.co.uk/2011/1-second-linux-boot-to-qt/
You could start with a minimal linux distribution such as Ubuntu Server and install only X-Windows (without any Window Manager) on top of it: https://help.ubuntu.com/community/ServerGUI
Then, start your Qt application by adding a call to it in the .xinitrc initialization script.
Might be helpfull Linux Journal KDE Kiosk Mode
Why not run x server without window manager and the running the application in full screen mode on that x server.
to start x server type startx
and then you must run your application in fullscreen mode
(your app must support this mode by argument switch like this)
./myapp --fullscreen
I have never tried this, but try google for 'framebuffer'. It should allow you to run a single application with no need for X server.

Resources