We are in a computing era in which we run applications from a remote computer or server. There are many ways for us to have remote desktop sessions. RDP, NX and VNC all are protocols designed to implement remote desktops. Of those, VNC is the most used and supported. This post is about many ways of setting up and using VNC in Linux and Windows. Below I explain how I set up a VNC remote session between my Linux box and a TightVNC viewer running on a Windows PC.
Setting up Inetd to start VNC on Incoming Connections
First, I installed vnc4server on my Debian Linux box. Alternatively, I could install tightvncserver instead. TightVNC is lighter than vnc4server. Anyway, to have inetd automatically start a VNC server on incoming connections, I added the following line to my /etc/inetd.conf file. This is all one line:
5995 stream tcp,rcvbuf=64k,sndbuf=256k wait nobody:nogroup /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 960x600 -depth 16 -AlwaysShared -rfbauth /etc/vnc/passwd -desktop myOffice -dpi 96 -fp /usr/share/fonts/X11/Type1 -co /etc/X11/rgb
For tightvncserver, the inetd.conf line would look slightly different because tightvncserver panics when wait
is used instead of nowait
. This means that tightvncserver sessions can never be shared when started from inetd:
5960 stream tcp,rcvbuf=64k,sndbuf=256k nowait nobody:nogroup /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 960x600 -depth 16 -desktop myOffice -dpi 96 -fp /usr/share/fonts/X11/Type1 -co /etc/X11/rgb
Typical port values are in the range from 5900 to 5999. Make sure everything in the following checklist is OK for VNC to work:
- A display manager, such as gdm, kdm, xdm or wdm, must be running and set up to accept XDMCP requests. Read the sections below about setting up XDMCP for VNC sessions.
- A VNC password must be created and stored in the readable file /etc/vnc/passwd. To create it, run:
vncpasswd
mkdir /etc/vnc
mv ~/.vnc/passwd /etc/vnc
chmod 644 /etc/vnc/passwd
- At least,
fixed
and cursor
fonts must be present in the default font paths. If not, specify the font paths with -fp parameter.
Tell inetd to reload settings in /etc/inetd.conf with the following command:
kill -1 $(pidof inetd)
Setting up GDM to handle VNC logins
It is rather simple to make GDM accept XDMCP requests from a VNC server. Open the file /etc/gdm/gdm.conf and add the following lines in the [XDMCP] section:
[xdmcp]
Enable=true
Port=177
DisplaysPerHost=8
The lines above enable GDM to accept logins at UDP port 177. Also, GDM is set up to accept up to 8 users from localhost. Otherwise, GDM may refuse remote logins through SSH tunnel when there are already a couple of users logged in at localhost.
For security, it is recommended to add the following line to /etc/hosts.deny:
gdm: ALL
Then, add the following line to /etc/hosts.allow:
gdm: 127.0.0.1
Setting up XDM for use with VNC
XDM is lighter than gdm or kdm, so XDM is ideal for VNC sessions where network bandwidth and CPU resource are precious. In fact, XDM can coexist with gdm or kdm. In Debian, set HEED_DEFAULT_DISPLAY_MANAGER to false in the script /etc/init.d/xdm:
[ -z "$HEED_DEFAULT_DISPLAY_MANAGER" ] && HEED_DEFAULT_DISPLAY_MANAGER=false
To set up XDM to handle VNC logins and deliver a user's desktop, XDMCP support has to be enabled first. Open the file /etc/X11/xdm/xdm-config and locate the following line:
DisplayManager.requestPort: 0
Change the number 0 to 177. Then, open the file /etc/X11/xdm/Xaccess and specify the range of addresses to allow access to XDM. Usually, it is sufficient to add only the following lines to /etc/X11/xdm/Xaccess:
localhost
127.0.0.1
Optionally, you can change the look of the login screen. Open the file /etc/X11/xdm/Xsetup and enter a command to set the background image:
#!/bin/sh
hsetroot -fill /usr/local/share/pixmaps/Repressed.jpg
You can also change the welcome line and the face image by editing the file /etc/X11/xdm/Xresources:
xlogin*greeting: Remote VNC Session
xlogin*logoFileName: /usr/share/X11/xdm/pixmaps/xorg.xpm
Using TightVNC in Windows to Run a Linux Destop
I installed TightVNC U3 package on my USB thumbdrive so I can connect to my VNC server anywhere. However, I had to tweak TightVNC a little bit to open a VNC session to my Linux desktop.
The default encoding Tight doesn't work well with vnc4server. So I had to change it to CoRRE.
Related Posts