Tuesday, 2 September 2008

Running a remote VNC OpenVMS CDE Desktop

The HP Integrity ZX6000 workstation I bought recently is now running OpenVMS Version 8.3-1H1 flawlessly. The ZX6000 is the same as the RX2600 server except that it contains a combined AGP/PCI card cage instead of a straight PCI cage. The ATI AGP graphics card that it came with is not supported under OpenVMS. As an alternative I installed an ATI 7500 PCI card that was previously in an Alpha DS10L server, but the picture quality is really poor.

My day-to-day workstation runs SuSE 11. It will quite happily display OpenVMS terminals and applications via a remote X-Window configuration, and with a gigabit ethernet between the two network latency is not an issue. When I first started work in 1991 I remember running a complete window manager come session manager across a network and wondered if this might provide me with the remote desktop experience I was after.

Firstly, I started a vncserver on the linux box:

$ vncserver -geometry 1280x1024 -depth 24

In order that this vnc xserver session does not start it's own window manager (which in my case would normally default to KDE3) I edited my vnc xstartup file which is installed in my home directory:

$ vi ~/.vnc/xstartup

and removed the 'startkde' call at the end. This starts the vnc server with no window manager, but with a single xterm (undecorated of course).

I then start a vncviewer for that vncserver:

$ vncviewer linux:1

Then, I moved the vncviewer window to my 2nd kde desktop and maximised it. You can switch between the 1st and 2nd desktop in KDE using Ctrl-Tab.

As the viewer and server are on the same machine there is no network latency involved. Equally, however, if you want to view the vnc server session remotely there is nothing to stop this (and indeed this is what I am using now and it is certainly no slower than any other vnc connection I have used).

Within the single xterm enable your OpenVMS access to this display:

$ xhost +zx6000

In this case 'zx6000' should be replaced with your OpenVMS box hostname or IP address.
You can then login to your OpenVMS box normally using telnet and set the display back to the vncserver you have created:

$ set display/create/node=linux/server=1/trans=tcpip

The final step is to start the CDE session manager for this display. The logical CDE$SESSIONMAIN defines the command to start the CDE session manager:

$ show log cde$sessionmain
"CDE$SESSIONMAIN" = "mcr cde$system_defaults:[bin]dtsession" (LNM$SYSTEM_TABLE)

Run this in the xterm:

$ mcr cde$system_defaults:[bin]dtsession

and voila, an OpenVMS CDE session as if you had just logged in to the machine directly.

Addendum: you can use a font server running on the OpenVMS box to serve up fonts not normally available on a unix machine (such as double width fonts).

Start the font server on the OpenVMS box (I'm sure there is a more elegent way of doing this via the server startup scripts, DECW$PRIVATE_SERVER_SETUP.COM is the place to look):

$ xfs :== "$sys$system:decw$xfs.exe"
$ xfs

You can check if the font server is running by trying to telnet to the server with the given port:

$ telnet zx6000 7100

a connection will be establised if the font server is running (hitting return a few times will drop you out of the telnet session, as you're not talking font server speak).

Then ensure that the font path is set to include the OpenVMS nodes' font server. Either edit the 'fontPath' variable in the vncserver script, or issue an xset command on the Linux box prior to connecting to the OpenVMS box:

$ xset +fp tcp/zx6000:7100

where zx6000 is the hostname of the OpenVMS box.

Update 2: If you are running the traditional DEC Windows session manager run