How to set up a graphical interface

Errors or typos? Topics missing? Hard to read? Let us know or open an issue on GitHub.

The graphical desktop can be viewed in various ways. In this document, we describe two options: RDP (Remote Display Protocol) and plain X11 forwarding. Other methods include VNC and running a Mir shell through X11 forwarding, as described in A simple GUI shell for a Multipass VM.

Using RDP

The images used by Multipass do not come with a graphical desktop installed. For this reason, a desktop environment must be installed (here we use ubuntu-desktop but there are as many other options as flavors of Ubuntu exist), along with the RDP server (we will use xrdp but there are also other options such as freerdp).

To do this, first you need to log in to the running Multipass instance:

$ multipass shell headbanging-squid

Once inside the instance, run the following commands to install ubuntu-desktop and xrdp:

$ sudo apt update
$ sudo apt install ubuntu-desktop xrdp

Then, we need a user with a password in order to log in. One possibility is setting a password for the default ubuntu user:

$ sudo passwd ubuntu

You will be asked to enter and re-enter a password.

You are done on the server side!

Now, quit the Ubuntu shell on the instance with the logout command and find out in the host the IP address to connect to:

$ multipass list
Name                    State             IPv4             Image
headbanging-squid       Running      Ubuntu 22.04 LTS

In this example, we will use the IP address to connect to the RDP server on the instance.

If the IP address of the instance is not displayed in the output of multipass list, it can be obtained directly from the instance, with the command ip addr.

On Linux, there are applications such as Remmina to visualize the desktop (make sure the package remmina-plugin-rdp is installed in your host along with remmina).

To directly launch the client, run the following command:

$ remmina -c rdp://

The system will ask for a username (ubuntu) and the password set above, and then the Ubuntu desktop on the instance will be displayed.

Logging in to the RDP server with Remmina

To connect on MacOS, we can use the “Microsoft Remote Desktop” application, from the Mac App Store.

On Windows, we can connect to the RDP server with the “Remote Desktop Connection” application. There, we enter the virtual machine’s IP address, set the session to XOrg and enter the username and password we created on the previuos step.

And we are done… a graphical desktop!

Using X11 forwarding

It might be the case that we only want Multipass to launch one application and to see only that window, without having the need for a complete desktop. It turns out that this setup is simpler than the RDP approach, because we do not need the Multipass instance to deploy a full desktop. Instead, we can use X11 to connect the applications in the instance with the graphical capabilities of the host.

Linux runs X by default, so no extra software in the host is needed.

We have the possibility here to be a bit more secure than on Windows, by using authentication in X forwarding. However, we will forward through SSH in order to avoid struggling with xauth stuff. We will allow our user in the host to log in to the Multipass instance through SSH, so that we can pass extra parameters to it.

To do that, copy your public key, stored in ~/.ssh/, to the list of authorized keys of the instance, into the file ~/.ssh/authorized_keys (remember to replace the example instance name with yours):

$ multipass exec rocking-squirrel -- bash -c "echo `cat ~/.ssh/` >> ~/.ssh/authorized_keys"

If the file ~/.ssh/ does not exist, it means that you need to create your SSH keys. Use ssh-keygen to create them and then run the previous command again.

Check the IP address of the instance, using multipass info rocking-squirrel. Finally, log in to the instance using X forwarding using the command (replace xx.xx.xx.xx with the IP address obtained above):

$ ssh -X ubuntu@xx.xx.xx.xx

Test the setting running a program of your choice on the instance; for example:

$ sudo apt -y install x11-apps
$ xlogo &

xlogo on Linux

A small window containing the X logo will show up. Done!

The first step in Mac is to make sure a X server is running. The easiest way is to install XQuartz.

Once the X server is running, the procedure for macOS is the same as for Linux.

Note to Apple Silicon users: some applications requiring OpenGL will not work through X11 forwarding.

Windows knows nothing about X, therefore we need to install an X server. Here we will use VcXsrv. Other options would be Xming (the newest versions are paid, but older versions can still be downloaded for free from their SourceForge site) or installing an X server in Cygwin.

The first step would be thus to install VcXsrv and run the X server through the newly created start menu entry “XLaunch”. Some options will be displayed. In the first screen, select “Multiple windows” and set the display number; leaving it in -1 is a safe option. The “Next” button brings you to the “Client startup” window, where you should select “Start no client”. Click “Next” to go to the “Extra settings” screen, where you should activate the option “Disable access control”. When you click “Next” you will be given the option to save the settings, and finally you can start the X server.

An icon will show up in the dock: you are done with the X server!

To configure the client (that is, the Multipass instance) you will need the host IP address, which can be obtained with the console command ipconfig. Then start the instance and set the DISPLAY environment variable to the server display on the host IP (replace xx.xx.xx.xx with the IP address obtained above):

$ export DISPLAY=xx.xx.xx.xx:0.0

You are done, and you can now test forwarding running a program of your choice on the instance; for example:

$ sudo snap install firefox
$ firefox &

Let us know how this worked for you and what you’d like to see next!

Last updated 15 days ago. Help improve this document in the forum.