remote desktop

5 ways to remote desktop on Raspberry Pi (Windows/Linux/Mac)

If you don’t have the Raspberry directly at hand (or no screen) and you need to make regular changes on it, it may be interesting to have access to the desktop from another computer (in addition to ssh)

How to access a Remote Desktop on Raspberry Pi?
There are five ways you can use to run a remote desktop on Raspberry Pi, sorted by ease of installation :

  1. Xrdp
  2. SSH and X11 forwarding
  3. VNC
  4. Teamviewer
  5. NoMachine

For each method, I will explain how to set it up on your Raspberry Pi and how to access it from the main OS (Windows, Linux, Mac and even from your smartphones)

To install the necessary packages and to connect, you will need to find the IP address of your Raspberry Pi, and probably activate and log in SSH
I’ll let you read my two articles on the subject if needed

Remote desktop with xrdp

Introduction

Xrdp is an opensource remote desktop protocol server, which allows you to connect to the Linux desktop from any operating system
If you need to open or redirect access on your router or firewall, know that xrdp uses the standard port 3389

Installation

The installation of xrdp is straightforward since it is available in the original Raspbian repositories

So just run the following command:

sudo apt-get install xrdp

xrdp is present on raspberry as a service, so you can manage it with the usual controls if needed :

sudo service xrdp start | stop | restart | status

From Linux

To connect from a pc under Linux, I advise you to use Remmina
It is provided in the repositories for most distributions:

sudo apt-get install remmina

Once installed, launch it and connect to the IP address of your Raspberry Pi

On my Ubuntu I encountered the following error:

"You requested an h264 GFX mode for server 192.168.1.15, but your libfreerdp does not support h264. Please check color depth settings."

So I had to add it as a shortcut, the quick connection does not allow to define the color depth
By choosing GFX RFX in the list, the error disappeared, and I was able to connect

Here are the options I filled :

remmina remote desktop

From Windows

From Windows start the “Remote Desktop Connection” tool from the start menu and fill the IP address :

windows remote desktop

Click on “Connect” and you will come to the xrdp login screen

xrdp login remote desktop

All you need to do is enter the credentials and click OK
Set Xorg for Session if you do not know what you are doing
The desktop will then be displayed relatively well

In my case the icon was a bit big, so I changed in the appearance options, but otherwise it was usable

From Mac OS

I could not do the test on Mac OS, but there are several RDP clients that you can use the same way

Download for example “Microsoft Remote Desktop” from the App Store, and connect to your Raspberry Pi by specifying its IP address

From a smartphone

You can use the RDP protocol from a smartphone quite easily
Indeed the application “Microsoft Remote Desktop” is also available for Android and iOS

So yes it’s possible to connect and use it, but it’s not great

Remote desktop with SSH and X11 forwarding

Introduction

X11 is the main Linux graphical window manager
X11 forwarding over SSH is a way to start an app from a server when connected to it via SSH
In our case, this will launch Raspberry Pi applications from our desktop (so it is not full access to the desktop)

This method could work from a remote location. It would be enough to open SSH port (22) from outside
Remember to limit the allowed IP addresses in this case, and maybe set up additional protections like fail2ban to avoid any security issues

Installation

There is nothing to do on the Raspberry Pi, X11 Forwarding is enabled by default on Raspbian

If you have any problem you can check that X11Forwarding is uncommented and set to yes in /etc/ssh/sshd_config,

From Linux or Mac OS

Using Linux or Mac OS, the access is almost as usual, because you only have to log in to SSH by adding a parameter:

ssh -X pi@192.168.1.15

Enter your password, and then start your app with the nohup command :

nohup chromium-browser &

Replace chromium-browser with the app of your choice

The application will open on your computer (with more or less slow depending on the case 🙂 )

From Windows

Using Windows you will need:
Putty (which you probably already have for the SSH connection)
Xming (download it on Sourceforge)

Once Xming is installed (the default options work very well), follow these steps:

  1. Start Putty
  2. Fill the hostname with something like pi@192.168.1.15
  3. Fill the Saved sessions with something like Raspberry Pi
  4. Go to Connection > SSH in the left menu, and check “Enable X11 forwarding”
  5. Go back to Session and click Save
  6. Then double-click on your new saved session to connect

Once this is done, your SSH access to the Raspberry Pi is kept, with the X11 forwarding enabled

Once in the console, you can launch a Raspberry application on your Windows computer with the nohup command:

nohup baobab &

This will start the Raspberry Pi disk manager on your Windows desktop :

From a smartphone

I don’t think it’s possible to use this method from your phone (tell me if you know how)

I’ve already seen people start an X server on Android to use an android app on their computer, but not the other way around

Remote desktop with VNC

Introduction

VNC (Virtual Network Computing) is a system to share a graphical desktop, pretty close to xrdp
The difference is that you connect to the current session directly, unlike xrdp which created a new session
There are a large number of VNC servers and clients (RealVNC, TightVNC, UltraVNC, …)

VNC runs on port 5900
You can do NAT to make it available from the outside if needed

Installation

We will install the RealVNC server on the Raspberry Pi, which is available in the repositories
Follow the steps below to install it:

  1. Update your repository :
    sudo apt-get update
  2. Install RealVNC server :
    sudo apt-get install realvnc-server
  3. Enable VNC Server :
    1. Start raspbian configuration
      sudo raspi-config
    2. Got to Interfacing options
    3. Select VNC
    4. Answer Yes
    5. Select Finish to quit (or ESC)

Now that we finished installing VNC, let’s see how to connect

From Linux

On Linux, the easiest way I found was to install the RealVNC client (Remmina also allows VNC connections in theory, but it didn’t work for me)

So, you can download RealVNC viewer here

Leave the default option (Standalone) if it is to use once, but I advise you to choose the .deb or the .rpm according to your OS, to have the RealVNC shortcut in the programs

In most cases, you can install it by double clicking on the file, but if necessary you can do it on the command line, for example:

Debian like : dpkg -i VNC-Viewer-6.18.625-Linux-x64.deb
Redhat like  : rpm -ihv VNC-Viewer-6.18.625-Linux-x64.rpm

Then the use of RealVNC is super simple, just indicate the IP of Raspberry Pi and validate
Access will be automatically bookmarked for future times

From Windows

From Windows it is the same thing, you can download and install RealVNC from their official website

Then launch the software via the start menu, type the IP of the Raspberry Pi and here you are connected to the remote desktop

The requested logins are the usual users of the system (for example pi/raspberry if you have not changed the password)

From Mac OS

RealVNC is also available for Mac OS  so just get and install it and then follow the same steps as below 🙂

From a smartphone

RealVNC also provide an app for iOS and Android smartphones so that you can use it every time, everywhere 🙂

Remote desktop with Teamviewer

Introduction

Teamviewer is a proprietary software very close to VNC for remote desktop use but adds additional features, mostly business oriented
For example, Teamviewer facilitates remote access to a machine on another building/city over the Internet.

There is no need to open a specific port for each computer as with previous solutions
By default, TeamViewer connect on port 5938 but can also use ports 80 and 443 if not opened (so it will work natively most of the time)

Installation

The installation is not obvious, because even if it is mentioned in the documentation of a package for the ARM, it is not present in the Linux download links and there is no Raspberry Pi category
The download is done from this page, but that redirects very quickly to the Linux downloads

In short, I give you the installation procedure without having to go to their site:

  1. Get the ARM package for TeamViewer
    wget https://download.teamviewer.com/download/linux/teamviewer-host_armhf.deb
  2. Install it
    sudo dpkg -i teamviewer-host_armhf.deb
  3. You will get some dependencies errors, fix them by doing
    sudo apt-get update
    sudo apt-get -f install
  4. If you have a TeamViewer account, you can configure it by doing :
    sudo teamviewer setup
  5. Otherwise, you will need to set a password to connect, like this :
    sudo teamviewer passwd YOURPASSWORD
  6. And then you can just get the Raspberry Pi ID in this way:
    sudo teamviewer info

From Linux

On Linux, start by downloading the TeamViewer client from the official website

Then install it with your package manager or by doing something like :

sudo dpkg -i teamviewer_13.2.13582_amd64.deb

Start the app via the Start menu or by typing “TeamViewer” in a terminal
Log in if you have an account
Then enter the TeamViewer ID in the Partner ID field and press enter

teamviewer remote desktop connect

It will ask you the password defined previously and connect to the Raspberry Pi in remote desktop

From Windows and Mac OS

For Windows and Mac OS users it’s the same procedure, so I will not duplicate it

Download Teamviewer, install it and then enter ID & Password previously get/set

From a smartphone

TeamViewer provides support for its software to Android, iPhone, Windows and Blackberry smartphones
It is, therefore, possible to use the app in the same way to make spontaneous support from anywhere

Remote desktop with NoMachine

Introduction

NoMachine is another remote desktop access tool that you can use with your RaspberryPi
NoMachine is based on the NX protocol, which was created to improve the performance of the classic X display
The use is very close to VNC

If used behind a firewall, please note that NoMachine uses port 4000 for connections from the client
It is possible to change the default ports in the administration tools of the NoMachine server

Installation

NoMachine is provided for Raspberry Pi so that you can get the package corresponding to your environment on this page

Download it and install it with :

wget http://download.nomachine.com/download/6.2/Raspberry/nomachine_6.2.4_1_armhf.deb
sudo dpkg -i nomachine_6.2.4_1_armhf.deb

Replace the version number with the last one you get

Installation may take a few minutes

From any OS

Once the installation is complete on the Raspberry Pi, you have to install it on the client computer as well
Go back to the official site and download this time the version corresponding to your computer

Install the downloaded file and launch NoMachine
An assistant will start, then NoMachine will automatically detect your Raspberry Pi on the network

remote desktop with nomachine

You have to double click on the Raspberry Pi to connect
It will ask you for your credentials (pi/raspberry or the password you have defined), and you will be logged in

From a smartphone

NoMachine is also available for Android and iOS so that you can connect to your Raspberry Pi from anywhere

Conclusion

So we learned to connect to the remote desktop in 5 ways:

  • With the Xrdp package that provides a Windows-like remote desktop
  • With SSH and X11 Forwarding that allows launching an app on the client computer (and not the entire desktop)
  • With VNC that enables local access to the Raspberry Pi
  • With Teamviewer which allows among others remote access to the Raspberry Pi
  • With NoMachine that allows local access more elegantly and quickly than VNC

So, what is your favorite?

In my opinion, I think that VNC and NoMachine are my favorites, with a quick and clean display, without the heaviness of Teamviewer
But it’s because I need it only on my local network, it depends on the cases

Leave a Comment