Remote Desktop

From NixOS Wiki
Revision as of 13:50, 9 November 2023 by imported>Skylark (→‎Servers: Tidy, update status of Guacamole)

Clients

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

Servers

  • XRDP

Configuration

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.

RDP

NixOS has first class support for XRDP server.

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)

You need to log out the user first on the remote machine, otherwise you'll get a black screen. (Source: 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.

freerdp or remmina can be used on the client side.

Guacamole

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

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)