Hi. I've been playing with Xrdp and x11vnc - and specifically with the
client window size. I think the following patch should add rough
support for the DesktopSize pseudoencoding, which allows a VNC server
to tell the client (in this case the Xrdp server) that its geometry
has changed. I've only looked at the Xrdp code for less than an hour,
so I might well be doing something wrong here - but at least it seems
to work.

On the VNC protocol side, the new geometry is sent encoded as a
rectangle; I've perhaps optimistically assumed that it will always be
(0,0)-(newWidth,newHeight).

What I've tested:
Windows 7 remote desktop client, connected to Xrdp. In Xrdp, connect
to x11vnc (set to create an xdummy server, since xdummy supports
xrandr). When logged on, use xrandr to change resolution - and the
client window should change to the given size as well.

Patch against 0.5.0 follows:
###

--- ../tmp/xrdp/vnc/vnc.c       2011-08-13 17:15:15.000000000 +0200
+++ vnc/vnc.c   2011-10-24 23:45:39.000000000 +0200
@@ -603,6 +603,26 @@
           }
           error = v->server_set_cursor(v, x, y, cursor_data, cursor_mask);
         }
+      } else if(encoding == 0xffffff21) /* DesktopSize */
+      {
+          g_writeln("Got DesktopSize message: %i %i %i %i", x, y, cx, cy);
+          v->server_width=cx;
+          v->server_height=cy;
+          v->mod_width=cx;
+          v->mod_height=cy;
+          v->server_reset(v, v->mod_width, v->mod_height, v->mod_bpp);
+          v->server_reset_clip(v);
+
+          /* Ask for a full update */
+          init_stream(s, 8192);
+          out_uint8(s, 3);
+          out_uint8(s, 0);
+          out_uint16_be(s, 0);
+          out_uint16_be(s, 0);
+          out_uint16_be(s, v->mod_width);
+          out_uint16_be(s, v->mod_height);
+          v->server_msg(v, "XrandR: Resolution changed", 0);
+          error = lib_send(v, s->data, 10);
       }
       else
       {
@@ -1028,12 +1048,13 @@
     init_stream(s, 8192);
     out_uint8(s, 2);
     out_uint8(s, 0);
-    out_uint16_be(s, 3);
+    out_uint16_be(s, 4);
     out_uint32_be(s, 0); /* raw */
     out_uint32_be(s, 1); /* copy rect */
     out_uint32_be(s, 0xffffff11); /* cursor */
+    out_uint32_be(s, 0xffffff21); /* DesktopSize */
     v->server_msg(v, "sending encodings", 0);
-    error = lib_send(v, s->data, 4 + 3 * 4);
+    error = lib_send(v, s->data, 4 + 4 * 4);
   }
   if (error == 0)
   {

###


-- 
Daniel Nebdal
OUS/IKF/Department of genetics

------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn 
about Cisco certifications, training, and career opportunities. 
http://p.sf.net/sfu/cisco-dev2dev
_______________________________________________
xrdp-devel mailing list
xrdp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xrdp-devel

Reply via email to