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:
- A VM instance with Ubuntu 18.04-LTS image installed and running in your GCP.
- Google Cloud SDK installed in your local machine.
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. -y
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 vim
editor 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
Esc
to 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.
Excellent. It helped me a lot. Thank you very much
I’m glad it helped you. Thanks for drop a comment!
comprehensive & understandable..
Cheers.
I really appreciated.
Thanks for leaving a comment.
Thanks for the tutorial. It helped in configuring the Ubuntu desktop UI using VNC Viewer. However, I am not able to use my mouse or keyboard on the Ubuntu UI. Can you kindly direct me to the solution please
That’s awkward. Take a look at vnc local configurations. You can also try to a remote connection test to any other physical computer to be sure it does not work only on the remote desktop at cloud.
Thanks a lot! 🙂
thank you so much for this guide.
Works very good!