You should definitely *not* set "force-lossless" to "true" if intending
to support video.
With "force-lossless" set to "true", Guacamole's ability to adjust the
compression used for things like video will be entirely disabled. It
will instead be forced use compression that is slower and ill-suited for
video content.
Without "force-lossless" set, Guacamole will automatically recognize
video-like content and compress it using a lossy format like WebP,
dynamically adjusting the quality based on rendering latency.
- Mike
On 10/4/2023 3:06 AM, Adrian Owen wrote:
Play YouTube over guacamole connection is always slow. Frame by frame
video compression is required.
Run test again, with no play video.
Adrian
*From:*Pierre Bastola <bastola.pie...@gmail.com>
*Sent:* 04 October 2023 01:13
*To:* user@guacamole.apache.org
*Subject:* Using XRDP over Microsoft RDP client is much faster than
using it over Guacamole
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=8388608|||
|crypt_=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
<https://youtu.be/hOW1wsfSVu4>
My application (from the web client) https://youtu.be/5UiMNv9WSDc
<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/ <mailto:bastola.pie...@gmail.com>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@guacamole.apache.org
For additional commands, e-mail: user-h...@guacamole.apache.org