Friday, 19 May 2017

Remote X11 Windows to AIX

Author:Urban Biel

I love command line. It's numerous advantages over GUI is hard to list, but there are situations, where you need a remote X Windows connection. I've been asked many times by my colleagues, how to set up remote X Windows (X11, as the most recent version of X Windows is 11) on AIX, why it doesn't work, etc.

Basic overview of X11 Windows architecture

X11 is a client / server architecture. You need to know two things:
  • an application e.g. xclock is an X11 client
  • the application's content is displayed by an X11 server
Anyway, some people are confused here: I'm connecting to an AIX server using ssh/telnet, thus my workstation is an ssh/telnet client. What do I have to run on my local machine: an X11 client or an X11 server? You obviously need to install and run an X11 server on your local workstation. If you run e.g. xclock on a remote machine (AIX), that's an X11 client.

Let's have a quick look at a connection between an X11 client and an X11 server. The connection can be a unix socket or TCP/IP. The socket is used, when the client and the server run on the same machine, which is not our case. Remote X Windows connection is using the TCP/IP. To tell the client, where the X11 server runs, you need to set up a DISPLAY environment variable. By default an X11 server listens on port 6000. You can have more X server instances, but that's out of the topic.

Your workstation

If you want to display a program on your local workstation, that is running on a remote AIX, you need to install and run an X server locally. If you run Linux on your workstation and you're reading this in a browser, you're done. On Windows there is a few X servers; some are commercial, some are free. Very popular is Xming, I use Cygwin.
A quick Cygwin howto:
  • Install Cygwin from www.cygwin.org
  • select at least the following extra packages: xorg-server xinit xauth xclock xterm xhost
  • Make an entry in your Startup folder: C:\cygwin\bin\run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe
Start the X11 server from the Startup folder and from a Windows command line check, if it's listening for TCP/IP connection on port 6000:
C:\Users\IBM_ADMIN>netstat -atn | findstr 6000
  TCP    0.0.0.0:6000           0.0.0.0:0              LISTENING       InHost
  TCP    [::]:6000              [::]:0                 LISTENING       InHost

if you see the output like this, you're done with your workstation.

Remote AIX server

An X Windows minimum installation includes filesets: X11.base.lib X11.base.rte X11.apps.config. I suggest to install X11.apps.clients too, that contains xclock program. By running this program I check the time, and of course the X11 setup. For an X11 client to run, it needs to establish TCP/IP connection to your X11 server. You can do this directly or you can tunnel the connection.

Direct X11 TCP/IP connection

The simplest scenario. It works, if there is no firewall blocking port 6000 to your workstation and there is no NAT. Try to ping your workstation from the AIX server, and if it works, try telnet to port 6000 to your workstation. If everything is fine, set the DISPLAY variable to an IP address of your workstation, for example export DISPLAY=192.168.0.100:0. On your workstation, allow the IP address of the AIX server to open an X11 session using xhost + <ip_address_of_the_aix_server>. Run xclock on AIX and enjoy.

SSH X11 port forwarding

This is the way professionals do it, as ssh is installed by default on AIX now. Advantages:
  • you do not care about network infrastructure, VPNs, NATs and firewalls between you and the target server. All you need is a working ssh connection
  • you do not care about DISPLAY anymore
  • X11 session is automatically authenticated
  • X11 session is automatically encrypted
On the AIX check, that ssh X11 forwarding requests are allowed:
# grep X11Forwarding /etc/ssh/sshd_config
X11Forwarding yes

If it's necessary, change the value and restart the ssh service. You can do it while you're logged in, your current ssh session will not be dropped. Keep in mind, that the ssh X11 forwarding will apply only to new ssh sessions, that are opened with X forwarding.
stopsrc –s sshd; sleep 2; startsrc –s sshd

Now set the X11 forwarding on your workstation. If you have an command line ssh client e.g. as part of Cygwin, run ssh -X <server_ip> to log in. If you use Putty, check that X11 forwarding is set for your session and don't forget to save the change. For other ssh clients check a documentation (or browse through all the session settings, as pros do....)

After you log in, check the DISPLAY and authentification value. If it is as on an example below, run xclock and enjoy.
# echo $DISPLAY
DISPLAY=localhost:10
# xauth list
server/unix:10 MIT-MAGIC-COOKIE-1 6299564796e4cf089e38619a354cfdcc
Note: If you open more ssh sessions to one host, with the X11 forwarding turned on, every session will have different offset number in the DISPLAY variable. The offset number is the one after a colon, e.g. 10 in the example above.

Issues

A few FAQ's I'm being asked

I run xclock, but it hangs out and does not display anything

  • Realy? An X11 windows can open underneath other windows. Check again.
  • A DISPLAY variable is not set or is set incorrectly. In this case it takes few minutes for an application to terminate.
  • An X11 server is not running on your local machine.

I use ssh the X11 forwarding, but the DISPLAY variable is not set

  • Check X11Forwarding directive in sshd_config
  • Check that ssh client has X11 forwarding option set
  • The AIX machine is missing xauth programm. Install X11.apps.config fileset.
  • There are some older OpenSSH or OpenSSL versions that are buggy. I have had issues with OpenSSH versions 4.6.X, OpenSSH_4.3p2, OpenSSL 0.9.7l 28

No comments:

Post a Comment