Vincent Bernat <[email protected]> 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;
}