VNC ( Virtual Network Computing ) For Centos

1. Installing the required packages

The server package is called ‘vnc-server’. Run the command rpm -q vnc-server.

The result will be either package vnc-server is not installed or something like vnc-server-4.0-11.el4.

If the server is not installed, install it with the command: yum install vnc-server.

The client program is ‘vnc’. You can use the command yum install vnc to install the client if rpm -q vnc shows that it is not already installed.

Make sure to install a window manager in order to get a normal GUI desktop. You can use the command yum groupinstall “GNOME Desktop Environment” to install the Gnome Desktop and requirements, for example. Other popular desktop environments are “KDE” and “XFCE-4.4”. XFCE is more light-weight than Gnome or KDE and available from the “extras” repository.

<!> If you are running CentOS 5, yum groupinstall "GNOME Desktop Environment" may complain about a missing libgaim.so.0. This is a known bug. Please see CentOS-5 FAQ for details.

2. Configuring un-encrypted VNC

We will be setting up VNC for 3 users. These will be ‘larry’, ‘moe’, and ‘curly’.

You will perform the following steps to configure your VNC server:

  1. Create your VNC users.
  2. Set your users’ VNC passwords.
  3. Edit the server configuration.
  4. Create and customize xstartup scripts.
  5. Start the VNC service.
  6. Test each VNC user.
  7. Setup the VNC service to start on reboot.
  8. Additional optional enhancements

2.1. Create your VNC users

As root:

$ su -
 # useradd larry
 # useradd moe
 # useradd curly
 # passwd larry
 # passwd moe
 # passwd curly
 

2.2. Set your users’ VNC passwords

Login to each user, and run vncpasswd . This will create a .vnc directory.

[~]$ cd .vnc
 [.vnc]$ ls
 passwd
 

2.3. Edit the server configuration

Edit /etc/sysconfig/vncservers, and add the following to the end of the file.

VNCSERVERS="1:larry 2:moe 3:curly"
 VNCSERVERARGS[1]="-geometry 640x480"
 VNCSERVERARGS[2]="-geometry 640x480"
 VNCSERVERARGS[3]="-geometry 800x600"
 

Larry will have a 640 by 480 screen, as will Moe. Curly will have an 800 by 600 screen.

2.4. Create xstartup scripts

We will create the xstartup scripts by starting and stopping the vncserver as root.

# /sbin/service vncserver start
 # /sbin/service vncserver stop
 

Login to each user and edit the xstartup script. To use Larry as an example, first login as larry

[~]$ cd .vnc
 [.vnc] ls
 mymachine.localnet:1.log  passwd  xstartup
 

Edit xstartup. The original should look like:

#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &

Add the line indicated below to assure that an xterm is always present, and uncomment the two lines as directed if you wish to run the user’s normal desktop window manager in the VNC. Note that in the likely reduced resolution and color depth of a VNC window the full desktop will be rather cramped and a look bit odd. If you do not uncomment the two lines you will get a gray speckled background to the VNC window.

#!/bin/sh
# Add the following line to ensure you always have an xterm available.
( while true ; do xterm ; done ) &
# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &

2.5. Start the VNC server

Start the vncserver as root.

# /sbin/service vncserver start

2.6. Test each VNC user

2.6.1. Testing with a java enabled browser

Let us assume that mymachine has an IP address of 192.168.0.10. The URL to connect to each of the users will be:

Larry is http://192.168.0.10:5801
Moe   is http://192.168.0.10:5802
Curly is http://192.168.0.10:5803

Connect to http://192.168.0.10:5801. A java applet window will pop-up showing a connection to your machine at port 1. Click the [ok] button. Enter larry’s VNC password, and a 640×480 window should open using the default window manager selected for larry . The above ports 5801, 5802 and 5803 must be open in the firewall {iptables) for the source IP addresses or subnets of a given client.

2.6.2. Testing with a vnc client

For Larry: vncviewer 192.168.0.10:1
For   Moe: vncviewer 192.168.0.10:2
For Curly: vncviewer 192.168.0.10:3

To test larry using vncviewer, vncviewer 192.168.0.10:1. Enter Larry’s VNC password, and a 640×480 window should open using Larry’s default window manager. The vncviewer client will connect to port 590X where X is an offset of 1,2,3 for Larry, Moe, and Curly respectively, so these ports must be open in the firewall for the IP addresses or subnets of the clients.

2.6.3. Starting vncserver at boot

To start vncserver at boot, enter the command /sbin/chkconfig vncserver on.

For basic VNC configuration the procedure is now complete. The following sections are optional refinements to enhance security and functionality.

3. VNC encrypted through an ssh tunnel

You will be connecting through an ssh tunnel. You will need to be able to ssh to a user on the machine. For this example, the user on the vncserver machine is Larry.

  1. Edit /etc/sysconfig/vncservers, and add the option -localhost.
    VNCSERVERS="1:larry 2:moe 3:curly"
    VNCSERVERARGS[1]="-geometry 640x480 -localhost"
    VNCSERVERARGS[2]="-geometry 640x480 -localhost"
    VNCSERVERARGS[1]="-geometry 800x600 -localhost"
  2. /sbin/service vncserver restart

  3. Go to another machine with vncserver and test the VNC.
    1. vncviewer -via larry@192.168.0.10 localhost:1

    2. vncviewer -via moe@192.168.0.10 localhost:2

    3. vncviewer -via curly@192.168.0.10 localhost:3

By default, many vncviewers will disable compression options for what it thinks is a “local” connection. Make sure to check with the vncviewer man page to enable/force compression. If not, performance may be very poor!

4. Recovery from a logout

If you logout of your desktop manager, it is gone!

  • We added a line to xstartup to give us an xterm where we can restart our window manager.
    • For gnome, enter gnome-session.

    • For kde, enter startkde.

5. Remote login with vnc-ltsp-config

To allow remote login access via a vnc-client to the Centos system, the RPM packages named vnc-ltsp-config and xinetd can be installed. When a vnc-client connects to one of the configured ports, the user will be given a login screen. The sessions will *not* be persistent. When a user logs out, the session is gone.

The rpm package vnc-ltsp-config is easily installed via the EPEL repository noted in Available Repositories

Note: There are no major dependencies for the package so the vnc-ltsp-config*.rpm could easily be downloaded and installed without the need for enabling the EPEL repository.

Install, as root via:

# yum install xinetd vnc-ltsp-config
# /sbin/chkconfig xinetd on
# /sbin/chkconfig vncts on
# /sbin/service xinetd restart

Next, as root edit the file “/etc/gdm/custom.conf”.

  • To the next blank line below the “[security]” section add “DisallowTCP=false”
  • To the next blank line below the “[xdmcp]” section add “Enable=true”
  • Make sure you are in a position to either run “gdm-restart” for default Gnome installs or just reboot the CentOS box.

This will add the ability to get the following default vnc-client based session connections:

resolution

color-depth

port

1024×768

16

5900/tcp

800×600

16

5901/tcp

640×480

16

5902/tcp

1024×768

8

5903/tcp

800×600

8

5904/tcp

640×480

8

5905/tcp

A major advantage of using the vnc-ltsp-config setup is the reduction of system resource utilization compared to the standard “per-user setup”. No user processes will be started or memory consumed until a user actually logs into the system. Also, no pre-thought for user setup is needed (eg skip all of the manual individual user setup for vnc-server). The downside to the vnc-ltsp-config setup is that *any* user with the ability to login will likely have the ability to log into the system via a vnc-client with full gui unless steps are taken to limit that type of access. Also, there is no session persistance! Once the vnc-client closes, the vnc-ltsp-config session will terminate (by default) and all running processes will be killed.

This option can be combined with ssh tunnelling using a slightly modified version of the “vncviewer -via” command noted above:

vncviewer -via remoteUser@remoteHost localhost:vncSinglePortNumber

For the default vnc-ltsp-config install, the “vncSinglePortNumber” is the last digit only of the port number. Port 5900 (1024×768 16bit) would just be “0”, for example.

Note: you will need to be aware of possible interaction issues if you enable either selinux or iptables.

6. VNC-Server for an already logged in GUI console session – 2 options

Often you will need remote access to an already logged in GUI session on a “real” console. Or you will need to help another user remotely with an GUI or visual issue. You will need either “vnc-server” or “x11vnc”. The vnc-server option will be a module added to X11 for “allways on” vnc support, while x11vnc will allow for adhoc vnc support.

vnc-server install will require no third party repos or source building.

x11vnc is a way to view remotely and interact with real X displays (i.e. a display corresponding to a physical monitor, keyboard, and mouse) with any VNC viewer. In this way it plays the role for Unix/X11 that WinVNC plays for Windows.

6.1. x11vnc adhoc option

Karl Runge has generously provide a exceptional amount of information at http://www.karlrunge.com/x11vnc/ for x11vnc. There is info on securing the connection and also an “Enhanced TightVNC Viewer (ssvnc)”. To make it easy, follow these steps:

1. Download the latest rpm install from http://dag.wieers.com/rpm/packages/x11vnc/ to the host you want the vnc-client to connect to:

wget http://dag.wieers.com/rpm/packages/x11vnc/x11vnc-0.9.3-1.el5.rf.i386.rpm

2. Install, as root, via the yum or rpm programs on the host you want the vnc-client to connect to:

yum install x11vnc-0.9.3-1.el5.rf.i386.rpm

3. Start the x11vnc process on the host you want the vnc-client to connect to. Please take a long look at the possible options from the x11vnc website. A very simple/insecure example for a trusted network setup (local network or VPN) is to have the user with the GUI console issue the command:

[user@helpme_host ~$] x11vnc -nopw -display :0.0

Then connect (without password) via a vnc-client to the IP/hostname and port noted by the x11vnc command. By default, x11vnc will allow connections from all interfaces. Host based firewall settings may need to be modified.

You can combine this with ssh tunneling:

ssh -C -t -L 5900:localhost:5900 [remote ip] 'x11vnc -usepw -localhost -display :0'

Note that the -C flag is for compression, so may not be required

6.2. vnc-server X11 “always on” option

1. On the the system you want to run vnc-server, install vnc-server as noted above.

2. Edit /etc/X11/xorg.conf, as root, and add/create a ‘Module’ Section and add ‘Load “vnc”‘:

Section "Module"
  Load "vnc"
EndSection

3. For standard vnc authentication, edit /etc/X11/xorg.conf, as root, and add to the ‘Screen’ Section:

 Option "SecurityTypes" "VncAuth"
  Option "UserPasswdVerifier" "VncAuth"
  Option "PasswordFile" "/root/.vnc/passwd"

4. As root, run ‘vncpasswd” to create the password noted above.

5. Restart X11 (<Ctrl>+<Alt>+<BS> will work if on the console already)

6. You should be able to connect with a vncviewer client as normal.

7. To trouble shoot, check for errors in the /var/log/Xorg.0.log or verify that iptables or selinux is not interfering with remote connections. Additional information is at http://www.realvnc.com/products/free/4.1/x0.html


66 Replies to “VNC ( Virtual Network Computing ) For Centos”

  1. Super-Duper site! I’m loving it!! Will come again again – taking you feeds also, Thanks.
    Hello. Terrific job. I did not expect this on the Wednesday. This is really a excellent story. Thanks!

  2. Howdy there, have you been getting difficulties with the internet hosting? I required to refresh the web page about enormous number of times to be able to get the web page to run!

  3. This will be an extremely large imagination that you are rendering and you reach it away for free. I savor seeing websites that start to see the value of supplying a prime resource for free. I truly enjoyed reading your Wiley Post. Thanks!

  4. I just couldn’t depart your website before suggesting that I actually enjoyed the standard info a person provide for your visitors? Is going to be back often in order to check up on new posts

  5. This will be an incredibly expectant resourcefulness that you are supplying and you turn over it away for free. I bask seeing websites that be aware of the value of supplying a prime resource for free. I truly enjoyed reading your Wiley Post. Thanks!

  6. I wanted to say your blog is kinda awesome. I always like to learn something new about this because I have the similar blog in my Country on this subject so this help´s me a lot. I did a search on the issue and found a good number of blogs but nothing like this.Thanks for sharing so much in your blog.. Greets, Andrea

  7. Nice post. I be taught something more challenging on different blogs everyday. It’ll at all times be stimulating to read content material from different writers and observe slightly something from their store. I’d choose to make use of some with the content on my weblog whether you don’t mind. Natually I’ll offer you a link in your web blog. Thanks for sharing.

  8. Spot on with this write-up, I actually suppose this web site needs far more consideration. I’ll probably be once more to read way more, thanks for that info.

  9. Good post. I learn one thing more challenging on different blogs everyday. It is going to at all times be stimulating to learn content material from different writers and practice slightly something from their store. I’d prefer to use some with the content material on my weblog whether or not you don’t mind. Natually I’ll offer you a link in your web blog. Thanks for sharing.

  10. I was more than happy to search out this internet-site.I needed to thanks on your time for this glorious read!! I undoubtedly enjoying every little little bit of it and I have you bookmarked to take a look at new stuff you blog post.

  11. An fascinating discussion is worth comment. I believe that you need to write extra on this matter, it may not be a taboo subject however typically persons are not sufficient to speak on such topics. To the next. Cheers

  12. Youre so cool! I dont suppose Ive learn something like this before. So nice to find any person with some unique thoughts on this subject. realy thank you for beginning this up. this website is one thing that is wanted on the web, somebody with slightly originality. useful job for bringing something new to the web!

  13. I’d have to check with you here. Which is not one thing I usually do! I enjoy reading a publish that can make individuals think. Also, thanks for allowing me to remark!

Leave a Reply