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…


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


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.


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.


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.


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.


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.


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


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.


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 and download the puTTY client. Once installed, enter the DNS address and click connect.


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.


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) apt-get update


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.


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.


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.


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.


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

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 (33)

  1. Anonymous says:

    Awesome tutorial. Thanks

  2. Anonymous says:

    Can you provide instructions on how to get this working on the Ubuntu 13 images? I have mine running but the desktop just shows up as plain grey with no desktop or event terminal. I think it has something to do with default 3d support in Ubuntu desktop but I do not know how to properly configure this to work over RDP or VNC. Thank you for your help!

  3. Gleb says:

    very easy to follow tutorial, thanks. I followed all the steps, but unfortunately after logging in to the RDP what I got is a grey screen, mouse pointer in a form of X, no wallpaper and I can't even open a console with Ctrl+Alt+T. I even restarted the
    VM. Any ideas on what I did wrong?

  4. Gleb says:

    Very good tutorial, thanks. I'm having a problem though – after following each step all I got is a grey screen when connecting from Windows machine. Any ideas about why that is? I launched VM with 750Mb of memory, may be it's too small for a desktop Linux?

  5. David S says:

    Nice! thanks for a straight forward step-by-step example of how to get this running.. I tried a couple of other methods (using xRdp too) but didn't work.. so many thanks for sharing, and the site too!

  6. John says:

    What a AMAZING tutorial.You explain everything so well.

  7. edward says:

    I tried this solutions from another site ( and use the original user to login instead.

  8. Anonymous says:


    Windows Azure是微软的云服务集合,用来提供云在线服务所需要的操作系统与基础存储与管理的平台

  9. Muhammad Zohaib says:

    i only need remote access to my db ,which is on my VM of windows azure , how can i achieve my target ?

  10. Van says:

    Excellent video instruction. Love it

  11. Dale says:

    Did anyone get the grey screen on connect and then resolve it? that's all I see as well – a grey screen with only a cursor that I can't control.

  12. John says:

    I think the issue with the grey screen may be related to the install over Ubuntu 14. See this post

    Haven't tried the work around yet

  13. bsaparna says:

    I followed all the steps mentioned in this article. (It is a great piece 🙂 )
    But once i login, i just get a blank screen. Nothing happens whichever key i press.
    Any pointers to this?

  14. Jools says:

    Thanks. Great tutorial. Make sure you use Ubuntu Server 12.04 as 14 doesn't work with xrdb.

  15. loms says:

    Thank you very much !!!!!!!!!!!!!

  16. Ferg says:

    Very nice tutorial – thank you!

  17. Kwasi says:

    Exellent article. Great. Thank you

  18. jay says:

    Finally an Azure tutorial even I can follow. You should be running Microsoft.

  19. Cormac says:

    Thank you for the excellent article.

  20. Anonymous says:

    Converting Azure PowerShell scripts to Linux Scripts.
    In one of my recent customer engagements, I was

  21. Anonymous says:

          Converting Azure PowerShell scripts to Linux Scripts. In one of my recent customer

  22. Pelle says:

    Great guide. Worked like a charm.
    Thank you!

  23. rolo says:

    Very useful and clean tutorial. Thank you for the sharing.

  24. Martin says:

    Thanks for the instructions.

    For Ubuntu versions after 12.10, you'll have to replace

    sudo apt-get install ubuntu-desktop

    with some other desktop. You can install XUbuntu with xfce or just xfce alone, if you prefer something lightweight without all desktop apps. I did as follows:

    sudo apt-get install xfce4
    echo xfce4-session >~/.xsession

    and added Firefox web browser just because I sometimes need it on the server:
    sudo apt-get install firefox

    Everything else can be done as told in this article.

  25. RODRIGO ROCHA says:


  26. antimaterie says:

    Great post, many thanks!

  27. Jenny says:

    Hello Do u have a Solution for me, when I don't have Internet?

  28. Satya says:

    Please provide steps to connect Linux vm created using ARM using SSH

  29. soll86 says:

    Great ! Thanks !

  30. vivek says:


    Nice article but after rdp its working slow is there any option to speed up

  31. towhid says:

    There is a mistake in your sudo code :
    mistake->”sudo get-apt update”
    correction->”sudo apt-get update”

  32. says:

    To solve the grey screen with a cross as an arrow… see
    Ubuntu 16 doesn’t support xrdp.

Skip to main content