GNOME Remote Desktop is the remote desktop server of the GNOME project. It supports operating as a remote assistance remote desktop server, as a single user headless remote desktop server, and as a headless remote login remote desktop server.
It has two protocol backends, RDP and VNC. Not all modes of operation are supported with all protocol backends.
It uses PipeWire for streaming pixel content, libei for input event plumbing, and the Mutter remote desktop API for high level management.
For RDP support, it uses FreeRDP, and for VNC support, it uses LibVNCServer.
It's licensed under the GNU General Public License v2 or later.
[[TOC]]
The remote assistance mode provides a way to access an already active session remotely, where both the user physically by the machine is present, and a remote user is connecting. This means for example that locking the screen also closes the remote desktop connection.
Running as a remote assistance remote desktop server is supported with both RDP and VNC.
Open Settings, open the Systems panel then Remote Desktop. Select Screen Sharing, enable Desktop Sharing and configure it for your needs.
-
Generate a TLS key and certificate. See here.
-
Configure GNOME Remote Desktop:
grdctl rdp set-tls-key ~/.local/share/gnome-remote-desktop/tls.key
grdctl rdp set-tls-cert ~/.local/share/gnome-remote-desktop/tls.crt
grdctl rdp set-credentials # Enter credentials via standard input
grdctl rdp enable
To enable remote controlling, run:
grdctl rdp disable-view-only
For more options, run:
grdctl --help
- Enable remote assistance user service.
systemctl --user enable --now gnome-remote-desktop.service
- Configure GNOME Remote Desktop:
VNC supports two authentication methods: password or prompt. To e.g. use a password, run:
grdctl vnc set-auth-method password
grdctl vnc set-password # Enter password via standard input
To enable remote controlling, run:
grdctl vnc disable-view-only
Then enable VNC support:
grdctl vnc enable
For more options, run:
grdctl --help
- Enable remote assistance user service.
systemctl --user enable --now gnome-remote-desktop.service
GNOME Remote Desktop supports integrating with the GNOME Display Manager (GDM) to achieve remote login functionality. This feature is only available via the RDP protocol. It works by the remote user first authenticating via a system wide password, which gives access to the graphical login screen, where they can login using their user specific credentials.
Open Settings, open the Systems panel then Remote Desktop. Select Remote Login. Unlock the panel (requires administrative privileges). Enable Remote Login, and configure the remote login feature according to your needs.
-
Generate a TLS key and certificate. See here.
-
Configure GNOME Remote Desktop:
grdctl --system rdp set-tls-key ~gnome-remote-desktop/.local/share/gnome-remote-desktop/tls.key
grdctl --system rdp set-tls-cert ~gnome-remote-desktop/.local/share/gnome-remote-desktop/tls.crt
grdctl --system rdp set-credentials # Enter credentials via standard input
grdctl --system rdp enable
For more options, run:
grdctl --help
- Enable system remote login service.
systemctl enable --now gnome-remote-desktop.service
A single user headless remote desktop means the remote desktop client connects directly to a GNOME Remote Desktop server running in an independently set up headless graphical user session.
-
Generate a TLS key and certificate. See here.
-
Configure GNOME Remote Desktop:
grdctl --headless rdp set-tls-key ~/.local/share/gnome-remote-desktop/tls.key
grdctl --headless rdp set-tls-cert ~/.local/share/gnome-remote-desktop/tls.crt
grdctl --headless rdp set-credentials # Enter credentials via standard input
grdctl --headless rdp enable
For more options, run:
grdctl --help
- Enable headless single user service.
systemctl --user enable --now gnome-remote-desktop-headless.service
- Configure GNOME Remote Desktop:
grdctl --headless vnc set-password # Enter password via standard input
grdctl --headless vnc enable
- Enable headless single user service.
systemctl --user enable --now gnome-remote-desktop-headless.service
Connecting via RDP requires setting up a TLS key and a TLS certificate. Here are some examples for how to do that.
Note that for when the key and certificate is intended to be used with the
remote login system service, run each of the following commands as the
gnome-remote-desktop
user. For example
sudo -u gnome-remote-desktop sh -c 'winpr-makecert -silent -rdp -path ~/.local/share/gnome-remote-desktop tls'
winpr-makecert
is a tool from FreeRDP for generating TLS keys and
certificates for among other things RDP servers.
winpr-makecert -silent -rdp -path ~/.local/share/gnome-remote-desktop tls
certtool
is an interactive tool for generating keys and certificates.
mkdir -p ~/.local/share/gnome-remote-desktop/
certtool --generate-privkey --outfile ~/.local/share/gnome-remote-desktop/tls.key
certtool --generate-self-signed --load-privkey ~/.local/share/gnome-remote-desktop/tls.crt
openssl
is a tool for among other things generating TLS keys and
certificates. The below example creates a certificate expiring in 720 days with
the country set to Sweden.
mkdir -p ~/.local/share/gnome-remote-desktop/
openssl req -new -newkey rsa:4096 -days 720 -nodes -x509 -subj /C=SE/ST=NONE/L=NONE/O=GNOME/CN=gnome.org -out ~/.local/share/gnome-remote-desktop/tls.crt -keyout ~/.local/share/gnome-remote-desktop/tls.key
Caution is advised when considering opening up the firewall to the open Internet. If it is necessary, here are some hints on how to achieve it.
To open up the firewall for connections on the default RDP port, run:
sudo firewall-cmd --permanent --add-service=rdp
sudo firewall-cmd --reload
To open up the firewall for connections on the default VNC port, run:
sudo firewall-cmd --permanent --add-service=vnc
sudo firewall-cmd --reload
Please file issues in the issue tracker on GNOME GitLab.
gnome-remote-desktop uses merge requests filed against the gnome-remote-desktop GitLab module.