Xrdp fails to connect

I’ve got everything set up as far as I can tell from the wiki with nixos and gnome, but when trying to connect the client hangs or disconnects with a “current user has logged off” after ~15 seconds. I heard a rumor that the main session has to be logged off in order for things to work but that’s a non-starter for obvious reasons. Any ideas?


  # Enable the X11 windowing system.
  services.xserver.enable = true;

  # Enable the GNOME Desktop Environment.
  services.xserver.displayManager.gdm.enable = true;
  services.xserver.desktopManager.gnome.enable = true;

  # Configure keymap in X11
  services.xserver = {
    layout = "us";
    xkbVariant = "";
  };

  #...

  environment.systemPackages = (with pkgs; [
    vim
    gnome.gnome-tweaks
    gnome.gnome-remote-desktop
    #...
  ]);

  #...

  services.xrdp.enable = true;
  services.xrdp.openFirewall = true;
  services.xrdp.defaultWindowManager = "gnome-remote-desktop";
  services.gnome.gnome-remote-desktop.enable = true;

  services.tailscale.enable = true;

  # Enable the OpenSSH daemon.
  services.openssh.enable = true;

  # PCSCD for Yubico/Yubikey
  services.pcscd.enable = true;

  # Open ports in the firewall.
  networking.firewall.allowedTCPPorts = [ 22 3389 42979 ];
  networking.firewall.trustedInterfaces = [ "tailscale0" ];
  networking.firewall.allowedUDPPorts = [ config.services.tailscale.port 9090 22 80 5000 ];
Jun 04 18:46:12 my-desktop xrdp-sesman[1476]: [INFO ] Socket 12: AF_INET6 connection received from ::1 port 50704
Jun 04 18:46:12 my-desktop xrdp-sesman[1476]: [INFO ] Terminal Server Users group is disabled, allowing authentication
Jun 04 18:46:12 my-desktop xrdp-sesman[1476]: [INFO ] ++ created session (access granted): username zyphlar, ip ::ffff:192.168.10.34:46206 - socket: 11
Jun 04 18:46:12 my-desktop xrdp-sesman[1476]: [INFO ] starting Xorg session...
Jun 04 18:46:12 my-desktop xrdp-sesman[1476]: [INFO ] Starting session: session_pid 180782, display :10.0, width 1080, height 2256, bpp 24, client ip ::ffff:192.168.10.34:46206 - socket: 11, user name zyphlar
Jun 04 18:46:12 my-desktop xrdp-sesman[1476]: [ERROR] sesman_data_in: scp_process_msg failed
Jun 04 18:46:12 my-desktop xrdp-sesman[1476]: [ERROR] sesman_main_loop: trans_check_wait_objs failed, removing trans
Jun 04 18:46:12 my-desktop xrdp-sesman[180782]: [INFO ] [session start] (display 10): calling auth_start_session from pid 180782
Jun 04 18:46:12 my-desktop xrdp-sesman[180782]: pam_unix(xrdp-sesman:session): session opened for user zyphlar(uid=1000) by (uid=0)
Jun 04 18:46:12 my-desktop systemd-logind[1229]: New session 6 of user zyphlar.
Jun 04 18:46:12 my-desktop systemd[1]: Started Session 6 of User zyphlar.
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: [INFO ] Starting X server on display 10: /nix/store/bq8rhdfkxbmqxwkhrdkqycgfbk6h6y3n-xorg-server-21.1.13/bin/Xorg :10 -auth .Xauthority -modulepath /nix/store/31cr5v6g830qi1v656dxagvq3736axab-xorgxrdp-0.9.19/lib/xorg/modules,/nix/store/bq8rhdfkxbmqxwkhrdkqycgfbk6h6y3n-xorg-server-21.1.13/lib/xorg/modules -config /nix/store/31cr5v6g830qi1v656dxagvq3736axab-xorgxrdp-0.9.19/etc/X11/xrdp/xorg.conf -noreset -nolisten tcp -logfile .xorgxrdp.%s.log
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: X.Org X Server 1.21.1.13
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: X Protocol Version 11, Revision 0
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: Current Operating System: Linux my-desktop 6.1.90 #1-NixOS SMP PREEMPT_DYNAMIC Thu May  2 14:29:32 UTC 2024 x86_64
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: Kernel command line: initrd=\efi\nixos\ln6bd4aq5h8qvs4x7b4pjn18w3dpa78i-initrd-linux-6.1.90-initrd.efi init=/nix/store/agjhsxkap7npyxla0lbs0d3kngbs0nz0-nixos-system-my-desktop-23.11.7093.44072e24566c/init loglevel=4
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]:  
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: Current version of pixman: 0.42.2
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]:         Before reporting problems, check http://wiki.x.org
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]:         to make sure that you have the latest version.
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: Markers: (--) probed, (**) from config file, (==) default setting,
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]:         (++) from command line, (!!) notice, (II) informational,
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]:         (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: (++) Log file: ".xorgxrdp.10.log", Time: Tue Jun  4 18:46:12 2024
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: (++) Using config file: "/nix/store/31cr5v6g830qi1v656dxagvq3736axab-xorgxrdp-0.9.19/etc/X11/xrdp/xorg.conf"
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: (==) Using config directory: "/etc/X11/xorg.conf.d"
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: (==) Using system config directory "/nix/store/bq8rhdfkxbmqxwkhrdkqycgfbk6h6y3n-xorg-server-21.1.13/share/X11/xorg.conf.d"
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: xorgxrdpSetup:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: xrdpdevSetup:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpmousePlug:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpkeybPlug:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpIdentify:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpDriverFunc: op 10
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpProbe:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpPreInit:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpScreenInit: virtualX 800 virtualY 600 rgbBits 8 depth 24
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpScreenInit: pfbMemory bytes 1920000
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpScreenInit: pfbMemory 0x7fee411b2010
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpSimdInit: assigning yuv functions
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpSimdInit: cpuid ax 1 cx 0 return ax 0x00090672 bx 0x18800800 cx 0x7ffafbff dx 0xbfebfbff
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpSimdInit: sse2 amd64 yuv functions assigned
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConInit: disconnect idle session after [0] sec
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConInit: kill disconnected [0] timeout [0] sec
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConInit: do_touchpad_scroll_hack [0]
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpXvInit: depth 24
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpScreenInit: out
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpCreateScreenResources:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpmousePreInit: drv 0x191f8b0 info 0x1bdbac0, flags 0x0
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpmouseControl: what 0
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpmouseDeviceInit:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpmouseCtrl:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpRegisterInputCallback: type 1 proc 0x7fee4138d370
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpmouseControl: what 1
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpmouseDeviceOn:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpkeybPreInit: drv 0x191f7c0 info 0x1bdebd0, flags 0x0
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpkeybControl: what 0
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpkeybDeviceInit:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpkeybChangeKeyboardControl:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpkeybChangeKeyboardControl: autoRepeat on
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpRegisterInputCallback: type 0 proc 0x7fee41388a00
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpkeybControl: what 1
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpkeybDeviceOn:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpDeferredRandR:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpResizeSession: width 1024 height 768
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]:   calling RRScreenSizeSet
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpRRScreenSetSize: width 1024 height 768 mmWidth 271 mmHeight 203
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpRRGetInfo:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]:   screen resized to 1024x768
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]:   RRScreenSizeSet ok 1
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpResizeSession: width 1080 height 2256
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]:   calling RRScreenSizeSet
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpRRScreenSetSize: width 1080 height 2256 mmWidth 286 mmHeight 597
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpRRGetInfo:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]:   screen resized to 1080x2256
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]:   RRScreenSizeSet ok 1
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConGotConnection:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConGotConnection: g_sck_accept ok new_sck 9
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConGetConnection: idle_disconnect_timeout set to non-positive value, idle timer turned off
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpAddClientConToDev: adding first clientCon 0x1c3b8f0
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConProcessMsgVersion: version 0 0 0 1
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConProcessScreenSizeMsg: set width 1080 height 2256 bpp 32
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConAllocateSharedMemory: shmemid 1114175 shmemptr 0x7fee34767000 bytes 9745920
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConProcessMsgClientInput: invalidate x 0 y 0 cx 1080 cy 2256
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpInDeferredRepeatCallback:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpkeybChangeKeyboardControl:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpkeybChangeKeyboardControl: autoRepeat off
Jun 04 18:46:12 my-desktop xrdp-sesman[180784]: [INFO ] Found X server running at /tmp/.X11-unix/X10
Jun 04 18:46:12 my-desktop xrdp-sesman[180782]: [INFO ] Found X server running at /tmp/.X11-unix/X10
Jun 04 18:46:12 my-desktop xrdp-sesman[180782]: [INFO ] Session started successfully for user zyphlar on display 10
Jun 04 18:46:12 my-desktop xrdp-sesman[180782]: [INFO ] Session in progress on display 10, waiting until the window manager (pid 180784) exits to end the session
Jun 04 18:46:12 my-desktop xrdp-sesman[180795]: [INFO ] Starting the xrdp channel server for display 10
Jun 04 18:46:12 my-desktop xrdp-sesman[180784]: [INFO ] Found X server running at /tmp/.X11-unix/X10
Jun 04 18:46:12 my-desktop xrdp-sesman[180784]: [INFO ] Starting the default window manager on display 10: /nix/store/8f0z8dbvarcjdrqnp4jn5qydlspyy4sm-xrdp.conf/startwm.sh
Jun 04 18:46:12 my-desktop xrdp-sesman[180795]: Can't open config file /etc/xrdp/sesman.ini
Jun 04 18:46:12 my-desktop xrdp-sesman[180797]: /nix/store/8f0z8dbvarcjdrqnp4jn5qydlspyy4sm-xrdp.conf/startwm.sh: line 3: gnome-remote-desktop: command not found
Jun 04 18:46:12 my-desktop xrdp-sesman[180782]: [WARN ] Window manager (pid 180784, display 10) exited with non-zero exit code 127 and signal 0. This could indicate a window manager config problem
Jun 04 18:46:12 my-desktop xrdp-sesman[180782]: [WARN ] Window manager (pid 180784, display 10) exited quickly (0 secs). This could indicate a window manager config problem
Jun 04 18:46:12 my-desktop xrdp-sesman[180782]: [INFO ] Calling auth_stop_session and auth_end from pid 180782
Jun 04 18:46:12 my-desktop xrdp-sesman[180782]: pam_unix(xrdp-sesman:session): session closed for user zyphlar
Jun 04 18:46:12 my-desktop xrdp-sesman[180782]: [INFO ] Terminating X server (pid 180785) on display 10
Jun 04 18:46:12 my-desktop xrdp-sesman[180782]: [INFO ] Terminating the xrdp channel server (pid 180795) on display 10
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpmouseControl: what 2
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpmouseDeviceOff:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpkeybControl: what 2
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpkeybDeviceOff:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: xorgxrdpDamageDestroy:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpkeybControl: what 3
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpkeybUnInit: drv 0x191f7c0 info 0x1bdebd0, flags 0x0
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpUnregisterInputCallback: proc 0x7fee41388a00
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpmouseControl: what 3
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpmouseUnInit: drv 0x191f8b0 info 0x1bdbac0, flags 0x0
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpUnregisterInputCallback: proc 0x7fee4138d370
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpCloseScreen:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: xorgxrdpDownDown:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: xorgxrdpDownDown: 1
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConDeinit:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConDeinit: disconnecting clientCon
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConDisconnect:
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpRemoveClientConFromDev: removing clientCon 0x1c3b8f0
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConDeinit: deleting file /tmp/.xrdp/xrdp_display_10
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: rdpClientConDeinit: deleting file /tmp/.xrdp/xrdp_disconnect_display_10
Jun 04 18:46:12 my-desktop xrdp-sesman[180785]: (II) Server terminated successfully (0). Closing log file.
Jun 04 18:46:12 my-desktop xrdp-sesman[180782]: [INFO ] X server on display 10 (pid 180785) returned exit code 0 and signal number 0
Jun 04 18:46:12 my-desktop xrdp-sesman[180782]: [INFO ] xrdp channel server for display 10 (pid 180795) exit code 1 and signal number 0
Jun 04 18:46:12 my-desktop xrdp-sesman[180782]: [INFO ] cleanup_sockets:
Jun 04 18:46:12 my-desktop xrdp-sesman[1476]: [INFO ] Process 180782 has exited
Jun 04 18:46:12 my-desktop xrdp-sesman[1476]: [INFO ] ++ terminated session:  username zyphlar, display :10.0, session_pid 180782, ip ::ffff:192.168.10.34:46206 - socket: 11
Jun 04 18:46:12 my-desktop systemd[1]: session-6.scope: Deactivated successfully.
Jun 04 18:46:12 my-desktop systemd-logind[1229]: Session 6 logged out. Waiting for processes to exit.
Jun 04 18:46:12 my-desktop systemd-logind[1229]: Removed session 6.
Jun 04 18:46:28 my-desktop xrdp[180779]: --port parameter found, ini override [3389]

I haven’t found a solution yet but I can tell you that I was trying the same thing tonight and ran into the same issue.
I’ve been trying to setup a flake where I can easily toggle on/off whether I want gnome. I even added your gnome-tweaks but that hasn’t helped.

{config, lib, pkgs, vars, ... }:
with lib;
{
  options = {
     gnome = {
        enable = mkOption {
           type = types.bool;
           default = false;
        };
     };
  };

  config = mkIf (config.gnome.enable) {

    environment.systemPackages = (with pkgs; [
      gnome.gnome-tweaks
      gnome.gnome-remote-desktop
    ]);

    services = {
      gnome.gnome-remote-desktop.enable = true;

      xserver = {
        enable = true;

        xkb.layout = "us";
        displayManager.gdm.enable = true;
        displayManager.gdm.autoSuspend = false;
        desktopManager.gnome.enable = true;
      };

       xrdp = {
        enable = true;
        defaultWindowManager = "gnome-remote-desktop";
        port = 3389;
        package = pkgs.gnome.gnome-remote-desktop;
        openFirewall = true;
      };
    };
  };
}