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!
link|improve this question
feedback

migrated from stackoverflow.com Jun 17 '10 at 20:57

This question came from our site for professional and enthusiast programmers.

5 Answers

up vote 2 down vote accepted

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!

link|improve this answer
4  
xhost + is an exceedingly bad idea. If your user started the Xserver then you should have the appropriate Xauthority file already, no need to mess around with the server host acls. – Geoff Reedy Jun 17 '10 at 20:55
Great answer, thanks! – karramba Jun 17 '10 at 21:20
@GeoffReedy I do not understand what you mean. Following Helgi's instructions, I managed to fire up an application from SSH. How could I do it without xhost +? What are the risks I'm taking (I had to login anyway)? – Camilo Martin Feb 11 at 0:27
@GeoffReedy: Like Camilo, I'd love to hear more about this. – Helgi Hrafn Gunnarsson Feb 13 at 13:50
@CamiloMartin @Helgi xhost + turns off all access control for the x server. Anyone who can connect to the X server can snoop events, inject events, dump window contents, kill programs running on the X server, etc. These capabilities could be used as a denial of service, arbitrary program execution or other bad things. See www2.slac.stanford.edu/computing/security/xwindow for some more info on this. What you should do under most setups is run echo $XAUTHORITY instead. If it is not empty, then when you want to run a GUI program do export XAUTHORITY=<saved content of $XAUTHORITY>. – Geoff Reedy Feb 13 at 15:31
show 4 more comments
feedback

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

link|improve this answer
Note the question mentions that he would like to run the X-server on the server and access it VNC, not run the X-server locally. – heavyd Jun 17 '10 at 21:00
feedback

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.

link|improve this answer
feedback

First, this is not a programming question (s/b serverfault.com)

However, you need to run an X server on your system (something like XMing for example), then run the GUI program on the linux box, this will put the GUI on your machine.

link|improve this answer
I don't want to run this program on my machine, I want it to run on remote host, but from ssh shell, not using vnc. I can't run it directly from ssh, bacause there is no x server running for that shell (?). – karramba Jun 17 '10 at 19:56
correct - the only way to see the GUI is an X server on your machine (if it's an X program). Otherwise, see mipadi's answer for forwarding X11 for an alternative (this doesn't always work) – KevinDTimm Jun 17 '10 at 20:08
there is no way to force an application to somehow "bind" to an X server, that is running on linux box? I don't need to interact with the GUI, just to run the app. I'd like to force it to use X available on the server. I updated my question to explain better. – karramba Jun 17 '10 at 20:23
feedback

FYI, you can do something like this in the Windows realm of things, such as launching a UNIX process, by using WinSSHD and/or Tunnelier .

If what you mean is launching the gui in a local X windows session then you need to set the DISPLAY variable to local ( Tunnelier may have a setting for that) and because your on Windows you need to combine that with running a x-window emulator on windows (such as cygwin-X )

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.