Hi there,

I am struggling with a problem related to Guacamole RDP. Please help me if
possible:

--Start of question--

I am building a web client that can RDP into remote VMs. I am running a
guacd server locally (on my macbook) using docker.

I am using a JS script in the frontend to connect to a Java backend using
WebSockets, which in turn creates a tunnel to the guacd server This is the
standard Guacamole Web Client flow from what I have read.

These are the configurations I use when connecting to the guacd server.
This is java code:

- guacConfig.setParameter("ignore-cert", "true");
- guacConfig.setParameter("force-lossless", "true");
try {
            GuacamoleSocket socket = new ConfiguredGuacamoleSocket(
                new InetGuacamoleSocket(hostname, port),
                guacConfig
            );
            GuacamoleTunnel tunnel = new SimpleGuacamoleTunnel(socket);
            return tunnel;
        } catch (Exception e) {
            System.out.println(e);
            return null;
}

This is the JS script in the index.html that uses Web sockets to connect to
Java tomcat:

        <script type="text/javascript"> /* <![CDATA[ */

            // Get display div from document
            var display = document.getElementById("display");

            // Instantiate client, using an HTTP tunnel for communications.
            let guacTunnel = new Guacamole.WebSocketTunnel("websocketendpoint");
            var guac = new Guacamole.Client(
                guacTunnel
            );

            // Add client to display div
            display.appendChild(guac.getDisplay().getElement());

            // Error handler
            guac.onerror = function(error) {
                alert(error);
                console.log(error)
            };

            // Connect
            guac.connect();

            // Disconnect on close
            window.onunload = function() {
                console.log("disconnecting");
                guac.disconnect();
            }

            // Mouse
            var mouse = new Guacamole.Mouse(guac.getDisplay().getElement());

            mouse.onEach(['mousedown', 'mouseup', 'mousemove'],
function sendMouseEvent(e) {
                guac.sendMouseState(e.state);
            });

            // Keyboard
            var keyboard = new Guacamole.Keyboard(document);

            keyboard.onkeydown = function (keysym) {
                guac.sendKeyEvent(1, keysym);
            };

            keyboard.onkeyup = function (keysym) {
                guac.sendKeyEvent(0, keysym);
            };

        /* ]]> */ </script>

I run the following commands in the remote VM to start xrdp:

    sudo apt-get update
    sudo apt update
    sudo ufw enable
    sudo ufw allow ssh
    sudo ufw allow 3389/tcp
    sudo ufw reload
    sudo systemctl stop apparmor
    sudo apt install xfce4 xfce4-goodies -y
    sudo apt install xrdp -y
    sudo adduser xrdp ssl-cert
    sudo chmod +x /etc/xrdp/key.pem
    sudo reboot

I make the following configuration changes to the xrdp.ini file:

tcp_send_buffer_bytes=8388608crypt_=none

I also change the value of the net.core.wmem_max to allow more traffic to
passthrough to the network:

sudo sysctl -w net.core.wmem_max=8388608

And I stop composting. I read that this makes it run faster.

xfconf-query --channel=xfwm4 --property=/general/use_compositing
--type=bool --set=false --create

When I rdp into the VM using my web client, it runs quite slowly. If I rdp
using the Microsoft Remote Desktop, it runs quite smoothly. Here are two
videos comparing them. The first one is from the Microsoft Remote Desktop
client where I play a YouTube video and the second is from my web
application.

Viewed from Microsoft Remote Desktop: https://youtu.be/hOW1wsfSVu4

My application (from the web client) https://youtu.be/5UiMNv9WSDc

This is the journalctl log for xrdp when connecting over the Microsoft
client:

connected client computer name: Prabuddhas-Lapt
784]: (5784)(140716040189760)[INFO ] adding channel item name rdpdr
chan_id 1004 flags 0x80800000
784]: (5784)(140716040189760)[INFO ] adding channel item name rdpsnd
chan_id 1005 flags 0xc0000000
784]: (5784)(140716040189760)[INFO ] adding channel item name cliprdr
chan_id 1006 flags 0xc0a00000
784]: (5784)(140716040189760)[INFO ] adding channel item name drdynvc
chan_id 1007 flags 0xc0800000
784]: (5784)(140716040189760)[INFO ] TLS connection established from
::ffff:73.70.63.162 port 57150: TLSv1.3 with cipher
TLS_AES_256_GCM_SHA384
784]: (5784)(140716040189760)[DEBUG] xrdp_00001698_wm_login_mode_event_00000001
784]: (5784)(140716040189760)[INFO ] Loading keymap file
/etc/xrdp/km-00000409.ini
784]: (5784)(140716040189760)[WARN ] local keymap file for 0x00000409
found and doesn't match built in keymap, using local keymap file
784]: (5784)(140716040189760)[DEBUG] xrdp_wm_log_msg: connecting to
sesman ip 127.0.0.1 port 3350
784]: (5784)(140716040189760)[INFO ] xrdp_wm_log_msg: sesman connect ok
784]: (5784)(140716040189760)[DEBUG] xrdp_wm_log_msg: sending login
info to session manager, please wait...
784]: (5784)(140716040189760)[DEBUG] return value from xrdp_mm_connect 0
784]: (5784)(140716040189760)[INFO ] xrdp_wm_log_msg: login successful
for display 10
784]: (5784)(140716040189760)[DEBUG] xrdp_wm_log_msg: started connecting
784]: (5784)(140716040189760)[INFO ] lib_mod_log_peer: xrdp_pid=5784
connected to X11rdp_pid=1918 X11rdp_uid=1000 X11rdp_gid=1000
client_ip=::ff>
784]: (5784)(140716040189760)[DEBUG] xrdp_wm_log_msg: connected ok
784]: (5784)(140716040189760)[DEBUG] xrdp_mm_connect_chansrv: chansrv
connect successful
784]: (5784)(140716040189760)[DEBUG] Closed socket 18 (AF_INET6 ::1 port 47132)
784]: (5784)(140716040189760)[DEBUG] Closed socket 12 (AF_INET6
::ffff:192.168.122.234 port 3389)
784]: (5784)(140716040189760)[DEBUG] xrdp_mm_module_cleanup
784]: (5784)(140716040189760)[DEBUG] Closed socket 19 (AF_UNIX)
784]: (5784)(140716040189760)[DEBUG] Closed socket 20 (AF_UNIX)

This is the journalctl log when connecting from my guacamole application:

connected client computer name: Guacamole RDP
993]: (6993)(140716040189760)[INFO ] adding channel item name cliprdr
chan_id 1004 flags 0xc0a00000
993]: (6993)(140716040189760)[INFO ] adding channel item name rdpdr
chan_id 1005 flags 0xc0800000
993]: (6993)(140716040189760)[INFO ] adding channel item name rdpsnd
chan_id 1006 flags 0xc0000000
993]: (6993)(140716040189760)[INFO ] TLS connection established from
::ffff:73.70.63.162 port 57206: TLSv1.3 with cipher
TLS_AES_256_GCM_SHA384
993]: (6993)(140716040189760)[DEBUG] xrdp_00001b51_wm_login_mode_event_00000001
993]: (6993)(140716040189760)[INFO ] Loading keymap file
/etc/xrdp/km-00000409.ini
993]: (6993)(140716040189760)[WARN ] local keymap file for 0x00000409
found and doesn't match built in keymap, using local keymap file
993]: (6993)(140716040189760)[DEBUG] xrdp_wm_log_msg: connecting to
sesman ip 127.0.0.1 port 3350
993]: (6993)(140716040189760)[INFO ] xrdp_wm_log_msg: sesman connect ok
993]: (6993)(140716040189760)[DEBUG] xrdp_wm_log_msg: sending login
info to session manager, please wait...
993]: (6993)(140716040189760)[DEBUG] return value from xrdp_mm_connect 0
993]: (6993)(140716040189760)[INFO ] xrdp_wm_log_msg: login successful
for display 10
993]: (6993)(140716040189760)[DEBUG] xrdp_wm_log_msg: started connecting
993]: (6993)(140716040189760)[INFO ] lib_mod_log_peer: xrdp_pid=6993
connected to X11rdp_pid=1918 X11rdp_uid=1000 X11rdp_gid=1000
client_ip=::ff>
993]: (6993)(140716040189760)[DEBUG] xrdp_wm_log_msg: connected ok
993]: (6993)(140716040189760)[DEBUG] xrdp_mm_connect_chansrv: chansrv
connect successful
993]: (6993)(140716040189760)[DEBUG] Closed socket 18 (AF_INET6 ::1 port 42942)
993]: (6993)(140716040189760)[DEBUG] Closed socket 12 (AF_INET6
::ffff:192.168.122.234 port 3389)
993]: (6993)(140716040189760)[DEBUG] xrdp_mm_module_cleanup
993]: (6993)(140716040189760)[DEBUG] Closed socket 19 (AF_UNIX)
993]: (6993)(140716040189760)[DEBUG] Closed socket 20 (AF_UNIX)

I have tried a bunch of things over the last week but none of them have
produced the high quality output that I am expecting. Also, VNC runs much
faster than RDP for some reason. But I heard it takes a lot of bandwidth
away. What is the comparison like?

How can I rdp faster from my application. What would help me debug things
faster???


-- End of Question--

-- 
*Pierre*
*Phone: (341)-204-7713*
*Email: bastola.pie...@gmail.com <bastola.pie...@gmail.com>*

Reply via email to