In this lesson we will explain how to install and use VNC on your raspberry Pi. This will allow you to see your Raspberry Pi's desktop remotely in a graphical way, using the mouse as if you were sitting in front of your Pi.

Connecting to a Pi like this can save on desktop clutter, and the problem of having multiple keyboards and mice all over the place. It also means you can put your Pi somewhere else on the network, but still control it.

Installing VNC

SSH (see http://learn.adafruit.com/adafruits-raspberry-pi-lesson-6-using-ssh/overview) is often all you need to control your Raspberry Pi, however sometimes it is useful to be able to remote control your Raspberry Pi using the mouse and seeing just what you would see on the screen of the Raspberry Pi. 

VNC (Virtual Network Connection) is a standard for doing just this. To use it, you have to install some software on your Pi. There are a number of VNC server applications, and the one we are going to use is called “tightvnc”.

We can install the VNC server software using the SSH connection that we established earlier.

Enter the following command into your SSH terminal:

sudo apt-get update
sudo apt-get install tightvncserver

You will be prompted to confirm installation by typing “Y' and finally when installation is complete, you should see the following:

We now need to run the VNC Server, so enter the following command into your SSH window:

vncserver :1

You will be prompted to enter and confirm a password. It would make sense to use “raspberry” for this, but passwords are limited to 8 characters, so I use “raspberr”. Note that this is the password that you will need to use to connect to the Raspberry Pi remotely.

You will also be asked if you want to create a separate “read-only” password – say no.

From now on, the only command that you need to type within your SSH to start the VNC server will be:

vncserver :1

The VNC server is now running and so we can attempt to connect to it, but first we must switch to the computer from which we want to control the Pi and setup a VNC client to connect to the Pi.

Using a VNC Client

Again, there are many VNC clients, of which “VNCViewer” (http://www.realvnc.com) is available for most platforms and I have found it to work well with TightVNC.

When you first run VNCViewer, you will see the following:

Enter the IP address of your Raspberry Pi, append :1 (to indicate the port) and click on “Connect”. You will then get a warning message. Just click 'Continue'.

The following window will then popup for you to enter your password (“raspberr”).

Finally, the VNC window itself should appear. You will be able to use the mouse and do everything as if you were using the Pi's keyboard mouse and monitor, except through your other computer.

As with SSH, since this is working over your network, your Pi could be situated anywhere, as long as it is connected to your network.

Built in Screen Sharing

There's also a built in VNC app for the Mac OS X that you may be able to use without installing any software

From the Finder, select Go -> Connect to Server… and type vnc:// (or whatever the IP is) to connect.

Running VNCServer at Startup

This method will only work if you have set your Pi to automatically log into the desktop environment. See Lesson 2.

Connecting to your Raspberry Pi remotely with VNC is fine as long as your Pi does not reboot. If it does, then you either have to connect with SSH and restart the VNC Server or arrange for the VNC Server to run automatically after the Raspberry Pi reboots.

There are several different methods of arranging for some code to be run as the Pi starts. The method described below is probably the easiest to use. You can adapt it to run other commands instead of starting the VNC server.

Step 1.

Open a Terminal session on the Pi, or connect using SSH. A new terminal or SSH session will automatically start you off in your home directory of /home/pi. If you are not in this directory, change to it by typing:

$ cd /home/pi

Then cd to the .config directory by typing:

$ cd .config

Note the '.' at the start of the folder name. This makes it a hidden folder that will not show up when you type 'ls'.

Step 2.

Issue the command below to create a new directory inside .config called 'autostart'.

$ mkdir autostart

cd into that new directory by typing:

$ cd autostart

Step 3.

All that remains is to edit a new configuration file. So type the following command to open the nano editor on the new file:

$ nano tightvnc.desktop

Edit the contents of the file with the following text.

[Desktop Entry]
Exec=vncserver :1

Type ctrl-X and then Y to save the changes to the file.

Thats all there is to it. The next time you reboot the VNC server will restart automatically.

Mac Screen and File Sharing

If you are a Mac user and have a few Macs on your network, then you will probably be used to seeing other Macs in the network automatically show up in the Finder, so that you can log on to them and browse the file system or even remote control them.  

The screen sharing feature of Macs uses VNC, so if you already have TightVNC server installed (as we do) then with a bit of configuration, we can get it to be recognized by other Macs on the network.

The tutorial here: http://4dc5.com/2012/06/12/setting-up-vnc-on-raspberry-pi-for-mac-access/ explains how to do this. It also includes the installation of TightVNC server, which you do not need to repeat as we already have that.

Once its all set up, you will be able to connect to the file system of your raspberry Pi.

Remember to change the user field to pi and as usual the default password is 'raspberry'.

This makes it super-easy to copy files back and forth between your Mac and Pi.

If you click on the Share Screen button, you will get another login prompt.

This time, the password is the password you set up for the VNC server – I suggested 'raspberr'. That is with the 'y' missing from the end.

You should then get a VNC window using the Mac's built-in VNC viewer.

Test & Configure

Being able to connect to your Pi remotely like this can be really useful. However, as with SSH, you need to know its IP address to be able to connect. It is a good idea to set the lease time to be as long as possible on your home router.

To do this, log into your home router, find the DHCP settings page and set the DHCP lease time to as long as possible or select a Permanent Lease option if it is available.

This will help to ensure that your Pi always gets the same IP address.

If you are experienced at network configuration, you can change your raspberry Pi to have a static IP address, but this can lead to problems if you move your Pi between different networks.

If you require a different screen size for your VNC screen, then you can configure VNC by adding the following options to the end of the command to start the VNC server. This applies to both starting the VNC server manually or setting it to start automatically.

vncserver :1 -geometry 1440x900

The figures after -geometry are the screen width and height in pixels.