119

Sometimes I need to start XMBC media player or other GUI software a one of my PC (small Xubuntu PC used as a media center).

Usually I do this starting a X11vnc server on the remote PC via SSH and than connecting with an Xvnc client to the Xfce desktop.

Is there a way to start a GUI software on a remote Linux PC via SSH?

Thanks!

  • Can confirm that the approach in chosen answer works if the remote client is a Mac, too. Working successfully with macOS Sierra. – Benjamin R Feb 15 '18 at 6:01
150

Yes. You just need to run export DISPLAY=:0 (or whatever the remote display is numbered as) in your ssh session and programs run will run on the remote display. A quick example:

oli@bert:~$ ssh tim
oli@tim:~$ export DISPLAY=:0
oli@tim:~$ firefox

Firefox is now running on tim's display.

However when you close your ssh session, most of the time the remote application will close. If you want to disconnect from ssh but leave the application running you need to launch it in a special way using something like screen (keeps the ssh session running in the background) or nohup, or another method. For more information on this there was recently another question on it.

You can shorten this all down into one command that will connect, export the display in-line and start the application in a way that won't close it after the ssh session dies:

ssh tim "DISPLAY=:0 nohup firefox"
| improve this answer | |
  • It said No DISPLAY: this may not be what you want. when i tried it (I tried it from abiword by the way. ` – PyRulez Nov 29 '14 at 17:14
  • 1
    @PyRulez Note the "or whatever the remote display is numbered as" in the first line. If it's not the first graphical server it might be :1 or higher. Run w to see who's logged in and where. That will tell you the DISPLAY number too. – Oli Nov 29 '14 at 17:20
  • 1
    How do I turn it back off – akxer Mar 16 '16 at 6:42
  • 1
    unset DISPLAY – Oli Mar 16 '16 at 8:30
  • 7
    sometimes you want to do the opposite and run the X app locally just connect using -Y and then run your app ssh -Y <remoteip> – Postadelmaga Mar 27 '16 at 15:08
3

Depends on where you want to see the application displayed

To display the application on your local PC

You first ssh to the remote computer with the additional -Y option and the run the application (e.g. firefox):

ssh -Y ...
firefox

If -Y doesn't work check you sshd config on the remote PC (see Denis Lukinykh's answer). Another similar option is -X. Google for the differences.

To display the application on an existing session at the remote PC

You need to login with user A at the remote PC and leave the session open. Afterwards you can ssh with the same user A and start the application (e.g. firefox) like this:

ssh A@...
DISPLAY=:0 nohup firefox

To display the application nowhere

You need to install & start xvfb. xvfb will create an invisible X session at DISPLAY 10. Then you start your application directing its output to that DISPLAY:

sudo apt install xvfb
sudo Xvfb :10 -ac -screen 0 1024x768x24 &
DISPLAY=:10 firefox
| improve this answer | |
  • 1
    You could also use xvfb-run which wraps Xvfb and is useful if you want to run just one command. – alexpotato Apr 14 at 18:20
0

Make this settings on remotehost:

ssh remotehost 'grep -i x11 /etc/ssh/sshd_config'
   X11Forwarding yes
   X11DisplayOffset 10 

After that, you can run GUI application:

ssh -Y -t remotehost 'sudo gparted'

or

ssh -Y remotehost
sudo gparted
| improve this answer | |
0

Let's say you want to run gnome-disks.

You need 2 ssh sessions. One is used to run the software ( in this case gnome-disks). In the second one you do whatever you want to do.

In the first session execute these commands:

    export DISPLAY=:0
    gnome-disks
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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