Remote Desktop: Difference between revisions

From NixOS Wiki
imported>Skyset
imported>Skyset
Add structure, divide article into RDP and VNC configuration, clean up markdown on GNOME section
Line 1: Line 1:
= Software =
Remote desktop software is split into two types: servers and clients.
To access a computer remotely, it must have a server running, which usually is exposed to a port or set thereof. Access to that server can be gained using a client; many protocols, like RDP, are open to all clients willing to support them. Others require specific clients, so consult the documentation for whichever service you choose to use.
== Servers ==
* VNC
* XRDP
== Clients ==
== Clients ==
* Apache Guacamole
* Apache Guacamole
Line 6: Line 16:
* tightvnc and its forks tigervnc and turbovnc
* tightvnc and its forks tigervnc and turbovnc
* x2goclient
* x2goclient
* GNOME Connections


== Servers ==
= Configuration =


* XRDP
== VNC ==
 
=== Configuration ===


Most servers provide a <code>vncserver</code> command.
Most servers provide a <code>vncserver</code> command.
Line 47: Line 56:
to /etc/nixos/configuration.nix.
to /etc/nixos/configuration.nix.


=== RDP ===
=== Guacamole ===


NixOS has first class support for XRDP server.
Guacamole-server and guacamole-client are in nixpkgs. Some details are in the [https://github.com/NixOS/nixpkgs/issues/17879 package request].
 
== RDP ==
 
NixOS has first-class support for XRDP. Client-wise, RDP can be accessed in many ways, but `remmina` and `freerdp` support it natively.
 
All of the options for the <code>xrdp</code> service can be viewed on the [https://search.nixos.org/options?channel=23.11&from=0&size=50&sort=relevance&type=packages&query=xrdp NixOS Options wiki], though an example setup inside of <code>configuration.nix</code> is provided below:


<source lang="nix">
<source lang="nix">
Line 64: Line 79:
(Source: [https://discourse.nixos.org/t/please-post-working-xrdp-setting-in-configuration-nix/7404/10 Discourse Link], [https://github.com/NixOS/nixpkgs/blob/86a80807d8d7051c63ab2b9d7f630abe066468b1/nixos/modules/services/networking/xrdp.nix nixpkgs code])
(Source: [https://discourse.nixos.org/t/please-post-working-xrdp-setting-in-configuration-nix/7404/10 Discourse Link], [https://github.com/NixOS/nixpkgs/blob/86a80807d8d7051c63ab2b9d7f630abe066468b1/nixos/modules/services/networking/xrdp.nix nixpkgs code])


You need to log out the user first on the remote machine, otherwise you'll get a black screen. (Source: [https://www.reddit.com/r/Proxmox/comments/hxp28j/black_screen_in_microsoft_remote_desktop_noob/fzm7zbo/ Reddit]). It may be particularly true on a multi-user system. You may be able to work around this by enabling and configuring [[Polkit]]. The configuration for enabling these permissions is the example code on that page.
A different window manager can be used for XRDP than a machine user, provided it has been enabled (through NixOS <code>services</code> or <code>nixpkgs</code>.


<code>freerdp</code> or <code>remmina</code> can be used on the client side.
Make sure you log out the visual user first on the remote machine, otherwise you'll get a black screen. (Source: [https://www.reddit.com/r/Proxmox/comments/hxp28j/black_screen_in_microsoft_remote_desktop_noob/fzm7zbo/ Reddit]). You may be able to work around this by enabling and configuring [[Polkit]], as demonstrated on that page.


<h3>GNOME</h3>
=== GNOME ===


The Xrdp <code>defaultWindowManager</code> setting to access a remote GNOME shell should be set to <code>gnome-remote-desktop</code>.
The XRDP <code>defaultWindowManager</code> setting to access a remote GNOME shell should be set to <code>gnome-remote-desktop</code>.


<code>services.gnome.gnome-remote-desktop</code> must be enabled for this to work. Also ensure that you have a firewall port open for Xrdp to communicate on (for the GNOME connections app, this is <code>3389</code>).
<code>services.gnome.gnome-remote-desktop</code> must be enabled for this to work. Also ensure that you have a firewall port open for XRDP to communicate on (for the GNOME connections app, this is <code>3389</code>).


=== Guacamole ===
=== Meshcentral ===
 
Guacamole-server and guacamole-client are in nixpkgs. Some details are in the [https://github.com/NixOS/nixpkgs/issues/17879 package request].


=== Meshcentral ===
Meshcentral is a self-hosted open source administration tool similar to teamviewer.
Meshcentral is a self-hosted open source administration tool similar to teamviewer.
It can be added with:
It can be added with:

Revision as of 07:22, 2 March 2024

Software

Remote desktop software is split into two types: servers and clients. To access a computer remotely, it must have a server running, which usually is exposed to a port or set thereof. Access to that server can be gained using a client; many protocols, like RDP, are open to all clients willing to support them. Others require specific clients, so consult the documentation for whichever service you choose to use.

Servers

  • VNC
  • XRDP

Clients

  • Apache Guacamole
  • freerdp
  • KRDC (KDE)
  • remmina
  • tightvnc and its forks tigervnc and turbovnc
  • x2goclient
  • GNOME Connections

Configuration

VNC

Most servers provide a vncserver command. Various servers provide configuration options either by CLI or by configuration file.

Desktop session

To start a desktop session or window manager, one currently has to do this manually because servers still have hard-coded paths to /usr/share/xsessions to look for .desktop files. That means one has to write a script that starts the desktop session, window manager, or any other X application.

Some servers will automatically run $HOME/.vnc/xstartup but the more secure option is to write an executable script and run vncserver -xstartup $pathToScript

An example script:

#!/usr/bin/env bash

# set some env variables
# start window manager
exec icewm

pathToScript can also be a path to an executable like ${pkgs.icewm}/bin/icewm

Tiger VNC

Nixpkgs has a package but no service. The server component can be started using the vncserver command. To connect, use the vncviewer command.

x2go

X2go client is packaged in nixos as x2goclient.

The server is installed by adding the following line:
services.x2goserver.enable = true;
to /etc/nixos/configuration.nix.

Guacamole

Guacamole-server and guacamole-client are in nixpkgs. Some details are in the package request.

RDP

NixOS has first-class support for XRDP. Client-wise, RDP can be accessed in many ways, but `remmina` and `freerdp` support it natively.

All of the options for the xrdp service can be viewed on the NixOS Options wiki, though an example setup inside of configuration.nix is provided below:

services.xserver.enable = true;
services.xserver.displayManager.sddm.enable = true;
services.xserver.desktopManager.plasma5.enable = true;

services.xrdp.enable = true;
services.xrdp.defaultWindowManager = "startplasma-x11";
services.xrdp.openFirewall = true;

(Source: Discourse Link, nixpkgs code)

A different window manager can be used for XRDP than a machine user, provided it has been enabled (through NixOS services or nixpkgs.

Make sure you log out the visual user first on the remote machine, otherwise you'll get a black screen. (Source: Reddit). You may be able to work around this by enabling and configuring Polkit, as demonstrated on that page.

GNOME

The XRDP defaultWindowManager setting to access a remote GNOME shell should be set to gnome-remote-desktop.

services.gnome.gnome-remote-desktop must be enabled for this to work. Also ensure that you have a firewall port open for XRDP to communicate on (for the GNOME connections app, this is 3389).

Meshcentral

Meshcentral is a self-hosted open source administration tool similar to teamviewer. It can be added with:

services.meshcentral.enable = true;

However, the agent (client) is not available. (Request)