Install and Configure the Ubuntu Desktop UI on Google Cloud Platform

Posted on Leave a comment
Google Cloud Platform
Reading Time: 4 minutes


It´s awesome when you have your notebook with speed and memory enough to do your development experiments but when you do not have, it sucks! Use a remote machine hosted in the cloud is a good option but access it only by the terminal can not be enough if you want to install an IDE or even use the browser. In this tutorial I will show how you can use a remote VM Instance on GCP in the same way you use your local machine. You will be able to have a full desktop user interface and use any application that needs the UI.

As a pre-requirement for this tutorial you will need:

Check my previous tutorial where I show how to create a VM Instance with Ubuntu on GCP. To allow your local machine to connect safely to the VM Instance you will also need the Google Cloud SDK. It will be used to create a tunnel between your machine and the VM Instance. This installation is different according to your operating system. If you are using windows check my tutorial where I show how to install it, otherwise go to the Google Cloud Quickstarts documentation and follow the steps according to your operating system.

Installing the virtual desktop components

Start your VM Instance and connect to it through the SSH browser.

Once you are connected, update the Linux source list and install all the necessary components for our virtual desktop. Type the following commands one by one in the terminal. The -y option hides the confirmation option during the installation.

sudo apt-get -y update 
sudo apt-get -y upgrade 
sudo apt-get -y install gnome-shell 
sudo apt-get -y install ubuntu-gnome-desktop 
sudo apt-get -y install autocutsel 
sudo apt-get -y install gnome-core 
sudo apt-get -y install gnome-panel 
sudo apt-get -y install gnome-themes-standard

Now install and configure the tightvncserver. It will allow connections in your remote desktop environment. Type the following command:

sudo apt-get -y install tightvncserver
touch ~/.Xresources

Initialize the tightvncserver with the command below. It will request you to create a password. Define a password of 8 characters i.e becloud. Type the command:

tightvncserver

The output will be something like this bellow. When asked to a view-only password, type n for not now.

educostadev@becloudnativedesktop:~$ tightvncserver
You will need a password to access your desktops.
Password: 
Verify:   
Would you like to enter a view-only password (y/n)? n
xauth:  file /home/educostadev/.Xauthority does not exist
​
New 'X' desktop is becloudnativedesktop:1
​
Creating default startup script /home/educostadev/.vnc/xstartup
Starting applications specified in /home/educostadev/.vnc/xstartup
Log file is /home/educostadev/.vnc/becloudnativedesktop:1.log

The command above generated the configuration files. Kill the session we created. Type the command:

vncserver -kill :1

Edit the file ~/.vnc/xstartup that was before created. In this example, I´m using the vimeditor but you can use any other. Follow the steps bellow:

  • Type on console: vim ~/.vnc/xstartup
  • Once the editor is opened enter in the Insert Mode, type: i
  • Delete all the content. Press the key: delete

Copy and paste the content bellow inside the editor:

#!/bin/sh
autocutsel -fork
xrdb $HOME/.Xresources
xsetroot -solid grey
export XKL_XMODMAP_DISABLE=1
export XDG_CURRENT_DESKTOP="GNOME-Flashback:Unity"
export XDG_MENU_PREFIX="gnome-flashback-"
unset DBUS_SESSION_BUS_ADDRESS
gnome-session --session=gnome-flashback-metacity --disable-acceleration-check --debug &

Now it´s time to exit the insert mode. Save and close the file:

  • Press Escto exit the insert mode. And type :wq to write and quit the file.

Start the vnc server to accept remote connections. Type the command below and replace the screen resolution to a resolution that fits well in your monitor. i.e 1024×768 , 1280×1024, 1440×900

vncserver -geometry 1440x900 

Configuring the Google SDK tunnel

Once you have the Google SDK Installed, open the terminal in your local machine and type the command below. The command will open a connection with your remote machine and map the port 5901. Check the documentation for a detailed description of each parameter.

Type in your local terminal the command bellow replacing the values of the parameters with the information of your GCP account and remote machine.

gcloud compute ssh educostadev@becloudnativedesktop --project modern-optics-252617 --zone us-west1-b --ssh-flag "-L 5901:localhost:5901"

The meaning of the main parameters are:

  • compute ssh <USER>@<REMOTEHOSTNAME> : The user name and host name of the remote machine.
  • –project <PROJECT ID> . Your project ID. You can found it in your GCP Dashboard
  • –zone <ZONE>. The machine´s zone. You can found it in the description of your VM Instance

The output in the terminal will be something like this:

λ gcloud compute ssh becloudnativedesktop --project modern-optics-252617 --zone us-west1-b --ssh-flag "-L 5901:localhost:5901"
WARNING: The PuTTY PPK SSH key file for gcloud does not exist.
WARNING: The public SSH key file for gcloud does not exist.
WARNING: The private SSH key file for gcloud does not exist.
WARNING: You do not have an SSH key for gcloud.
WARNING: SSH keygen will be executed to generate a key.
Updating project ssh metadata.../Updated [https://www.googleapis.com/compute/v1/projects/modern-optics-252617].
Updating project ssh metadata...done.
Waiting for SSH key to propagate.
The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's ssh-ed25519 key fingerprint is:
ssh-ed25519 255 b9:78:65:e0:b0:a0:58:65:1d:2d:4a:f4:2d:c5:46:7e
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.

And a connection between your local machine and the remote host will be made. The output in the terminal will be something like this.

Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-1044-gcp x86_64)
​
 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
​
  System information as of Sun Nov  3 01:42:23 UTC 2019
​
  System load:  0.0               Processes:           163
  Usage of /:   9.0% of 48.29GB   Users logged in:     1
  Memory usage: 23%               IP address for ens4: 10.138.0.4
  Swap usage:   0%
​
 * Kata Containers are now fully integrated in Charmed Kubernetes 1.16!
   Yes, charms take the Krazy out of K8s Kata Kluster Konstruction.
​
     https://ubuntu.com/kubernetes/docs/release-notes
​
 * Canonical Livepatch is available for installation.
   - Reduce system reboots and improve kernel security. Activate at:
     https://ubuntu.com/livepatch
​
10 packages can be updated.
0 updates are security updates.
​
​
*** System restart required ***
Last login: Sun Nov  3 01:39:03 2019 from 177.194.54.23
eduardo@becloudnativedesktop:~$

Keep this new terminal open.

Download and install the VNC Viewer. Open the VNC Viewer and in the program bar type localhost:5901. Confirm all options and when requested type the password defined before.

You finally went into the desktop of your Ubuntu virtual machine on Google Cloud Compute.

Leave a Reply

Your email address will not be published. Required fields are marked *