Running a Remote Desktop on a Windows Azure Linux VM


A complete click-by-click, step-by-step video of this article is available here.

OR… You can read the article, line-by-line.

It all starts with a Linux Server running in the Windows Azure cloud…

image

Onto this you’ll install a remote desktop protocol (RDP) server called xrdp.

image

But to get this server software installed, you need to configure the Linux server. You’ll use your workstation to do this with an SSH client such as PuTTY. You’ll need to connect port 22 from the LINUX server up to the Internet. Then you can use the PUTTY client on your workstation to connect over SSH.

image

That gives you a command prompt. That’s as much as you need to get the XRDP server installed, running and ready to accept connections from the outside world.

image

You type a series of commands which will download and install the XRDP server on to your LINUX machine.

You can then fire up a local Remote Desktop client, such as the one that comes with Windows, if you are on a windows machine. Depending on the version of Windows you are using you can find it by searching for either “Remote Desktop” or “mstsc”. You can also connect directly from the Windows Azure portal by downloading the RDP file from the server.

image

Let’s have a look at how this is all achieved, click-by-click.

In the Windows Azure Portal, I create a new Virtual Machine. In this case I’m creating an Ubuntu Server 12.04 LTS. I specify the latest version release date, the machine name, the size of the VM, and I create an administrative, or root user – in this case “planky”. To keep things simple I avoid certificate authentication for the SSH session and just use a password.

image

I specify to create a new cloud service and I keep the default name. I then pick the Windows Azure subscription I want to use and pick a data centre to deploy to – in this case I use North Europe which is located in Dublin, Ireland, because that’s the closest Data Centre to me. You can see I pick one of my existing storage accounts. If you don’t already have one you want to use, just get the portal to automatically generate a storage account for you. I don’t worry about an Availability Set.

image

I make sure the SSH endpoint is connected to the load balancer. It’s set by default on port 22.

image

It takes a few minutes for the machine to provision.

I can get the DNS name of the server from the Dashboard. I just copy it in to the paste buffer.

image

If you already have an SSH client installed, you can paste the name in to it. I’ve got PuTTY installed. If you need to install a client at this stage, you could go to https://aka.ms/putty and download the puTTY client. Once installed, enter the DNS address and click connect.

image

A security message pops up to warn you that there is a chance that the server you are connecting to is not the one you think it is. For example if a hacker managed to modify the DNS settings in your computer. The message hints there are ways around these problems. The message is rather similar to the ones you get from the Remote Desktop client.

If you are happy you are not being misled, then go ahead, as I do in this case. I now log in as the root user I specified when I created the VM in the Windows Azure portal.

image

All the commands you are about to run need to be done at an elevated privilege. There is a rough approximation to the Windows “Run as Administrator”, known as “sudoo” or “SuDO”. This means “super-user do”. You specify this keyword and the following command is run at the elevated privilege level. That is, as long as the account you are logged in to is a superuser – which this one is.

Linux uses the notion of “packages”. The packaging system uses a special database to keep track of which packages are installed, which are not installed and which are available for installation. apt-get is a command that uses the database to find out how to install packages and find out which additional packages are needed for a selected package to work properly.

To update this list, I type sudo (that is, run in superuser context) get-apt update

image

You now need patience as a slew of information is dumped to the screen, and continues to do so for some minutes.

I now install a GUI dektop on to the Ubuntu server. In this case I use the Gnome desktop and the command is:

sudo apt-get install ubuntu-desktop

There is a warning about the amount of disk space this will take, but I’m happy with it and select “yes”.

…again you need some patience.

Once the desktop is installed, I need the rdp server so I can expose the desktop over a network connection. It’s a similar command:

sudo apt-get install xrdp

…and even though the console says the RDP server is started, experience shows me it hasn’t so I type

sudo /etc/init.d/xrdp start

Next I add a user that I want to be able to use the Remote Desktop with

sudo adduser primech. The “primech” bit is the username. You get prompted for some other user-type data.

…now, probably the first thing the user will want to do, because it’s probably going to be you, is to install packages and configure the system. So they need to be added to the sudo group with

sudo adduser primech sudo

Great! So now the internals of the Ubuntu Linux server are all set up. I now need to get it communicating over the Internet on the RDP port. By default, on a Linux Server, this port is not set up, like it is on a Windows Server.

In the portal I go to the endpoints tab and Add a new endpoint.

I specify a Standalone Endpoint and then on the next page select Remote Desktop and in this case leave both the public and private ports at 3389.

image

That’s the default port for RDP connections. The portal connects port 3389 from the Linux Server to the load balancer. It then connects port 3389 from the load balancer to the internet and maps the external port to the internal one. SO anybody now coming in to this service on port 3389 will be taken straight to the Linux Server on port 3389 and the RDP server running in the Linux Server will respond.

Flipping back to the virtual machines page in the portal, now the Remote Desktop Protocol is configured, the “CONNECT” icon at the bottom of the screen is available.

image

Clicking this now gives a very similar experience to connecting to a Windows Server only the logon page is coming from the Linux Server. Enter the username and password of the user you just created and you’ll be logged in to the Gnome desktop.

image

As a general rule, you’ll find the desktop and RDP server are not as optimised for network usage as the Windows desktop, but it’s still a very usable system.

Here is a screenshot of the Linux desktop where I use Firefox to connect to the Windows Azure portal. I can see the portal that is managing the server I’m connected to.

image

Now, as the captain of a 747 says, when he needs a coffee – “you have control”.

If you want to try any of this stuff out for free on Windows Azure, get a free Windows Azure subscription at https://aka.ms/azure_trial.

You can try up to 30 different labs on Azure using the free training kit, downloadable from http://aka/ms/watk.

You can watch the video of this with step-by-step and click-by-click commentary on the Channel 9 Website.

Or watch it right within this page:


Comments (9)

  1. Ahmed Sabbour says:

    Just a potential pitfall, it doesn't work with Ubuntu 13.10 because xRDP doesn't support it.

  2. plankytronixx says:

    Thanks Ahmed. Well you're the guy that pointed me in the right direction in the first place – so it's great to have this kind of info. 13.10 is one of 4 images in the Azure Portal – so I guess there's a 25% chance it won't work.

    I'll make your point at the top of this blog post tomorrow when I edit it.

    Thanks Ahmed.

  3. Ronald del Rosario says:

    Planky Thanks for the info. Only one thing, after I log in my Linux box (Ubuntu), the desktop just stays on the gray screen with the mouse as an "x" mark, I do not get to the desktop. Anything I missed?

    Thanks,

    Ronald

  4. plankytronixx says:

    Hi Ronald,

    What version of Ubuntu are you using? I think versions above 13.10 give problems. I used 12.04.

  5. paul_cheung says:

    as Ronald del Rosario mentioned, i have the same issue, my ubuntu is of the version 12.10

  6. Alvaro Ramirez says:

    Hi Planky, excellent blog. It is written in detail and exactly as anyone wants. However I am experiencing the same issue as Ronald and Paul. I guess the version I chose was newer than 12.04, but I am not sure. At this point I have a couple of questions:

    1. I want to be sure I am using the correct server name (just in case…). I took it from the Virtual Machine option in Azure, Dashboard, under DNS name (myserver.cloudapp.net). Is this the correct place to find the server name?

    2. How can I know in Azure what version of Ubuntu did I install?

    3. My first guess was this is a memory problem in Ubuntu. I tried changing the server type from A0 (shared core, 768 MB memory) to A1 (1 core, 1.75 GB memory) and still have the same problem.

    4. My second guess was this is an RDC config problem (screen resolution too high or too many colors) but it did not work either even though I changed the resolution to 800×600 and reduced the number of colors to the minimum in RDC.

    5. Because the previous two did not work, I tried from my Mac computer but I got the same result.

    The questions are:

    1. Is there any other program like RDC we can use in Windows and/or Mac?

    2. How can I fix it? Do I have to reinstall everything from scratch including the virtual server itself?

    Thanks!!!

  7. Danny Fu says:

    I got the same issue as Ronald and Paul and Alvaro. How to fix it?

  8. jim blizzard [aka bliz] says:

    These instructions worked for me for Ubuntu 14.x from Windows 8 client:  

    1. After you've followed the excellent instructions in the post, follow these additional instructions and you should be set: "Ubuntu 14.04 – How to install xrdp in Ubuntu 14.04" – http://c-nergy.be/blog/?p=5305  

    bliz

  9. Dave says:

    I thought I followed all the instructions here but I'm still seeing the connect button faded out. The azure portal seems to be a bit different now and I don't see an endpoints section but I added rules to allow inbound / outbound traffic on port 3389 but still no luck … any idea what I'm missing here?