Start a VNC server on boot on Ubuntu

As gaining remote access to an Ubuntu Desktop machine is only possible when the user is logged into the X interface, it could be interesting to start the VNC automatically on boot. My description is based on the following article.

To set it up, follow these steps:

  1. First, install the TightVNC server. It can be installed with Synaptic, or with 
    sudo aptitude install tightvncserver
  2. Set up the VNC server for the user you wish to log in as. When you run “vncserver” for the first time, it will ask you to set a password. VNC authentication is not the strongest encryption available, so be sure to firewall your server from all but trusted machines. To launch programs or a session when your VNC session starts, modify 
    ~/.vnc/xstartup

    Here is an example of xstartup: it runs an icewm session and K3B. For Gnome, try running “gnome-session”, and for KDE, try “startkde”.

    #!/bin/sh
    
    xrdb $HOME/.Xresources
    xsetroot -solid black
    k3b &
    icewm-session &
    
  3. Copy the following into 
    /etc/init.d/vncserver

    Be sure to change the “USER” variable to whatever user you want the VNC server to run under.

    #!/bin/sh -e
    ### BEGIN INIT INFO
    # Provides:          vncserver
    # Required-Start:    networking
    # Default-Start:     3 4 5
    # Default-Stop:      0 6
    ### END INIT INFOPATH="$PATH:/usr/X11R6/bin/"
    # The Username:Group that will run VNC
    export USER="myuser"
    #${RUNAS}# The display that VNC will use (this correspond to the port)
    # Display 1 --> Listening on port 5901
    DISPLAY="1"
    
    # Color depth (between 8 and 32)
    DEPTH="16"
    
    # The Desktop geometry to use.
    #GEOMETRY="<WIDTH>x<HEIGHT>"
    #GEOMETRY="800x600"
    #GEOMETRY="1024x768"
    GEOMETRY="1280x1024"
    
    # The name that the VNC Desktop will have.
    NAME="my-vnc-server"
    
    OPTIONS="-name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"
    
    case "$1" in
    start)
    log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}"
    su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
    ;;
    
    stop)
    log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}"
    su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}"
    ;;
    
    restart)
    $0 stop
    $0 start
    ;;
    esac
    
    exit 0
    
  4. Make the script executable with 
    sudo chmod +x /etc/init.d/vncserver

    Then, run

    sudo update-rc.d vncserver defaults

    This adds the appropriate symlinks to the vncserver script so that it is sent the start and stop commands at the appropriate time.

  5. To start the server without rebooting, run 
    sudo /etc/init.d/vncserver start
  6. Finally, connect to your server with a VNC client on port 590X, where X is the value of “DISPLAY” in the vncserver script.

About

Your email will not be published. Name and Email fields are required.