Vincent Bernat <ber...@debian.org> wrote:

> With your  RDP client,  you connect to  XRDP server. XRDP  server starts
> (through  sesman)  a  VNC  server.   XRDP  translates  RDP  to  VNC  and
> vice-versa. The VNC server starts your session.

Okay, good to know.  Thanks.

> Maybe you hit  the problem because Ctrl-K in emacs  copy the cutted line
> into the clipboard. Are you  able to reproduce the problem using another
> application that interacts with the clipboard?

Yes, that's it.  Good call.

I can now reproduce the problem by running this simple C program.
Compile with

gcc a.c -lXaw

Then a.out will reproduce the problem.  I can actually do this in a
session with just an xterm.  I don't even need a window manager.

I have also determined that the rdesktop client is exiting because it is
receiving an appid == MCS_DPUM (Disconnect Provider Ultimatum).  This is
happening in mcs.c line 364 (from the pristine 1.6.0 sources), which I
determined by running rdesktop in a debugger.  So altering the cut
buffer is causing xrdp to send a disconnect, or at least to send
something that looks like a disconnect to rdesktop and also to mstsc.
You're not seeing that?  I wonder what it could be.

--Jay

#include <X11/Xlib.h>
#include <X11/Shell.h>
#include <X11/Xaw/Box.h>
#include <stdlib.h>

void timeout(XtPointer p, XtIntervalId* i)
{
    exit(0);
}

int main(int argc, char* argv[])
{
    XtAppContext context;
    Widget top;
    Widget box;
    Display* dpy;
    top = XtVaAppInitialize(&context, "ClearCutBuffers",
                            0, 0, &argc, argv, NULL,
                            XtNoverrideRedirect, True,
                            XtNgeometry, "-10-10",
                            NULL);
    box = XtCreateManagedWidget("box", boxWidgetClass, top, NULL, 0);
    dpy = XtDisplay(top);
    XStoreBuffer(dpy, "", 0, 0);
    XtAppAddTimeOut(context, 1, timeout, 0);
    XtRealizeWidget(top);
    XtAppMainLoop(context);
    return 0;
}

Reply via email to