
                                    X M X
                          An X Protocol Multiplexor

                                 Version 2.1
-------------------------------------------------------------------------
OVERVIEW

XMX is an X protocol multiplexor.  It is a standalone utility for sharing
an X Windows session on multiple displays.  XMX takes advantage of the
networked nature of the X Window System by acting as an intermediary
between an X client and an X server.  In this way, XMX works with any
X clients and any X servers, without the need to modify either.

XMX connects to N servers like an X client, and accepts connections from
M clients like an X server.  XMX paints the same graphics on all servers.
What You See Is What I See.

XMX also demultiplexes user input.  XMX is actually a multiplexor-server,
in the same way that an X server is a "window graphics server." In the
same way that an X server has X clients that tell it what to do, XMX can
have clients that tell it what to do.  For example, an XMX client tells
XMX what X servers to add or drop from a session, and which ones may
provide input to X clients at any given moment.

XMX clients may impose whatever session sharing policy they choose.  XMX
merely provides the mechanism.

This software was developed at Brown University for use in our electronic
classroom.
-------------------------------------------------------------------------
DIFFERENCES FROM VERSION 1.x

XMX now runs in a window, happily coexisting with other X clients,
including window managers.

There is no longer a concept of "master" and "slave" servers.  Any server
or servers may be master (now known as having the "floor") or slave (now
known as having a "view") or a third category: "seat."  Having a seat means
having the ability to "raise your hand."

An X server's input mode (floor, seat or view) may be changed at any time
during a session.  X servers may be added or dropped from a session at
any time, as well.  These and other "session-control" operations are
initiated by an XMX client program that talks to XMX via a separate
protocol.

Version 2 also provides telepointers, which are like X cursors except that
they trace the movements of a server's pointer device on other servers,
within, and relative to, the virtual root window.  Any number of
telepointers may be created and "assigned" to servers independent of their
input mode.

As in version 1, version 2 creates a "virtual server" configuration by
comparing the capabilities of all X servers it initially connects to.
Unlike version 1, version 2 searches for the "least common denominator"
configuration.  Version 2 should operate better in heterogeneous
installations but there is still no guarantee that XMX will bridge all
server combinations.

Access control and authority protocols have been implemented.

Some X server functions have been completely taken over by XMX: atoms,
properties and selections.  Some have been partially taken over: event
generation and colormaps.  In general, version 2 has acquired much more
X server machinery than version 1 had.
-------------------------------------------------------------------------
USING IT

Since XMX is not itself an X server, it expects to connect to X servers
that are already running.  These servers must be willing to accept
client connections from whatever machine XMX is running on (see xhost(1)).

XMX uses the X authority mechanism.  Currently, only the MIT-MAGIC-COOKIE-1
protocol is supported.  Authority is used by default on all connections
to X servers.  Authority is used on incoming (client) connections only
if the -auth option is specified.

Since examples are easier to understand than lengthy explanations, here
are some examples.  In the following, assume all machines (moe, larry
and curly) have X servers running.

EXAMPLE 1

		moe% echo $DISPLAY
		moe:0.0
		moe% xmx -view larry curly&
		XMX Version 2.1, ready.
		moe% twm -display :1&

	Creates a virtual root window on moe, larry and curly.  Moe
	provides all input to shared clients, larry and curly provide
	none.

	Twm (a window manager), is the only shared client.  Using it,
	the user on moe can initiate other shared clients.

EXAMPLE 2

		moe% xmx :2 -geometry 1/1 -nodpy -floor larry -view curly&
		XMX Version 2.1, ready.
		moe% xterm -display :2&

	Creates a full-screen-sized virtual root window on larry and curly
	(-nodpy means ignore the DISPLAY environment variable).  Larry
	provides input, curly does not.

	An xterm is run as the only shared client.

EXAMPLE 3

		moe% xmxinit

	A virtual root window is created on moe and the user's .xmxinitrc
	script is run to invoke shared clients.  If no .xmxinitrc file
	exists, xterm is run as the default client.

EXAMPLE 4

		moe% xmxinit -- -debug pn >& xmx.trace

	As in example 3, but produces a trace of X protocol for use in
	debugging.
-------------------------------------------------------------------------
XMX was written by

John Bazik
Dept. of Computer Science, Box 1910
Brown University
Providence, RI  02912

(401) 863-7600
jsb@cs.brown.edu
