libssh2 remote ncurses application - c++

I'm in the initial stages of designing an app that will connect to a remote server via ssh using the libssh2 library. One of the features I would like to have is the ability to be able to interact with a remote ncurses application. I understand that when connecting with libssh2 and executing a command, I will be returned a string that represents the output of the command on the remote system. But what if that command launches an ncurses (graphical) application. What output would I get back?

So long as you're requesting a pty on the other end, your ncurses programs will be sending you lots of control sequences dictating cursor positions, colors, etc... What you're going to end up doing is writing a terminal emulator in order to interact with ncurses applications, so you might do some searching for vt100 terminal emulation or something of the sort.

Related

SDL2 keypresses over SSH

I have an SDL2 application that I launch over SSH and I would like to have it process text input over the SSH connection. Is it possible to have the SSH connection show up as SDL_TEXTINPUT?
Additional Details / Requirements:
I'm open to alternate solutions. This just seemed like it could be an easier option than trying to create a multi-threaded application to monitor stdin (I'm kind of a beginner with c++...)
The idea is to use the text input to issue commands to cycle through states and interact with hardware (UART) connected to the remote system.
The remote system is essentially a headless raspberry pi (SDL renderer pixels are memory mapped to /dev/fb1 for display)
A keyboard can be directly connected to the remote system for input, but there is no console display which makes launching the application and printing debug messages problematic.
I'm writing this in c++

Need to duplicate/fork or redirect entire system console output for all apps and the system/kernel messages

I am developing the test suit in C++ for the PDA-like device running Linux.
While working with development kit I have access to a serial console with system output. Eventually my software should be used on closed box with no console output and Ethernet connection available. I would like to be able to duplicate the entire console output (not only my code output, that would be easy). Any suggestions?
The SSH to the device is working, but apparently it only echoes the commands and responses I send from the remote console. I would like to sniff in on all system output from previously started applications and kernel.

How do I send commands from a Windows GUI to a Linux machine over the network?

Some Background -
I have written a C program on the TS-7800 (running Debian Linux) which I access through Putty. The program is essentially in charge of controlling DAC/ADC's in order to modify the state of a memory element.
My next task is to develop a GUI for that program. The GUI is built using Microsoft Visual Studio 2010 in C++. I've made most of the GUI and simply need a way to send the data which I collect to the Linux machine.
My first attempt was to invoke a connection with Putty through command line from the GUI, and then try to send various commands through that Putty connection. The drawback here is that once I invoke a connection with Putty using the command putty username#192.168.1.50, it is done in the foreground, rather then hidden in the background, and I don't know how to continue entering text/commands from the GUI into Putty once it has been launched.
My Question -
How should I go about connecting my GUI on Windows to the program on the Linux machine? Is my attempt with Putty a step in the right direction, or should I be taking a different approach - possibly Cygwin?
Thank you in advance for any help - this is my first post on stackoverflow so please forgive me if I've mistakenly overlooked some detail or if I did not abide by proper etiquette.
You have to follow some protocol to interact with the server. Then your GUI needs to follow that protocol to send commands to the server.
Probably, you are talking about SSH connection with server. There are a lots of SSH Client library available in windows. You can use one in your GUI to interact.
Try taking a look at Boost ASIO. It's a very solid asynchronous IO library included in boost. (You will need to build it however).

Run Linux command remotely from Window based application

I want to run Linux command remotely from Window based Qt C++ application programmatically. What is the simpliest way to do it?
You need some sort of server on the Linux machine and your Windows machine will be a client. I'd say the easiest way would be just make a php script to run your command and drop it in your www root and have your Windows machine fetch that URL.
At the end of the day, without knowing what your requirements are with regard to security and with regard to what kind of commands you'll be running is, it's very difficult to give a definitive answer to this question.
Simply connect to telnet server on the linux using sockets, and send the commands.
This actually requires very little code. Check the Java version here:
Sending telnet commands and reading the response with Java
You can do similarly with Qt/C++ as well.
Simple server-side program witch will handle the requests and then using ex system() function will be this "remotely" part of solution.
And on client-side simple text field handled by function witch will be able to connect to server to send command run request.
The most important thing in this solution will be to take care about security.
One way to do it is, to have a client-server model, the server resides in linux and client can be your computer. That way you can send commands to the server and have its output thrown at you. That's one way I think of this problem.
Use UPnP to get past the firewall(or use NAT traversal or UDP/TCP hole punching). Otherwise (without forwarding the port) it would be impossible to reach the server.
The second is to write your own RSH and SSH utility. (or use putty or other pre-existing software)
You could use Plink if you are on Windows whatever version. If you can run PuTTY, then you can run PLink. PuTTY Plink Documentation. Using that you could use the executable, and automate things. Otherwise, if you're looking for a specific programming language, they'd still be dependent upon some SSH Library. If you're writing your own installer, you could include the PLink.exe in your installer, and distribute it with your application.
From the documentation page:
Z:\sysosd>plink login.example.com 'echo "Hello World"'

Qt::How to identify/detect if the system is Remotely access by other system in Linux

I am developing an application in ubuntu to access the other system remotely through QT. Both system are running some Qt applications.I want to check / make changes to the other system remotely using Qt programming.
I want to add a pushbutton (as a quit screen) at remote system that should be "Enable only if the system is remotely accessed", so that i can use it to close the remote access screen.
Is there any way through programming we can get the status whenvever it is remotely accessed???
I got through some solutions on forum but they are particularly for Windows. I am looking for some solution in Linux.
Please provide suggestion/links so that i can overcome this issue.
Thanks in Advance
If you are using the remote display abilities of the X11 protocol, you could check the value of the DISPLAY variable. For a local connection, it usually starts with :0; for a distant connection, it contains the hostname of the displaying server. For a connection thru ssh -X it could be localhost:10 and ssh is also setting SSH_CLIENT and SSH_CONNECTION environment variables.
Otherwise, you should define better what is a remote access for you (i.e. explain more your application). Your Qt application may also be e.g. some TCP/IP server. Perhaps the getpeername(2) syscall might be relevant.
If you just are interested in what remote connections flow into your box (independently of a particular application) you could read (e.g. using popen) the output of command netstat -a -n or use some /proc/net/ directory.