11

I want to ssh to remote servers, both running CentOS with X11Forwarding enabled.

However the X application cannot run properly on one of them - on host B it works fine. But on host A I get the error "couldn't connect to display", each time I launch X application.

After checking the DISPLAY environment variable on host A which I think is related to X window, I found its value localhost:10.0. Following the tips here, I change DISPLAY=0:10.0 and it works. However, DISPLAY on host B is still localhost:10.0 and works fine.

My question is, what does the value in DISPLAY represent? What is the difference between localhost:10.0 and 0:10.0?

It is said that localhost identifies a host name. Then which host does it identify, the server(host A/B) on which my X application is running or my local client where I want the X window to display?

Any hints or pointers to documentation would be appreciated.

1 Answer 1

6

Part of the answer can actually be found here: https://stackoverflow.com/questions/746119/how-do-you-use-display-specifications

DISPLAY variable is basically 3 components:

<host>:<display>[.<screen>]

As far as localhost aka 127.0.0.1 vs. 0.0.0.0 aka 0 is concerned you can take a look at this post:

https://serverfault.com/questions/78048/whats-the-difference-between-ip-address-0-0-0-0-and-127-0-0-1

Which explains the difference.

In your particular case 0.0.0.0:10.0 and localhost:10.0 would have the same effect but basically mean:

  1. connect on any interface that have the display 10 set up
  2. connect on lo0 to the listener of display 10.

Practically there would be no difference since in the first case the scan of all interfaces would start with lo0, which normally is the first interface in the list.

2
  • 1
    Thanks at first. I find the real problem follow your tips. The real problem is that localhost is binded 192.168.1.200(some specific ip like that. I don't want to expose my real configure.) on host A. It also works when export DISPLAY=127.0.0.1:10.0. Does X forwarding only works on loopback interface? Dec 20, 2011 at 14:04
  • localhost is a special name that binds to a loopback interface (lo0) on Linux it should never be bound to a real IP address. You can actually check the binding by running sudo netstat -apn | grep 6010 your SSH should be listening on that port for the display connection. As far as I can tell it's 127.0.0.1 only.
    – Karlson
    Dec 20, 2011 at 14:50

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .