Scotchman0 / XRDP-for-ubuntu

Automatically installs and configures XFCE, XRDP and variables for a one-script setup
MIT License
12 stars 5 forks source link

Remote Window closes after submitting User name & Password #2

Open vijaypanchal opened 2 years ago

vijaypanchal commented 2 years ago

I am trying to access from Windows 11 system.

Please all the details below.

OS Info:

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.4 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.4 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

Kernel Info:

$ uname -a
Linux work 5.4.0-100-generic #113-Ubuntu SMP Thu Feb 3 18:43:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

XRDP Version:

$ xrdp --version
xrdp 0.9.18
  A Remote Desktop Protocol Server.
  Copyright (C) 2004-2020 Jay Sorg, Neutrino Labs, and all contributors.
  See https://github.com/neutrinolabs/xrdp for more information.

  Configure options:

  Compiled with OpenSSL 1.1.1f  31 Mar 2020

xrdp.ini File:

[Globals]
; xrdp.ini file version number
ini_version=1

; fork a new process for each incoming connection
fork=true

; ports to listen on, number alone means listen on all interfaces
; 0.0.0.0 or :: if ipv6 is configured
; space between multiple occurrences
; ALL specified interfaces must be UP when xrdp starts, otherwise xrdp will fail to start
;
; Examples:
;   port=3389
;   port=unix://./tmp/xrdp.socket
;   port=tcp://.:3389                           127.0.0.1:3389
;   port=tcp://:3389                            *:3389
;   port=tcp://<any ipv4 format addr>:3389      192.168.1.1:3389
;   port=tcp6://.:3389                          ::1:3389
;   port=tcp6://:3389                           *:3389
;   port=tcp6://{<any ipv6 format addr>}:3389   {FC00:0:0:0:0:0:0:1}:3389
;   port=vsock://<cid>:<port>
port=3389

; 'port' above should be connected to with vsock instead of tcp
; use this only with number alone in port above
; prefer use vsock://<cid>:<port> above
use_vsock=false

; regulate if the listening socket use socket option tcp_nodelay
; no buffering will be performed in the TCP stack
tcp_nodelay=true

; regulate if the listening socket use socket option keepalive
; if the network connection disappear without close messages the connection will be closed
tcp_keepalive=true

; set tcp send/recv buffer (for experts)
#tcp_send_buffer_bytes=32768
#tcp_recv_buffer_bytes=32768

; security layer can be 'tls', 'rdp' or 'negotiate'
; for client compatible layer
security_layer=negotiate
security_layer=rdp

; minimum security level allowed for client for classic RDP encryption
; use tls_ciphers to configure TLS encryption
; can be 'none', 'low', 'medium', 'high', 'fips'
crypt_level=high

; X.509 certificate and private key
; openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365
certificate=
key_file=

; set SSL protocols
; can be comma separated list of 'SSLv3', 'TLSv1', 'TLSv1.1', 'TLSv1.2', 'TLSv1.3'
ssl_protocols=TLSv1.2, TLSv1.3
; set TLS cipher suites
#tls_ciphers=HIGH

; concats the domain name to the user if set for authentication with the separator
; for example when the server is multi homed with SSSd
#domain_user_separator=@

; The following options will override the keyboard layout settings.
; These options are for DEBUG and are not recommended for regular use.
#xrdp.override_keyboard_type=0x04
#xrdp.override_keyboard_subtype=0x01
#xrdp.override_keylayout=0x00000409

; Section name to use for automatic login if the client sends username
; and password. If empty, the domain name sent by the client is used.
; If empty and no domain name is given, the first suitable section in
; this file will be used.
autorun=

allow_channels=true
allow_multimon=true
bitmap_cache=true
bitmap_compression=true
bulk_compression=true
#hidelogwindow=true
max_bpp=32
new_cursors=true
; fastpath - can be 'input', 'output', 'both', 'none'
use_fastpath=both
; when true, userid/password *must* be passed on cmd line
#require_credentials=true
; when true, the userid will be used to try to authenticate
#enable_token_login=true
; You can set the PAM error text in a gateway setup (MAX 256 chars)
#pamerrortxt=change your password according to policy at http://url

;
; colors used by windows in RGB format
;
blue=009cb5
grey=dedede
#black=000000
#dark_grey=808080
#blue=08246b
#dark_blue=08246b
#white=ffffff
#red=ff0000
#green=00ff00
#background=626c72

;
; configure login screen
;

; Login Screen Window Title
#ls_title=My Login Title

; top level window background color in RGB format
ls_top_window_bg_color=009cb5

; width and height of login screen
;
; The default height allows for about 5 fields to be comfortably displayed
; above the buttons at the bottom. To display more fields, make <ls_height>
; larger, and also increase <ls_btn_ok_y_pos> and <ls_btn_cancel_y_pos>
; below
;
ls_width=350
ls_height=430

; login screen background color in RGB format
ls_bg_color=dedede

; optional background image filename. BMP format is always supported,
; but other formats will be supported if xrdp is build with imlib2
; The transform can be one of the following:-
;     none  : No transformation. Image is placed in bottom-right corner
;             of the screen.
;     scale : Image is scaled to the screen size. The image aspect
;             ratio is not preserved.
;     zoom  : Image is scaled to the screen size. The image aspect
;             ratio is preserved by clipping the image.
#ls_background_image=
#ls_background_transform=none

; logo
; full path to file or file in shared folder. BMP format is always supported,
; but other formats will be supported if xrdp is build with imlib2
; For transform values, see 'ls_background_transform'. The logo width and
; logo height are ignored for a transform of 'none'.
ls_logo_filename=
#ls_logo_transform=none
#ls_logo_width=240
#ls_logo_height=140
ls_logo_x_pos=55
ls_logo_y_pos=50

; for positioning labels such as username, password etc
ls_label_x_pos=30
ls_label_width=65

; for positioning text and combo boxes next to above labels
ls_input_x_pos=110
ls_input_width=210

; y pos for first label and combo box
ls_input_y_pos=220

; OK button
ls_btn_ok_x_pos=142
ls_btn_ok_y_pos=370
ls_btn_ok_width=85
ls_btn_ok_height=30

; Cancel button
ls_btn_cancel_x_pos=237
ls_btn_cancel_y_pos=370
ls_btn_cancel_width=85
ls_btn_cancel_height=30

[Logging]
; Note: Log levels can be any of: core, error, warning, info, debug, or trace
LogFile=xrdp.log
LogLevel=INFO
EnableSyslog=true
#SyslogLevel=INFO
#EnableConsole=false
#ConsoleLevel=INFO
#EnableProcessId=false

[LoggingPerLogger]
; Note: per logger configuration is only used if xrdp is built with
; --enable-devel-logging
#xrdp.c=INFO
#main()=INFO

[Channels]
; Channel names not listed here will be blocked by XRDP.
; You can block any channel by setting its value to false.
; IMPORTANT! All channels are not supported in all use
; cases even if you set all values to true.
; You can override these settings on each session type
; These settings are only used if allow_channels=true
rdpdr=true
rdpsnd=true
drdynvc=true
cliprdr=true
rail=true
xrdpvr=true
tcutils=true

; for debugging xrdp, in section xrdp1, change port=-1 to this:
#port=/tmp/.xrdp/xrdp_display_10

;
; Session types
;

; Some session types such as Xorg, X11rdp and Xvnc start a display server.
; Startup command-line parameters for the display server are configured
; in sesman.ini. See and configure also sesman.ini.
[Xorg]
name=Xorg
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=20

[Xvnc]
name=Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1
#xserverbpp=24
#delay_ms=2000
; Disable requested encodings to support buggy VNC servers
; (1 = ExtendedDesktopSize)
#disabled_encodings_mask=0
; Use this to connect to a chansrv instance created outside of sesman
; (e.g. as part of an x11vnc console session). Replace '0' with the
; display number of the session
#chansrvport=DISPLAY(0)

; Generic VNC Proxy
; Tailor this to specific hosts and VNC instances by specifying an ip
; and port and setting a suitable name.
[vnc-any]
name=vnc-any
lib=libvnc.so
ip=ask
port=ask5900
username=na
password=ask
#pamusername=asksame
#pampassword=asksame
#pamsessionmng=127.0.0.1
#delay_ms=2000

; Generic RDP proxy using NeutrinoRDP
; Tailor this to specific hosts by specifying an ip and port and setting
; a suitable name.
[neutrinordp-any]
name=neutrinordp-any
; To use this section, you should build xrdp with configure option
; --enable-neutrinordp.
lib=libxrdpneutrinordp.so
ip=ask
port=ask3389
username=ask
password=ask
; Uncomment the following lines to enable PAM authentication for proxy
; connections.
#pamusername=ask
#pampassword=ask
#pamsessionmng=127.0.0.1
; Currently NeutrinoRDP doesn't support dynamic resizing. Uncomment
; this line if you're using a client which does.
#enable_dynamic_resizing=false
; By default, performance settings requested by the RDP client are ignored
; and chosen by NeutrinoRDP. Uncomment this line to allow the user to
; select performance settings in the RDP client.
#perf.allow_client_experiencesettings=true
; Override any experience setting by uncommenting one or more of the
; following lines.
#perf.wallpaper=false
#perf.font_smoothing=false
#perf.desktop_composition=false
#perf.full_window_drag=false
#perf.menu_anims=false
#perf.themes=false
#perf.cursor_blink=false
; By default NeutrinoRDP supports cursor shadows. If this is giving
; you problems (e.g. cursor is a black rectangle) try disabling cursor
; shadows by uncommenting the following line.
#perf.cursor_shadow=false
; By default, NeutrinoRDP uses the keyboard layout of the remote RDP Server.
; If you want to tell the remote the keyboard layout of the RDP Client,
; by uncommenting the following line.
#neutrinordp.allow_client_keyboardLayout=true
; The following options will override the remote keyboard layout settings.
; These options are for DEBUG and are not recommended for regular use.
#neutrinordp.override_keyboardLayout_mask=0x0000FFFF
#neutrinordp.override_kbd_type=0x04
#neutrinordp.override_kbd_subtype=0x01
#neutrinordp.override_kbd_fn_keys=12
#neutrinordp.override_kbd_layout=0x00000409

; You can override the common channel settings for each session type
#channel.rdpdr=true
#channel.rdpsnd=true
#channel.drdynvc=true
#channel.cliprdr=true
#channel.rail=true
#channel.xrdpvr=true

XRDP status

$ sudo systemctl status xrdp

● xrdp.service - xrdp daemon
     Loaded: loaded (/lib/systemd/system/xrdp.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-03-01 11:02:06 IST; 2min 21s ago
       Docs: man:xrdp(8)
             man:xrdp.ini(5)
    Process: 61233 ExecStartPre=/bin/sh /usr/share/xrdp/socksetup (code=exited, status=0/SUCCESS)
    Process: 61247 ExecStart=/usr/sbin/xrdp $XRDP_OPTIONS (code=exited, status=0/SUCCESS)
   Main PID: 61248 (xrdp)
      Tasks: 1 (limit: 6910)
     Memory: 1.6M
     CGroup: /system.slice/xrdp.service
             └─61248 /usr/sbin/xrdp

Mar 01 11:02:54 work xrdp[61447]: (61447)(140699640735552)[DEBUG] Closed socket 18 (AF_UNIX)
Mar 01 11:02:58 work xrdp[61447]: (61447)(140699640735552)[ERROR] xrdp_mm_connect_chansrv: connect failed trying again...
Mar 01 11:02:58 work xrdp[61447]: (61447)(140699640735552)[DEBUG] Closed socket 18 (AF_UNIX)
Mar 01 11:03:02 work xrdp[61447]: (61447)(140699640735552)[ERROR] xrdp_mm_connect_chansrv: connect failed trying again...
Mar 01 11:03:02 work xrdp[61447]: (61447)(140699640735552)[ERROR] xrdp_mm_connect_chansrv: error in trans_connect chan
Mar 01 11:03:02 work xrdp[61447]: (61447)(140699640735552)[DEBUG] Closed socket 16 (AF_INET6 ::1 port 52354)
Mar 01 11:03:02 work xrdp[61447]: (61447)(140699640735552)[DEBUG] Closed socket 12 (AF_INET6 ::ffff:192.168.0.17 port 3389)
Mar 01 11:03:02 work xrdp[61447]: (61447)(140699640735552)[DEBUG] xrdp_mm_module_cleanup
Mar 01 11:03:02 work xrdp[61447]: (61447)(140699640735552)[DEBUG] Closed socket 17 (AF_UNIX)
Mar 01 11:03:02 work xrdp[61447]: (61447)(140699640735552)[DEBUG] Closed socket 18 (AF_UNIX)

XRDP Tail Log:

$ tail -f /var/log/xrdp.log

[20220301-11:02:05] [INFO ] address [0.0.0.0] port [3389] mode 1
[20220301-11:02:05] [INFO ] listening to port 3389 on 0.0.0.0
[20220301-11:02:05] [INFO ] xrdp_listen_pp done
[20220301-11:02:07] [INFO ] starting xrdp with pid 61248
[20220301-11:02:07] [INFO ] address [0.0.0.0] port [3389] mode 1
[20220301-11:02:07] [INFO ] listening to port 3389 on 0.0.0.0
[20220301-11:02:07] [INFO ] xrdp_listen_pp done
[20220301-11:02:38] [INFO ] Socket 12: AF_INET6 connection received from ::ffff:192.168.0.41 port 50924
[20220301-11:02:38] [INFO ] Using default X.509 certificate: /etc/xrdp/cert.pem
[20220301-11:02:38] [INFO ] Using default X.509 key file: /etc/xrdp/key.pem
[20220301-11:02:38] [WARN ] warning, RSA key len 512 bits or less, consider creating a 2048 bit key
[20220301-11:02:38] [INFO ] Socket 12: AF_INET6 connection received from ::ffff:192.168.0.41 port 50925
[20220301-11:02:38] [INFO ] Using default X.509 certificate: /etc/xrdp/cert.pem
[20220301-11:02:38] [INFO ] Using default X.509 key file: /etc/xrdp/key.pem
[20220301-11:02:38] [WARN ] warning, RSA key len 512 bits or less, consider creating a 2048 bit key
[20220301-11:02:38] [INFO ] connected client computer name: VIJAYP-LAPTOP
[20220301-11:02:38] [INFO ] adding channel item name rdpdr chan_id 1004 flags 0x80800000
[20220301-11:02:38] [INFO ] adding channel item name rdpsnd chan_id 1005 flags 0xc0000000
[20220301-11:02:38] [INFO ] adding channel item name cliprdr chan_id 1006 flags 0xc0a00000
[20220301-11:02:39] [INFO ] adding channel item name drdynvc chan_id 1007 flags 0xc0800000
[20220301-11:02:39] [INFO ] Non-TLS connection established from ::ffff:192.168.0.41 port 50925: encrypted with standard RDP security
[20220301-11:02:39] [INFO ] Cannot find keymap file /etc/xrdp/km-00004009.ini
[20220301-11:02:39] [INFO ] Cannot find keymap file /etc/xrdp/km-00004009.ini
[20220301-11:02:39] [INFO ] Loading keymap file /etc/xrdp/km-00000409.ini
[20220301-11:02:39] [WARN ] local keymap file for 0x00004009 found and doesn't match built in keymap, using local keymap file
[20220301-11:02:46] [INFO ] xrdp_wm_log_msg: sesman connect ok
[20220301-11:02:46] [INFO ] xrdp_wm_log_msg: login successful for display 12
[20220301-11:02:46] [INFO ] lib_mod_log_peer: xrdp_pid=61447 connected to X11rdp_pid=61502 X11rdp_uid=1000 X11rdp_gid=1000 client_ip=::ffff:192.168.0.41 client_port=50925
[20220301-11:02:50] [ERROR] xrdp_mm_connect_chansrv: connect failed trying again...
[20220301-11:02:54] [ERROR] xrdp_mm_connect_chansrv: connect failed trying again...
[20220301-11:02:58] [ERROR] xrdp_mm_connect_chansrv: connect failed trying again...
[20220301-11:03:02] [ERROR] xrdp_mm_connect_chansrv: connect failed trying again...
[20220301-11:03:02] [ERROR] xrdp_mm_connect_chansrv: error in trans_connect chan
Scotchman0 commented 2 years ago

Hey there! Thanks for the bug report - I'm seeing this on my replicators also - very strange. I'll do some testing and see if I can't figure out why this is happening.

Scotchman0 commented 2 years ago

Sorry for the delay -- I mostly work in RHEL environments now so this has not been at the top of my pile -- appreciate your patience.

xrdp-chansrv seems to be the crash point here. There are some additional considerations about this might being related to pulseaudio that I am digging into.

I made the following changes and observed some test block:

======================== Change in xrdp.ini allow_channels=false +restart [solves the chanserv crash]

========================

[setting the values to prevent black-screen on connect] echo xfce4-session >~/.xsession added 'adress: 0.0.0.0' in xrdp.ini

I'm curious if in your environment this will be enough to kick past the problem -- (am working in VM's so they do funny things and haven't gotten a physical endpoint up to test on yet).