[lug] X11 Protocol, migrating windows to remote displays
D. Stimits
stimits at attbi.com
Sun May 18 19:10:53 MDT 2003
Michael J. Hammel wrote:
> On Sun, 2003-05-18 at 18:01, D. Stimits wrote:
>
> >Does anyone here know the X11 protocol well enough to say how easy it
> >would be to write an app (or modify xterm/konsole/gnome-terminal) to
> >allow migrating an X11 terminal to a remote display *after* the app has
> >started? I have an integrated app that I want to run entirely on one
> >machine, but I want the multiple windows it produces to be able to
> >migrate to/from a remote display. If I set $DISPLAY ahead of time, the
> >entire app goes to the remote display; even if I wanted that, it would
> >not allow me to migrate the window back to the original machine at a
> >later time. I'd like to be able to take an ID from a visible window or
> >widget, and tell X11 to redisplay on some other machine.
>
>
> The easiest way to do this would be to have the first app fork a child
> that displays on the remote system and has its own event processing loop
> and then use TCP or Unix sockets to send data to the child for display
> on the remote monitor.
Herein lies the pain...I don't want to rewrite a third party app, and I
want this to work with any app that puts out a window (or in this case,
multiple windows). I would like it to be such that the applications
being transferred between displays continue to run on the start machine,
but pieces of the app display on different displays, one at a time, as
if they were started with $DISPLAY to a remote host.
>
> If you don't want a forked child, you can connect to different remote X
> servers using the XOpenDisplay() call of Xlib. GDK 1.2 does not allow
> you to do this (haven't checked 2.x yet) so you'd have to do it directly
> from Xlib and fake gdk into doing the right thing. I have no idea what
> Qt can do in this area since I don't do C++.
It is this faking that I would like to do, but not from the original
application. I would like a second application to essentially hijack any
displayed widget, and proxy it to another host, without the original app
having any knowledge of it. For example, if you use KDE (and I think
Gnome) with multiple workspaces (view ports) on a single display, you
can right click on the title bar of a widget and it offers to let you
send the widget to another desktop...just another location on a virtual
desktop. I'd essentially be adding the ability to send it to an abstract
desktop that names not only the view ports of the current machine, but
also the view ports of the desktop on remote machines.
>
> I'd probably use the forked child method. If the data needs to be real
> time then you might not want this, but if you're doing real time display
> you probably aren't mucking with remote terminals either.
Problem with forking is that I have to rewrite every program. I'd like
to do things like open a browser on one machine (mozilla), and open the
email client, then move just the browser to a remote display. Or in a
software development IDE, to send the source code editor for one file to
one machine, and let the source code editor for a different file stay on
the local machine. Think of it as a poor man's Xinerama (pseudo-Xinerama
proxy), that supports redisplay not as drag-n-drop, but as
right-click-and-enter-display-specs. I have a second display on a second
machine with a fast network, but it has low cpu power on the second, and
all of the windows of the app have to work together on a single machine.
D. Stimits, stimits AT attbi DOT com
More information about the LUG
mailing list