How to run a GUI app from ssh shell?

I can access my linux box by ssh and by vnc. I want to run a GUI application, but directly from ssh, I don't want to access through VNC and click around. So, after logging in using ssh, I want to issue a magic command, so that when I log in through VNC I will see my GUI app running. How can I do this?

edit:

The linux box have X server running on it. I need to automate restarting a GUI application. I want to do it without any kind of GUI interaction. What I need:

  1. login through ssh on SERVER
  2. run my GUI app by forcing it to bind to X server running on SERVER
  3. ???
  4. PROFIT!

I've read the edited version of the question, and if I understand you correctly, you want to run a program from SSH without showing you the GUI... you just want to run the program and it depends on X Windows, so you need it to connect somehow to X Windows on the server itself.

There are two things you need to do. You need to allow connections from outside of X Windows, and then you need to tell the shell (in SSH) which X server to bind to.

First, allow incoming connections to the X server. Open up a terminal window in X Windows on the server machine. (You must have access to that, otherwise you cannot do this.)

Issue the following command:

xhost +

It should tell you "connections allowed from all hosts" or something to that effect.

Then, while still remaining in X Windows, issue:

echo $DISPLAY

This will tell you the display ID. Write it down or remember it. Typically it will be ":0" or ":0.0" but don't worry if it's different.

That's all you need to do from within X Windows itself.

Now SSH into the server from wherever you want. Issue the command:

export DISPLAY=[what-the-echo-command-gave-you]

And that should be it! Now you should be able to run any X windows from that SSH shell, and it will pop up on the local X Windows server.

Hope it helps!


You have to forward X11 to your local machine (from the remote machine). Pass the -X or -Y flags when invoking ssh.


What display the app comes up on is dictated by the DISPLAY environment variable. do export DISPLAY=:0.0 to make it come up on the first display of the remote machine.