Firstly,I downloaded the latest Xrdp and NeutrinoRDP source code of the master branch from the following website:
Then, installed them in a debian server successfully, but got incorrect interface rendering after the following steps:
1)Connect to the proxy server using mstsc in a window7 computer.
2)select NeutrinoRDP proxy module to connect to the remote server which runs Windows Server 2003
3)open software of Microsoft virtual Manager 2008 R2,then choose one option and a new window created,but there will Interface rendering error as follow:
we can find the second picture has mixed with the background and some part of it doesn't rendering at all.
the normal window should show as follow:
What’s more,I find a problem in the source file xrdp-neutrinordp.c which I think cause the error. I got the log information as follow but we can
See the polygon_sc->nDeltaEntries =4. And I can’t understand the process of handling the polygon_sc. Why doesn’t it handle the important data
polygon_sc -> codeDeltaList? I am looking forward to your help,thank you very much!
typedef struct _POLYGON_SC_ORDER POLYGON_SC_ORDER;
In xrdp_devel xrdp-neutrinordp.c file:
static void DEFAULT_CC lfreerdp_polygon_sc(rdpContext* context, POLYGON_SC_ORDER* polygon_sc)
struct mod *mod;
int i, npoints;
int server_bpp, client_bpp;
mod = ((struct mod_context *)context)->modi;
LLOGLN(10, ("lfreerdp_polygon_sc :%d(points) %d(color) %d(fillmode) "
"%d(bRop) %d(cbData) %d(x) %d(y)",
if (polygon_sc->nDeltaEntries == 3)
server_bpp = mod->inst->settings->color_depth;
client_bpp = mod->bpp;
points.x = polygon_sc->xStart;
points.y = polygon_sc->yStart;
for (i = 0; i < polygon_sc->nDeltaEntries; i++)
points[i + 1].x = 0; // polygon_sc->points[i].x;
points[i + 1].y = 0; // polygon_sc->points[i].y;
fgcolor = convert_color(server_bpp, client_bpp,
mod->server_set_pen(mod, 1, 1); // style, width
// TODO replace with correct brush; this is a workaround
// This workaround handles the text cursor in microsoft word.
// mod->server_fill_rect(mod, points.x, points.y,
// points.x-points.x, points.y-points.y);
// mod->server_set_brush(mod,); // howto use this on our indata??
LLOGLN(0, ("Not handled number of points in lfreerdp_polygon_sc"));